0

インデザインにインポートしたい CALS テーブルを含む XML ファイルがあります。問題は、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)。すべてのスタイリングをインデザインで行うことができれば素晴らしいと思います。XMLに設定するのはあまり好きではありませんがcolwidth、なぜこれをしなければならないのか理解しています...

xsltまたはidmlを使用したソリューションがあると聞きましたが、どちらも初めてです...セルスタイルを追加する簡単なソリューションはありますか(1つと1<tbody><thead>)?

同じ質問がテーブル スタイルにも当てはまります (これはまだ必要ありませんが、後で必要になるかもしれません...)

4

2 に答える 2

0
  1. サンプルデータを使用して、InDesign でテーブルの外観をデザインする必要があります
  2. サンプル テーブルのコンテンツにタグを付ける
  3. XML エクスポート機能を使用してサンプル テーブルをエクスポートします。
  4. サンプルの xml-data に基づいて、cals-table の変換を作成できます
  5. indesign xslt オプションを適用して Cals データをインポートする

あまり経験がない場合、おそらく最も難しい部分は、テーブル タグとその属性に正しい名前空間を提供することです。

xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"

セルスタイルを使用してデータを indesign テーブルに変換する XSLT スタイルシートの例を次に示します。

<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 に答える