0

我有一个带有 CALS 表的 XML 文件,我想将它导入到 indesign 中。问题是,indesign 中的实际表格定义了一些单元格样式,并且 indesign 不允许将标签(和样式)添加到 CALS 表格(仅限 indesign 表格)。

我的 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 中完成所有样式,那就太好了。我真的不喜欢colwidth在 xml 中设置它,但我明白为什么我必须这样做......

我听说那里有 xslt 或 idml 的解决方案,但我对这两者都是新手......是否有一个简单的解决方案来添加单元格样式(一个 for<tbody>和一个 for <thead>)?

表格样式也有同样的问题(还不需要这个,但也许我以后需要它......)

4

2 回答 2

1

对于仍在寻找的任何人 - 有一个单独的aid5:允许单元格样式的命名空间。您可以在表格标记属性中组合 2 个命名空间,如下例所示,以利用辅助:和辅助 5:属性...也可以使用表格样式,您只需将表格标记“命名”为唯一的名称并使用该名称将您的标签映射到 Indesign 文件中的样式。命名表标签和杂项。命名标签必须手动映射(表格的表格样式,或其他格式的字符样式),而标签内的 cellstyle、pstyle(段落样式)和 cstyle(字符样式)属性只要您的段落、单元格或字符样式具有完全相同的区分大小写的名称,就可以映射它们自己。如果您的 Indesign 模板中可以有一个占位符表格(带有一个标题行和一个正文行),您可以放弃使用宽度。任何预填充的单元格(如标题行)都可以通过使用如下所示的自结束标签来跳过。最后,如果您不知道您将拥有多少行,只需将每个重复行设为自己的完整表格,其中只有一行。不理想,在我的例子中,我们使用了一个变量来填充aid: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>
于 2015-06-01T19:15:53.080 回答
0
  1. 您必须使用一些示例数据在 InDesign 中设计表格的外观
  2. 标记示例表的内容
  3. 使用 XML-Export 函数导出示例表
  4. 根据示例 xml-data,您可以为 cals-table 编写转换
  5. 应用 indesign xslt 选项导入 Cals 数据

如果您不是那么有经验,那么最棘手的部分可能是为 table 标记及其属性提供正确的命名空间:

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>

于 2012-12-20T02:09:18.673 回答