Error de XML (XSL): conversión de HTML a PDF (Java)

Casi he terminado con un programa para convertir HTML a formato PDF. Sin embargo, mi problema es más específico que este programa. Tengo un archivo XSL que me está dando problemas cuando trato de usarlo con mi programa.

Cuando uso javax.xml.transform.Transformer.transform (fuente, resultado), recibo los siguientes mensajes de advertencia y error debido a mi hoja de estilo XSL:

Advertencias del compilador: Atributo 'longitud de líder' fuera del elemento.
ERROR: 'Error (Ubicación desconocida): fo:list-item no es un elemento secundario válido de fo:block.'

El archivo XSL en cuestión se puede encontrar aquí: http://webcoder.info/downloads/xhtml2fo.html

Es recomendado por este tutorial: https://blogs.oracle.com/chrisf/entry/converting_html_to_pdf_using

¡Cualquier ayuda sobre de qué/dónde provienen estos mensajes de error sería de gran ayuda! No estoy totalmente familiarizado con los archivos XSL.

Muchas gracias.

EDITAR: Supongo que es posible que algo más tenga la culpa. Usando otros archivos XSL, obtengo: "El documento está vacío (algo podría estar mal con su hoja de estilo XSLT)". Sin embargo, estoy siguiendo el tutorial de Oracle prácticamente al pie de la letra. ¿Tiene un error en su código? (En el enlace de arriba.)

EDIT2: Debería haber publicado esto en primer lugar: http://webcoder.info/downloads/xhtml2fo.xsl

Si ese enlace no funciona, pegaré el código exacto aquí. ¡Gracias!

EDIT3: Este es parte del HTML que estoy tratando de usar como ejemplo: http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/classpath.html

preguntado el 22 de mayo de 12 a las 18:05

El error real (no la advertencia) es un error XSL-FO. Los elementos de la lista están tratando de salir en un fo:block. ¿Puedes publicar tu HTML de entrada? -

Todas las páginas HTML, excepto las más simples, tienen problemas con las listas. ¿Qué necesito cambiar en el archivo XSL? Parece muy complicado y está un poco por encima de mi cabeza. -

No puedo decir qué debe cambiarse hasta que pueda reproducir el error. El "classpath.html" en EDIT3 ni siquiera está bien formado, por lo que no puede tratarse como XML, que es lo que XSLT necesita para poder procesar. ¿Tiene otro ejemplo que pueda ser procesado por XSLT? -

Dentro del código, estoy usando HTMLCleaner (2.2) que se supone que toma la entrada HTML y la limpia para que sea un XML bien formado. Ahora, el ejemplo usa v2.1, que puede ser una fuente de error, pero no puedo encontrar un lugar para descargar 2.1. No creo que esté funcionando en este momento. -

No puedo ayudar directamente, pero hay una fuerte recomendación para verificar las tecnologías "CSS+XHTML to PDF" en su trabajo futuro, vea ¿Por qué utilizar XSL-FO en lugar de CSS2 para transformar HTML en un buen PDF?. Estaba estudiando XSL-FO y CSS desde la publicación y llegué a la conclusión de que, en un futuro próximo, el CSS2 para medios paginados es la mejor solución para cualquier proceso de publicación XML. Todas las herramientas XML (desde herramientas de autor y editores hasta herramientas de producción en masa) son compatibles con los estándares XHTML y CSS, y hay muchas herramientas maduras y personas que trabajan con ellas. -

1 Respuestas

En la línea antes <fo:leader ... /> no debería tener esa barra inclinada /.

contestado el 22 de mayo de 12 a las 18:05

Sabes, en realidad no estoy viendo una línea con ninguna barra antes ¿Podría darme un número para esa línea? Gracias por tu ayuda. - NegroVegetal

Busque leader-length y luego la línea anterior. - joop eggen

Eso corrige la advertencia, pero no el error. Gracias por su ayuda hasta ahora. - NegroVegetal

Publica tu XML y podré ayudarte. Solo para entender: ¿La hoja de estilo XSLT fue escrita por otra persona? - Aficionado

Me refiero al XML de entrada para la transformación (que supongo que es XHTML). Técnicamente, el problema es que el list-item debe estar dentro de un list-block. Pero ese error podría deberse a un error en el XSLT o en su XHTML, por lo que necesito el XHTML real para averiguarlo. - Aficionado

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.