2016-06-17 14 views
2

Dies ist eine Follow-up-Frage zu this question Ich gepostet vor einer Weile.Wie füllt man die Tabelle vertikal?

Ich habe den folgenden XSL-Stylesheet bekommt:

<?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> 

Dies funktioniert gut, da es eine Tabelle mit zwei Spalten mit meinen Daten füllt.

Dies füllt die Tabelle "horizontal", wie die Tabelle auf der linken Seite.

ich meine Anforderungen neu bewertet und erkennen, dass ich es auf dem rechten Seite „vertikal“, wie die Tabelle gefüllt werden möchte:

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

Idealerweise würde ich will in der nächsten Spalte bewegen am Ende der Seite und neu beginnen in der ersten Spalte auf der nächsten Seite, aber ich nehme an, dass das nicht möglich ist.

Dies ist ein Beispiel für meine 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> 

Ich fand this message board-Eintrag, eine Lösung vorzuschlagen scheint, aber ich kann meinen Kopf nicht umschlingen, was es tut.

Kann mir jemand irgendwelche Hinweise geben, wie ich anfangen soll?

+0

eine zweispaltige Dokument erstellen und eine Tabelle nicht –

+0

@KevinBrown Würde es mir erlauben, automatisch zur nächsten Spalte am Ende der Seite zu gehen, oder würde es im Grunde die erste Spalte aller Seiten füllen, bevor es mit der zweiten Spalte der ersten Seite beginnt? – Baz

+1

Ein zweispaltiges Dokument würde die linke Spalte füllen, dann die rechte Spalte, der Anfang auf der nächsten Seite und so weiter. –

Antwort

4

Verwenden Sie ein zweispaltiges Dokumentlayout und Ihre Inhaltsblöcke (mit den zwei Bildern und einem Label) werden die Seite hinunter und dann zur nächsten Spalte. Dies würde auf den folgenden Seiten fortgesetzt werden. Unten ist eine Probe FO und Ergebnis. Ein paar Dinge zu beachten:

  • Zwei Spalten durch Zugabe von Spaltenzahl in der Region Körper
  • Jeder der Behälter mit dem sich wiederholenden Inhalt ist in einem Block-Behälter mit Keep-together.within- erreicht Spalte auf "immer" gesetzt, um sicherzustellen, dass Ihre zwei Bilder und ein Label alle zusammen sind und nicht über Spalten oder Seiten verteilt sind.
  • Ich habe Ihre Grafik-Spezifikation ändern als Scale-to-fit auf Breite/Höhe nicht korrekt ist

Probe FO-Code (beachten Sie, ich ein nur die ersten paar Blöcke hier zeigen und ich zählte sie den Auftrag zu zeigen,):

<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> 

Beispielausgabe für 9 Blöcke:

enter image description here

+0

Brilliant, genau das, was ich gesucht habe. Vielen Dank! – Baz

Verwandte Themen