2016-07-21 3 views
3

Привет, парень У меня есть две таблицы Cell и <fo:leader/> в обеих ячейках. Как я могу избежать, чтобы получить пространство между двумя ячейками. Невозможно охватить две ячейки.XSL: FO избежать пробела между ячейками таблицы

enter image description here

Я использую Antennahouse и XSLT 2.0.

Вот мой код для таблицы

<fo:table width="100%" > 
      <fo:table-column column-width="50%"/> 
      <fo:table-column column-width="50%"/> 
      <fo:table-body > 
       <fo:table-row> 
       <fo:table-cell > 
        <fo:block border-right-width="0.0mm" > 
         <xsl:if test="page"> 
         <xsl:attribute name="text-align-last">justify</xsl:attribute> 
         </xsl:if> 
        <xsl:value-of select="concat(@ref1,' ')"/> 
         <xsl:if test="page">      
          <fo:leader leader-pattern="dots"/> 
         </xsl:if>   
        </fo:block> 
       </fo:table-cell> 
       <fo:table-cell > 
        <fo:block text-align="justify" text-align-last="right" axf:text-align-first="justify"> 
        <xsl:if test="page"> 
         <fo:leader leader-pattern="dots" /> 
        </xsl:if> 
        <fo:inline><xsl:apply-templates select="page" mode="normal"><xsl:with-param name="chapter" select="@chapterNumber"></xsl:with-param></xsl:apply-templates></fo:inline></fo:block> 
       </fo:table-cell> 
       </fo:table-row> 
+1

Вы можете попробовать убедиться, что для таблицы (или только соответствующих ячеек) есть 0pt 'padding' и' border'. Включение вашей FO для таблицы может помочь вам получить более точный ответ. – lfurini

+0

Где заполнение/граница для установки в ячейке или блоке? – Franz

+0

Так что я добавляю его для блока и ячейки, но ничего не меняется :( – Franz

ответ

3

Без всех других вещей, у вас есть, с чисто XSL FO и без расширений это работает для меня:

   <fo:table width="100%" > 
        <fo:table-column column-width="50%"/> 
        <fo:table-column column-width="50%"/> 
        <fo:table-body > 
         <fo:table-row> 
          <fo:table-cell> 
           <fo:block text-align-last="justify">  
            <fo:inline>Stuff</fo:inline> 
             <fo:leader leader-pattern="dots"/>   
           </fo:block> 
          </fo:table-cell> 
          <fo:table-cell> 
           <fo:block text-align-last="justify"> 
             <fo:leader leader-pattern="dots" /> 
            <fo:inline>1</fo:inline></fo:block> 
          </fo:table-cell> 
         </fo:table-row> 
        </fo:table-body> 
       </fo:table> 

без пробелов.

enter image description here

В ответ на вопрос, можно ли мне повезло? Протестировано снова, различный контент и ширина столбцов таблицы. Контент, который я показываю, скорее всего, является ядерным и разной длины, и я менял размер ячеек таблицы. Во всех случаях нет пробелов.

enter image description here

Я проверил несколько другие вещи и осознать различие форматировщик. Apache FOP и Antennahouse дают проблему, которую вы показали, я использовал RenderX XEP (с кем я работаю). Это поведение не проявляется. ИМХО, правильный ответ не является пробелом, если у вашего форматирования есть алгоритмы, позволяющие сжимать межсимвольное и словосочетание в пределах допустимого допуска. Обоснованный «оправдан».

+0

Не может быть, что вы были особенно удачливы с использованием ширины ширины таблицы/ширины рисунка? – lfurini

+1

Я обновил ответ с дальнейшими тестами. Это форматирование. Я использовал RenderX XEP и не обнаружил этой проблемы. Как FOP, так и Antennahouse приводят к пробелам, как показано в –

+0

Двигатель должен отформатировать, как предлагает Кевин, без пробелов. – kstubs

1

Я думаю, что есть две причины странного «разрыва» между двумя рядами точек на каждой строке таблицы:

  1. столбец не кратен картины лидера (точка + пробел); например, если точка и пространство имеют ширину 3 мм, а пустая область, заполняемая fo:leader, имеет ширину 17 мм, форматирующий материал может вставлять только 5 точек, оставляя дополнительный зазор 2 мм
  2. точки в разных строках не выровнены; каждая серия из точек в левой колонке начинает Rigth с конца предыдущего текста, так что разрыв зависит также от длины текста

Решение:

  • использование leader-alignment="reference-area" (который XSLFormatter supports)
  • установить leader-pattern-width и установить таблицу width кратному этой
+0

Я не согласен с предпосылкой, что ширина столбца кратно шаблону лидера. На практике это невозможно на основе шрифтов, кернинг этих символов и длина текста до/после лидеров. Невозможно предсказать. Обоснованный текст означает обоснованный текст. –

Смежные вопросы