2012-07-26 50 views
6

Tengo un software que crea una descripción XSL-FO de un archivo de texto y lo convierte en un documento PDF. Cada línea en el archivo de texto se convierte a fo:block en FO, lo que suena mal, pero no puedo cambiar eso ahora. Mi documento contiene de 1 a 3 páginas de A4.¿Cómo puedo crear un diseño de dos columnas con XSL-FO y FOP 1.0?

Lo que ahora tengo que hacer es agregar un gráfico que tenga unos 8 cm de ancho debajo del texto existente. Debería estar alineado a la izquierda. Junto a él quiero colocar un bloque de texto con una descripción (larga).

Layout example

He mirado en un par de documentaciones para FO y se acercó con esto:

<fo:block intrusion-displace="block" margin-top="20mm"> 
<fo:float float="right"> 
    <fo:block margin-left="20mm"> 
    Bacon ipsum dolor sit amet laborum proident... 
    </fo:block> 
</fo:float> 
    <fo:external-graphic src="image.png"/> 
</fo:block> 

Esto parece ser lo que quería (después de algunos ajustes, por supuesto), pero desafortunadamente FOP does not supportfo:float todavía.

También parece haber una manera de crear varias columnas (sin una tabla), pero no he podido averiguar cómo funciona. Uno parece necesitar una nueva página para eso, pero necesito usar la página actual si hay espacio disponible (que no me tiene que importar, supongo).

Así que mi pregunta: ¿Hay alguna otra manera de construir esto sin usar fo:float?

+4

+1 para tocino ipsum. :-) –

+1

Dos columnas no ayudarían. Si el texto es más grande que la imagen, el equilibrador de columna comenzará el texto * debajo de * la imagen y continuará en la siguiente columna. Si el texto es ciertamente más pequeño, la tabla parece estar bien. – bytebuster

Respuesta

4

Puede intentar utilizar la imagen como imagen de fondo y dejar un margen izquierdo que sea tan ancho como la imagen.

<fo:block intrusion-displace="block" margin-top="20mm"> 
    <fo:block padding-left="20mm" 
     background-image="image.png" 
     background-repeat="no-repeat"> 
    Bacon ipsum dolor sit amet laborum proident... 
    </fo:block> 
</fo:block> 

Si la imagen necesita más tratamiento que sólo es posible con <fo:external-graphic>, se puede utilizar la técnica de relleno y un adicional, con posición absoluta del bloque contenedor:

<fo:block intrusion-displace="block" margin-top="20mm"> 
    <fo:block padding-left="20mm"> 
    Bacon ipsum dolor sit amet laborum proident... 
    </fo:block> 
    <fo:block-container absolute-position="absolute"> 
     <fo:block> 
      <fo:external-graphic src="image.png"/> 
     </fo:block> 
    </fo:block-container> 
</fo:block> 

Una tercera opción sería utilizar una mesa.

Cuestiones relacionadas