2016-06-17 3 views
2

Это следующий вопрос к this question Я опубликовал некоторое время назад.Как заполнить таблицу по вертикали?

Я получил следующий XSL таблицу стилей:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo"> 
    <xsl:template match="barcode-list"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm"> 
      <fo:region-body/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="simpleA4"> 
     <fo:flow flow-name="xsl-region-body"> 
      <fo:block font-size="14pt"> 
      <fo:table table-layout="fixed" width="100%" border-collapse="separate" border-separation="3pt">  
      <fo:table-column column-width="50%"/> 
      <fo:table-column column-width="50%"/> 
      <fo:table-body> 
       <xsl:apply-templates select="item"/> 
      </fo:table-body> 
      </fo:table> 
      </fo:block> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
    <xsl:template match="item"> 
    <fo:table-cell text-align="center"> 
     <xsl:if test="position() mod 2 = 1"> 
     <xsl:attribute name="starts-row">true</xsl:attribute> 
     </xsl:if> 
     <fo:block> 
     <fo:external-graphic height="scale-to-fit" width="100%" content-height="scale-to-fit" content-width="scale-to-fit"> 
      <xsl:attribute name="src">url('<xsl:value-of select="image"/>')</xsl:attribute> 
     </fo:external-graphic> 
     </fo:block> 
     <fo:block> 
     <fo:external-graphic height="scale-to-fit" width="100%" content-height="scale-to-fit" content-width="scale-to-fit"> 
      <xsl:attribute name="src">url('<xsl:value-of select="barcode"/>')</xsl:attribute> 
     </fo:external-graphic> 
     </fo:block> 
     <fo:block wrap-option="wrap"> 
     <xsl:value-of select="name"/> 
     </fo:block> 
    </fo:table-cell> 
    </xsl:template> 
</xsl:stylesheet> 

Это прекрасно работает, так как он заполняет таблицу с двумя столбцами с моими данными.

Это заполняет таблицу «горизонтально», как и таблица слева.

я вновь оценили мои требования и понял, что я хотел бы, чтобы заполнить «по вертикали», как в таблице справа:

---------------  ----------------- 
| 1 | 2 | | 1 | (n/2)+1 | 
| 3 | 4 | | 2 | (n/2)+2 | 
| ... | ... | | ... | ... | 
| n-1 | n | | n/2 | n | 
---------------  ----------------- 

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

Это пример моего XML:

<barcode-list> 
    <item> 
     <name>the-barcode</name> 
     <barcode>file:///d:/pdf/barcode.png</barcode> 
     <image>file:///d:/test.png</image> 
     <format>CODE_128</format> 
    </item> 
    ... 
</barcode-list> 

Я нашел this сообщения записи доски, которая, кажется, чтобы предложить решение, но я не могу обернуть мою голову вокруг того, что он делает.

Может ли кто-нибудь дать мне какие-либо указания относительно того, как начать?

+0

Создать документ в два столбца, а не таблицу –

+0

@KevinBrown Позволит ли я автоматически перейти к следующему столбцу в конце страницы или в основном заполнить первый столбец всех страниц, прежде чем он начнет со второго столбца первой страницы? – Baz

+1

Двухстолбцовый документ заполнит левый столбец, затем правый столбец, начало снова на следующей странице и так далее. –

ответ

4

Используйте двухстоечный макет документа, а ваши блоки контента (с двумя изображениями и меткой) будут стекать по странице, а затем в следующий столбец. Это будет продолжаться на последующих страницах. Ниже приведен образец FO и результат. Несколько вещей, чтобы отметить:

  • Две колонны достигается за счет добавления столбца-счетчика в области тел
  • Каждый из контейнеров с вашим повторяющимся содержанием находится в пределах блок-контейнера с Keep-together.within- столбец установлен на «всегда», чтобы гарантировать, что ваши два изображения и метка все вместе, а не разделены по столбцам или страницам.
  • Я сделал изменить графические спецификации, как масштаб к приступу не является правильным по ширине/высоте

Примера FO коды (обратите внимание, я только показывая первые несколько блоков здесь, и я их пронумеровал, чтобы показать заказ):

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
<fo:layout-master-set> 
    <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm"> 
     <fo:region-body column-count="2"/> 
    </fo:simple-page-master> 
</fo:layout-master-set> 
<fo:page-sequence master-reference="simpleA4"> 
    <fo:flow flow-name="xsl-region-body"> 
     <fo:block-container font-size="14pt" text-align="center" keep-together.within-column="always"> 
      <fo:block> 
       <fo:external-graphic src="url('box.jpg')" height="100%" width="100%" content-height="scale-to-fit" content-width="scale-to-fit"/>     
      </fo:block> 
      <fo:block> 
       <fo:external-graphic src="url('brick.jpg')" height="100%" width="100%" content-height="scale-to-fit" content-width="scale-to-fit"/> 
      </fo:block> 
      <fo:block wrap-option="wrap"> 
       Object Name 1 
      </fo:block> 
     </fo:block-container> 

     <fo:block-container font-size="14pt" text-align="center" keep-together.within-column="always"> 
      <fo:block> 
       <fo:external-graphic src="url('box.jpg')" height="100%" width="100%" content-height="scale-to-fit" content-width="scale-to-fit"/>     
      </fo:block> 
      <fo:block> 
       <fo:external-graphic src="url('brick.jpg')" height="100%" width="100%" content-height="scale-to-fit" content-width="scale-to-fit"/> 
      </fo:block> 
      <fo:block wrap-option="wrap"> 
       Object Name 2 
      </fo:block> 
     </fo:block-container> 

Пример вывода для 9 блоков:

enter image description here

+0

Блестящий, именно то, что я искал. Благодаря! – Baz

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