2009-10-16 46 views
6

La solicitud de nuestro cliente es tener tablas en PDF con una esquina redondeada. Solo tengo el procesador Apache FOP a mi disposición y no admite el atributo de esquina redondeada. Tampoco admite flotadores, por lo que no se pueden hacer imágenes flotantes redondeadas hacia la izquierda y hacia la derecha.Esquinas redondeadas en XSL-FO

¿Tiene alguna sugerencia sobre cómo hacer esto?

Respuesta

5

Puede crear la tabla como un objeto de gráficos vectoriales escalables (SVG) e incluir eso como una imagen externa en su documento XSL-FO. SVG admite esquinas redondeadas, y FOP admite SVG.

Creo que también puede simplemente crear un SVG de rectángulo redondeado y usarlo como fondo para su contenido, y poner la tabla en frente de él. Creo que lo hice una vez, pero parece que no puedo encontrar el código ...

0

Mientras que el ancho sea fijo y no espere que las cosas "floten" dinámicamente en anchura como css, lo he hecho (por utilizando una técnica vertical de 'Puertas correderas', si recuerda css de la escuela anterior):

Obtenga una imagen de fondo de esquina redondeada y espere mientras esté en la página (tenga en cuenta si espera que las cosas vayan hacia varias páginas, entonces esto no funcionará tan bien jeje). Lo uso en encabezados/pies de página y cosas que comienzan una página nueva (en la región del cuerpo) que sé que no irá más de 1 página.

Entonces decido si necesito una altura fija ... si es así sólo puede utilizar una imagen de fondo sin fancyness ...

si la altura variará, a continuación, sólo tiene que utilizar la parte superior de la imagen para una parte y la parte inferior de la imagen para otra parte. algo como esto:

<fo:block-container> 
    <fo:block-container background-image="url(images/rounded_corner_image.png)" 
    background-repeat="no-repeat" 
    background-position-horizontal="15px" 
    background-position-vertical="top"    
    background-color="white" 
    > 
    <!-- 
    So it used the top of the image for as long as the block-container exists heightwise. 
    I may have had some whitespace in my image and need to move image into place so think I used background-position-horizontal since i had 15px of whitespace i wanted to cut off 
    Also you may set a height above if definatley know you don't need it to 'auto-expand', just make sure you have content that can't overflow if setting height (like a table with Name: Address: fields) 
    --> 
    <fo:block margin="70px 70px 0px 70px"> 
     Need to add some margins before starting content since dont want to text to touch the top and sides of of the rounded corner/borders plus add whitespace for content. 
    </fo:block> 
    </fo:block-container> 

    <fo:block-container background-image="url(images/rounded_corner_image.png)" 
    background-repeat="no-repeat" 
    background-position-horizontal="15px" 
    background-position-vertical="bottom" 
    padding="0px 0px 20px 0px" 
    background-color="white" 
    > 
    <fo:block margin="0px 70px 70px 70px"> 
     Need to add some margins before starting content since dont want to text to touch bottom and sides of of the rounded corner/borders. 
    </fo:block> 
    </fo:block-container> 

</fo:block-container> 

Hay varias maneras de hacerlo, creo. como si tuviera contenido en la parte inferior así que solo uso el fondo sabiendo que definitivamente voy a tener al menos 70px de contenido para mostrar el degradado inferior de mis esquinas redondeadas ... puedes decidir poner todo tu contenido en el primer bloque-contenedor y dando al segundo bloque-contenedor una altura fija de 70px para mostrar solo la imagen de fondo inferior (creo que esto es posible aunque no haya contenido en ese contenedor inferior [olvide las reglas xsl-fo]). Usar el tronco FOP y funciona bien.

EDITAR: debería tener en cuenta que uso el último FOP 1.0 (también intentado con la versión anterior), y funciona bien. También utilicé un gráfico tan alto como el contenido, ya que tengo bordes ... Si solo requiere gráficos superiores e inferiores (y el color de fondo para llenar el cuerpo, entonces no es necesario que tenga el alto 'as-tall-as' -posible 'imagen).