我有一个带有CALS表的XML文件,我想将其导入到indesign中。 问题是,indesign中的实际表定义了一些单元格样式,并且indesign不允许将标记(以及样式)添加到CALS表(仅限于设置表)。
我的xml看起来像这样
<table>
<tgroup cols="6">
<colspec colname="c1" colwidth="29pt"/>
<colspec colname="c2" colwidth="172pt"/>
<colspec colname="c3" colwidth="71pt"/>
<colspec colname="c4" colwidth="69pt"/>
<colspec colname="c5" colwidth="113pt"/>
<colspec colname="c6" colwidth="69pt"/>
<thead>
<row>
<entry align="left" colsep="0" valign="bottom">Tag</entry>
<entry align="left" colsep="0" valign="bottom">Datum</entry>
<entry align="left" colsep="0" valign="bottom">Zeit</entry>
<entry align="left" colsep="0" valign="bottom">Ort</entry>
<entry align="left" colsep="0" valign="bottom">Leitung</entry>
<entry align="left" colsep="0" valign="bottom">Kursnummer</entry>
</row>
</thead>
<tbody>
<row>
<entry colsep="0">Mi</entry>
<entry colsep="0" valign="bottom">15.03.2012, 16.03.2012, 17.03.2012</entry>
<entry colsep="0" valign="bottom">10:15 - 11:45</entry>
<entry colsep="0" valign="bottom">someplace</entry>
<entry colsep="0" valign="bottom">some Name</entry>
<entry colsep="0" valign="bottom">ABC-DE-12</entry>
</row>
<row>
<entry colsep="0">Mi</entry>
<entry colsep="0" valign="bottom">15.06.2012, 16.06.2012, 17.06.2012</entry>
<entry colsep="0" valign="bottom">09:15 - 10:45</entry>
<entry colsep="0" valign="bottom">otherplace</entry>
<entry colsep="0" valign="bottom">other Name</entry>
<entry colsep="0" valign="bottom">XYZ-U-K-13</entry>
</row>
</tbody>
</tgroup>
</table>
当我导入这个时,我得到一个带有一些黑色边框的标准表格,并且字体大小错误。我还在细胞样式中添加了一些细节(即彩色边框底部0.5pt)。如果我可以在indesign中完成所有样式,那就太棒了。我真的不喜欢在xml中设置colwidth
,但我理解为什么我必须这样做...
我听说有xslt或idml的解决方案,但我对两者都不熟悉......
是否有一个简单的解决方案来添加单元格样式(一个用于<tbody>
,一个用于<thead>
)?
同样的问题适用于表格样式(不需要这个,但也许我以后需要它......)
答案 0 :(得分:1)
对于任何仍在寻找的人 - 有一个单独的aid5:名称空间允许单元格样式。您可以在表标记属性中组合2个名称空间,如下面的示例所示,以利用aid:和aid5:attributes ...也使用表格样式,您只需将表格标记“命名”为独特的名称,并使用该名称将标记映射到Indesign文件中的样式。命名表标签和misc。命名标记必须手动映射(表格的表格样式,或其他格式的字符样式),而标签中的cellstyle,pstyle(段落样式)和cstyle(字符样式)属性 地图只要你有一个段落,单元格或字符样式与完全相同的区分大小写的名称。如果您可以在Indesign模板中拥有占位符表(带有标题行和一个正文行),则可以放弃使用宽度。可以使用自闭标签跳过任何预先填充的单元格(如标题行),如下所示。最后,如果您不知道您将拥有多少行,只需将每个重复行设置为只有一行的完整表。不理想,在我的例子中,我们使用变量来填充辅助:trows属性。正在为我们提供数据计算行数的前端(编辑,修复了错误的列数和添加的缩进)。
<!-- table with widths declared -->
<myTableStyleName xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/" aid:table="table" aid:trows="3" aid:tcols="2">
<Cell aid:table="cell" aid:ccolwidth="200" aid:theader="" aid:crows="1" aid:ccols="1" aid5:cellstyle="headerCell" aid:pstyle="headerCellP">column one header</Cell>
<Cell aid:table="cell" aid:ccolwidth="200" aid:theader="" aid:crows="1" aid:ccols="1" aid5:cellstyle="headerCell" aid:pstyle="headerCellP">column two header</Cell>
<Cell aid:table="cell" aid:ccolwidth="200" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphAwayGame">row 1 col 1</Cell>
<Cell aid:table="cell" aid:ccolwidth="200" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphHomeGame">row 1 col 2 <myCharStyle>WE WON!</myCharStyle></Cell>
<Cell aid:table="cell" aid:ccolwidth="200" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphAwayGame">row 2 col 1</Cell>
<Cell aid:table="cell" aid:ccolwidth="200" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphHomeGame">row 2 col 2</Cell>
</myTableStyleName>
<!-- table data populating starter rows in Indesign, no widths needed -->
<Table xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/" aid:table="table" aid:trows="3" aid:tcols="2">
<Cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid5:cellstyle="headerCell" aid:pstyle="headerCellP"/>
<Cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid5:cellstyle="headerCell" aid:pstyle="headerCellP"/>
<Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphAwayGame">row 1 col 1</Cell>
<Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphHomeGame">row 1 col 2</Cell>
<Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphAwayGame">row 2 col 1</Cell>
<Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid5:cellstyle="bodyCellA" aid:pstyle="paragraphHomeGame">row 2 col 2</Cell>
</Table>
答案 1 :(得分:0)
如果你不是那么有经验,那么最棘手的部分可能就是为表标签及其属性提供正确的命名空间:
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
以下是一个示例XSLT样式表,用于将数据转换为带有单元格样式的indesign表:
<xsl:stylesheet
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/"
exclude-result-prefixes="xs">
<xsl:output indent="yes" encoding="UTF-8" standalone="yes" />
<xsl:strip-space elements="table thead tbody row entry" />
<xsl:variable name="tcols"><xsl:value-of select="table/tgroup/@cols" /></xsl:variable>
<xsl:variable name="trows"><xsl:value-of select="ceiling ( ( count(table/tgroup/thead/row/entry) + count(table/tgroup/tbody/row/entry) ) div $tcols )" /></xsl:variable>
<xsl:template match="/">
<xsl:processing-instruction name="whitespace-handling">
<xsl:text>use-tags</xsl:text>
</xsl:processing-instruction>
<table aid:table="table" aid:trows="{$trows}" aid:tcols="{$tcols}">
<xsl:apply-templates select="table/tgroup/thead/row" />
<xsl:apply-templates select="table/tgroup/tbody/row" />
</table>
</xsl:template>
<xsl:template match="thead/row/entry | tbody/row/entry">
<cell aid:table="cell" aid:crows="1" aid:ccols="1">
<xsl:if test="ancestor::thead">
<xsl:attribute name="aid:theader" />
</xsl:if>
<!-- Here your style-definition based on something -->
<xsl:attribute name="aid5:cellstyle"><xsl:text>mycellstyle</xsl:text></xsl:attribute>
<xsl:attribute name="aid:ccolwidth">
<xsl:call-template name="getcolwidth">
<xsl:with-param name="position">
<xsl:value-of select="position()" />
</xsl:with-param>
</xsl:call-template>
</xsl:attribute>
<xsl:value-of select="." />
</cell>
</xsl:template>
<xsl:template name="getcolwidth">
<xsl:param name="position" />
<xsl:for-each select="/table/tgroup/colspec">
<xsl:if test="position() = $position">
<xsl:value-of select="substring-before(@colwidth, 'pt')" />
</xsl:if>
</xsl:for-each>
</xsl:template>