Шаблон преобразования / перевода xsl

Я создаю таблицу стилей xsl-fo to rtf. Одна из моих проблем - преобразовать многочисленные единицы измерения в документе xsl-fo в твипы (единицы измерения rtf).

Один конкретный фрагмент кода вычисляет ширину столбцов:

<xsl:value-of select="sum(preceding-sibling:
   :fo:table-column/@column-width) + @column-width"/>

... проблема в том, что значение / @ column-width может быть любым от 1 дюйм (1 дюйм) до 20 пикселей (20 пикселей), поэтому, когда я делаю сумму это не удастся.

Мне нужно как-то преобразовать @ column-width в эквивалент твипа:

Я создаю таблицу стилей xsl-fo в rtf. Одна из моих проблем - преобразовать многочисленные единицы измерения в документе xsl-fo в твипы (единицы измерения rtf).

Один конкретный фрагмент кода вычисляет ширину столбцов:

<xsl:value-of select="sum(preceding-sibling:
   :fo:table-column/@column-width) + @column-width"/>

... проблема, заключающаяся в том, что значение / @ column-width может быть любым от 1 дюйм (1 дюйм) до 20 пикселей (20 пикселей), поэтому, когда я суммирую это не удастся.

Мне нужно как-то преобразовать @ column-width в эквивалент твипа:

Я создаю таблицу стилей xsl-fo в rtf. Одна из моих проблем - преобразовать многочисленные единицы измерения в документе xsl-fo в твипы (единицы измерения rtf).

Один конкретный фрагмент кода вычисляет ширину столбцов:

<xsl:value-of select="sum(preceding-sibling:
   :fo:table-column/@column-width) + @column-width"/>

... проблема, заключающаяся в том, что значение / @ column-width может быть любым от 1 дюйм (1 дюйм) до 20 пикселей (20 пикселей), поэтому, когда я суммирую это не удастся.

Мне нужно как-то преобразовать @ column-width в эквивалент твипа: 1pt = 19,95 твипа, 1px = 15 твипов, 1pc = 240 твипов, 1 дюйм = 1440 твипов, 1 см = 567 твипов, 1 мм = 56,7 твипов, 1em = 240 твипов

Я, наверное, смогу написать метод, который сможет преобразование, но я убежден, что есть способ использовать функцию translate () , чтобы сделать это намного эффективнее.

Обратите внимание, что мой xsl не так уж хорош, поэтому пример о том, как этого добиться, будет оценено

РЕДАКТИРОВАТЬ

Мне удалось найти то, что я хочу, но понятия не имею, как вызвать этот шаблон из приведенного выше расчета:

<xsl:template match="@*" mode="convert-to-twips">
    <xsl:variable name="scaling-factor">
      <xsl:choose>
        <xsl:when test="contains (., 'pt')">19.95</xsl:when>
        <xsl:when test="contains (., 'px')">15</xsl:when>
        <xsl:when test="contains (., 'pc')">240</xsl:when>
        <xsl:when test="contains (., 'in')">1440</xsl:when>
        <xsl:when test="contains (., 'cm')">567</xsl:when>
        <xsl:when test="contains (., 'mm')">56.7</xsl:when>
        <xsl:when test="contains (., 'em')">240</xsl:when>
        <!-- guess: 1em = 12pt -->
        <xsl:otherwise>1</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name="numeric-value"
         select="translate (., '-0123456789.ptxcinme', '-0123456789.')"/>
    <xsl:value-of select="$numeric-value * $scaling-factor"/>

 </xsl:template>
5
задан Michael Petrotta 21 May 2011 в 22:06
поделиться