Я создаю таблицу стилей 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>