XSL - Problemas con saltos de línea en XSLT

 
Vista:

Problemas con saltos de línea en XSLT

Publicado por Mario (1 intervención) el 28/12/2015 17:11:44
Hola:
Estoy intentando sacar en un pdf una información incluida por pantalla en una aplicación web, aplicando una hoja de transformación.
El caso es que no doy con la forma de que se respeten los saltos de línea

Es decir que si meto por pantalla
a
b&C

En el PDF me sale a?b&C

El XSLT que estoy usando es el siguiente

<xsl:variable name="hex" select="'0123456789ABCDEF'"/>
<xsl:variable name="ascii"> !"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~</xsl:variable>
<xsl:variable name="safe">!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~</xsl:variable>
<xsl:variable name="latin1">&#160;&#161;&#162;&#163;&#164;&#165;&#166;&#167;&#168;&#169;&#170;&#171;&#172;&#173;&#174;&#175;&#176;&#177;&#178;&#179;&#180;&#181;&#182;&#183;&#184;&#185;&#186;&#187;&#188;&#189;&#190;&#191;&#192;&#193;&#194;&#195;&#196;&#197;&#198;&#199;&#200;&#201;&#202;&#203;&#204;&#205;&#206;&#207;&#208;&#209;&#210;&#211;&#212;&#213;&#214;&#215;&#216;&#217;&#218;&#219;&#220;&#221;&#222;&#223;&#224;&#225;&#226;&#227;&#228;&#229;&#230;&#231;&#232;&#233;&#234;&#235;&#236;&#237;&#238;&#239;&#240;&#241;&#242;&#243;&#244;&#245;&#246;&#247;&#248;&#249;&#250;&#251;&#252;&#253;&#254;&#255;</xsl:variable>

<xsl:template name="decode">
<xsl:param name="str"/>

<xsl:choose>
<xsl:when test="contains($str,'%')">
<xsl:value-of select="substring-before($str,'%')"/>
<xsl:variable name="hexpair" select="translate(substring(substring-after($str,'%'),1,2),'abcdef','ABCDEF')"/>
<xsl:variable name="decimal" select="(string-length(substring-before($hex,substring($hexpair,1,1))))*16 + string-length(substring-before($hex,substring($hexpair,2,1)))"/>
<xsl:choose>
<xsl:when test="$decimal &lt; 127 and $decimal &gt; 31">
<xsl:value-of select="substring($ascii,$decimal - 31,1)"/>
</xsl:when>
<xsl:when test="$decimal &gt; 159">
<xsl:value-of select="substring($latin1,$decimal - 159,1)"/>
</xsl:when>
<xsl:otherwise>?</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="decode">
<xsl:with-param name="str" select="substring(substring-after($str,'%'),3)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

¿Como podría hacer para que respetase los saltos de línea en el PDF?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Generación de PDF con saltos de línea

Publicado por Alejandro (227 intervenciones) el 07/07/2023 18:22:42
Para asegurar que se respeten los saltos de línea en el PDF generado a partir de la transformación XSLT, necesitarás aplicar un enfoque específico para el formato PDF.

XSLT por sí solo no tiene la capacidad de controlar los saltos de línea en un documento PDF. Sin embargo, puedes utilizar una biblioteca o herramienta que admita la generación de PDFs desde XSLT, como Apache FOP (Formatting Objects Processor).

Aquí hay un ejemplo básico de cómo puedes utilizar Apache FOP para generar un PDF a partir de tu transformación XSLT, teniendo en cuenta los saltos de línea:

1. Asegúrate de tener instalado Apache FOP y configurado en tu entorno.
2. Crea un nuevo archivo XSL-FO que actuará como intermediario entre tu transformación XSLT y Apache FOP. Por ejemplo, llamémoslo "output.fo".

El contenido de "output.fo" puede ser similar a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="A4" page-width="8.5in" page-height="11in">
      <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="A4">
    <fo:flow flow-name="xsl-region-body">
      <xsl:apply-templates select="/Area_Preliminar"/>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

3. Modifica tu hoja de estilo XSLT existente para generar XSL-FO en lugar de HTML. Puedes hacer esto simplemente cambiando la declaración `xsl:output` en tu hoja de estilo a:

1
<xsl:output method="xml" indent="yes"/>

4. Utiliza Apache FOP para transformar tu archivo XSL-FO en un archivo PDF. Puedes hacer esto desde la línea de comandos utilizando el comando `fop`:

1
fop -fo output.fo -pdf output.pdf

Esto generará un archivo PDF llamado "output.pdf" a partir del archivo XSL-FO.

Al utilizar Apache FOP, tendrás un mayor control sobre el formato PDF resultante, incluyendo la capacidad de mantener los saltos de línea. Ten en cuenta que puede ser necesario ajustar el contenido y el formato en tu hoja de estilo XSLT y en el archivo XSL-FO para obtener el resultado deseado en el PDF.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar