Este es el segundo día que paso investigando sin resultados. Al menos ahora, puedo preguntar algo muy específico.La generación de PDF desde HTML con caracteres no latinos usando ITextRenderer no funciona
estoy tratando de escribir un código HTML válido que contiene algunos caracteres no latinos en un archivo PDF utilizando iText y más específicamente usando ITextRenderer de Flying Saucer.
Mi ejemplo corto/código comienza inicializando una variable doc cadena con este valor:
String doc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\">"
+ "<body>Some greek characters: Καλημέρα Some greek characters"
+ "</body></html>";
Este es el código que utilizo para fines de depuración. Puedo guardar esta cadena a un archivo HTML y luego lo abro a través de un navegador sólo para corroborar que el contenido HTML es válido y todavía puedo leer los caracteres griegos:
//write for debugging purposes in an html file
File newTextFile = new File("C:/work/test.html");
FileWriter fw = new FileWriter(newTextFile);
fw.write(doc);
fw.close();
siguiente paso es tratar de escribir este valor en el Archivo PDF. Este es mi código:
ITextRenderer renderer = new ITextRenderer();
//add some fonts - if paths are not right, an exception will be thrown
renderer.getFontResolver().addFont("c:/work/fonts/TIMES.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESBD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESBI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
documentBuilderFactory.setValidating(false);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
builder.setEntityResolver(FSEntityResolver.instance());
org.w3c.dom.Document document = builder.parse(new ByteArrayInputStream(
doc.toString().getBytes("UTF-8")));
renderer.setDocument(document, null);
renderer.layout();
renderer.createPDF(os);
El resultado final de mi código es:
En archivo HTML me sale: Algunos caracteres griegos: Καλημέρα Algunos caracteres griegos (esperado)
En el archivo PDF obtengo: Algunos caracteres griegos: Algunos caracteres griegos (inesperados - caracteres griegos son ignorados !!)
Dependencias:
versión de Java "1.6.0_27"
itext-2.0.8.jar
de.huxhorn.lilith.3rdparty. flyingsaucer.core-renderer-8Pre2.jar
También he sido experimentado con mucho mo re fuentes, pero supongo que mi problema no tiene nada que ver con el uso de fuentes incorrectas. Cualquier ayuda es más que bienvenida.
Gracias
Acabo de intentarlo sin buenas noticias :(Estoy obteniendo el mismo resultado @Ravinder Creo que se perdió un en su ejemplo: P – alexandros
@alexandros: compruebe la actualización de mi respuesta. –
Agregué en mi prueba esto: System.out.println ("file.encoding =" + System.getProperty ("file.encoding")); que imprime como resultado esto: file.encoding = UTF-8. ¿Debería esto ser suficiente para garantizar que estoy teniendo la codificación correcta? – alexandros