Waldi
I'm new here

Spaltenbreite in Tabellen bei PDF-Generierung

Hallo Zusammen,

ich habe bei der PDF-Generierung folgendes Problem. Im Allround-Absatz können Tabellen erstellt werden. Diese können aber nicht in der Spaltenbreite angepasst werden. Daher habe ich ein Workaround gebaut, bei welchem in den Zell-Eigenschaften (via Stilvorlage) einen Prozentwert hinterlegt werden kann welcher die Spaltenbreite der aktuellen Spalte definiert. Im HTML funktioniert das ganze.

Nun möchte ich diese Breite ins PDF übernehmen.

Im PDF-Kanal des Tabellen-Templates muss hierfür für jede Spalte die Breite angegeben werden.

<fo:table space-before="3mm" space-after="3mm" table-layout="fixed" border="solid">

          $CMS_FOR(colNr, [1..#table.cols])$

          <fo:table-column column-width="auto"/>

          $CMS_END_FOR$

          <fo:table-body>

               $CMS_VALUE(#content)$

          </fo:table-body>

</fo:table>

Nun müsste ich für die Breite der Spalten im betreffenden fo:table-column-Tag die korrekte Breite eintragen.

Gibt es einen Weg um im Tabellen-Template auf die sich in der Tabelle befindenden Zellen zuzugreifen? Gleichzeitig sollte ich die Information haben, in welcher Spalte sich die aktuell untersuchte Zelle befindet damit ich den Wert korrekt zuordnen kann.

Viele Grüße

0 Kudos
4 Replies
Lopes
I'm new here

Hallo Waldemar,

ich vermute hier hilft Dir das #cell-Systemobjekt weiter. Du kannst einzelne Attribute auslesen und die Position der Zelle in der Tabelle bestimmen.

Viele Grüße

Rafael

0 Kudos

Hallo Waldemar,

benötigst du noch weitere Hilfe oder hat dir Rafaels Antwort bereits geholfen? In diesem Fall wäre es toll, wenn du seine "richtige Antwort" entsprechend markierst.

Solltest du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es super, wenn du diese hier bereitstellst.


Viele Grüße

Michaela

0 Kudos

Hallo,

diese Möglichkeit habe ich bereits untersucht. Aber leider habe ich keinen Weg gefunden um im Ausgabekanal des Tabellen-Templates (nicht Tabellenzelle o. zeile) auf die entsprechenden Attribute zugreifen zu können. #cell liefert mir hier keine Ausgabe.

Auch die access oder dev API konnte mir hier nicht weiterhelfen.

Gibt es hierfür noch einen weiteren Lösungsansatz?

Viele Grüße

Waldemar

0 Kudos
mikula
Crownpeak employee

Hallo Waldemar,

wie Rafael bereits beschrieben hat, sollte es kein Problem sein, die von dir gewünschten Werte auszulesen. In der Vorlage sollte es möglich sein, auf das Systemobjekt der Zelle zuzugreifen (#cell). Dazu gehören die Werte aus den Feldern #cell.col und #cell.row sowie #cell.rowNumber und #cellColNumber.

Ich habe mal das Beispiel aus dem Mithras Energy Projekt entsprechend angepasst:

<CMS_HEADER>

<CMS_FUNCTION name="Table" resultname="fr_st_table">

  <CMS_PARAM name="tableData" value="st_table" />

  <CMS_NODE_PARAM name="tableFormat">

    <HEADERSPEC><![CDATA[<fo:table table-layout="fixed" width="100%">$CMS_FOR(cols, [1..#table.cols])$<fo:table-column column-width="$CMS_VALUE(168/#table.cols)$mm"/>$CMS_END_FOR$<fo:table-body>$CMS_VALUE(#content)$</fo:table-body></fo:table>]]></HEADERSPEC>

    <ROW number="ALL"><![CDATA[<fo:table-row>$CMS_VALUE(#content)$</fo:table-row>]]></ROW>

    <CELL row="0" col="ALL"><![CDATA[<fo:table-cell$CMS_IF(!#cell.colspan.isEmpty && #cell.colspan > 0)$ number-columns-spanned="$CMS_VALUE(#cell.colspan)$"$CMS_END_IF$ border-width="1mm" border-style="solid" border-color="#FFFFFF" background-color="#E5E7EC"><fo:block-container$CMS_IF(st_topLine)$ font-weight="bold"$CMS_END_IF$ padding="1mm" margin="1mm" overflow="hidden"><fo:block>$CMS_VALUE(#content )$ $CMS_VALUE(#cell.colNumber)$</fo:block></fo:block-container></fo:table-cell>]]></CELL>

    <CELL row="ODD" col="ALL"><![CDATA[<fo:table-cell$CMS_IF(!#cell.colspan.isEmpty && #cell.colspan > 0)$ number-columns-spanned="$CMS_VALUE(#cell.colspan)$"$CMS_END_IF$ border-width="1mm" border-style="solid" border-color="#FFFFFF" background-color="$CMS_IF(st_altRows)$#DCDCDC$CMS_ELSE$#EDEFF2$CMS_END_IF$"><fo:block padding="1mm" margin="1mm">$CMS_VALUE(#content)$</fo:block></fo:table-cell>]]></CELL>

    <CELL row="ALL" col="ALL"><![CDATA[<fo:table-cell$CMS_IF(!#cell.colspan.isEmpty && #cell.colspan > 0)$ number-columns-spanned="$CMS_VALUE(#cell.colspan)$"$CMS_END_IF$ border-width="1mm" border-style="solid" border-color="#FFFFFF" background-color="#EDEFF2"><fo:block padding="1mm" margin="1mm">$CMS_VALUE(#content)$</fo:block></fo:table-cell>]]></CELL>

          </CMS_NODE_PARAM>

</CMS_FUNCTION>

</CMS_HEADER>

<fo:block space-after="3mm" space-before="3mm">

          $CMS_IF(!st_headline.isEmpty)$

          <fo:block space-after="2mm">

                    <fo:inline font-size="11pt" font-weight="bold" color="#CF6100">$CMS_VALUE(st_headline.convert)$</fo:inline>

          </fo:block>

          $CMS_END_IF$

          $CMS_VALUE(fr_st_table)$

          $CMS_IF(!st_underline.isEmpty)$$CMS_VALUE(st_underline)$$CMS_END_IF$

</fo:block>

0 Kudos