Questo è il 2 ° giorno che passo a investigare senza risultati. Almeno ora, sono in grado di chiedere una cosa molto specifica.Generazione di PDF da HTML con caratteri non latini che utilizzano ITextRenderer non funziona
Sto cercando di scrivere un codice HTML valido che contiene alcuni caratteri non latini in un file PDF utilizzando iText e più specificamente con ITextRenderer da Flying Saucer.
Il mio esempio/breve codice inizia con l'inizializzazione di una doc string variabile con questo valore:
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>";
Ecco il codice che uso per scopi di debug. Risparmio questa stringa al file HTML e poi l'apro attraverso un browser solo per controllare due volte che il contenuto HTML è valido e posso ancora leggere i caratteri greci:
//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();
passo successivo è quello di provare a scrivere questo valore nel File PDF. Questo è il mio codice:
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);
L'esito finale del mio codice è:
Nel file HTML ottengo: Alcuni caratteri greci: Καλημέρα Alcuni caratteri greci (expected)
Nel file PDF ottengo: Alcuni caratteri greci: alcuni caratteri greci (imprevisti - caratteri greci sono ignorati !!)
Dipendenze:
versione Java "1.6.0_27"
itext-2.0.8.jar
de.huxhorn.lilith.3rdparty. flyingsaucer.core-renderer-8Pre2.jar
Ho anche sperimentato molto re font, ma suppongo che il mio problema non abbia nulla a che fare con l'utilizzo di caratteri errati. Qualsiasi aiuto è più che benvenuto.
Thanx
Ho appena provato che senza buone notizie :(Sto ottenendo lo stesso risultato @Ravinder Penso che ti sia perso un nel tuo esempio: P – alexandros
@alexandros: controlla l'aggiornamento della mia risposta. –
Ho aggiunto nel mio test questo: System.out.println ("file.encoding =" + System.getProperty ("file.encoding")); che stampa come risultato questo: file.encoding = UTF-8. Questo dovrebbe essere sufficiente per garantire che sto avendo la giusta codifica? – alexandros