To jest drugi dzień, w którym spędzam śledztwo bez rezultatów. Przynajmniej teraz mogę zadać coś bardzo konkretnego.Generowanie plików PDF z HTML za pomocą znaków spoza alfabetu łacińskiego za pomocą ITextRenderer nie działa
Próbuję napisać poprawny kod HTML, który zawiera pewne znaki spoza alfabetu łacińskiego w pliku PDF za pomocą iText a dokładniej za pomocą ITextRenderer z Flying Saucer.
Mój krótki przykład/code rozpoczyna się od inicjalizacji zmiennych ciąg doc z tej wartości:
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>";
Oto kod, który używam do celów debugowania. Zapisać ten ciąg do pliku HTML, a następnie otworzyć go przez przeglądarkę tylko dokładnie sprawdzić, że zawartość HTML jest ważna i wciąż mogę przeczytać greckich znaków:
//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();
Następnym krokiem jest, aby spróbować napisać tę wartość w Plik PDF. To jest mój kod:
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);
Końcowy wynik mojego kodu jest:
W pliku HTML uzyskać: Niektóre greckie znaki: Καλημέρα Niektóre greckie znaki (oczekiwane)
W pliku PDF Otrzymuję: Niektóre greckie znaki: Niektóre greckie znaki (nieoczekiwane - greckie znaki są ignorowane !!)
zależności:
wersji Java "1.6.0_27"
itext-2.0.8.jar
de.huxhorn.lilith.3rdparty. flyingaucer.core-renderer-8Pre2.jar
Ja także byłem eksperymentowany z dużo mo re czcionki, ale myślę, że mój problem nie ma nic wspólnego z użyciem niewłaściwych czcionek. Każda pomoc jest mile widziane.
Niż
Po prostu wypróbowałem to bez dobrych wieści :(Otrzymuję ten sam wynik @Ravinder Myślę, że brakowało Ci w twoim przykładzie: P – alexandros
@alexandros: sprawdź aktualizację mojej odpowiedzi. –
W moim teście dodałem: System.out.println ("file.encoding =" + System.getProperty ("file.encoding")); która drukuje w wyniku tego: file.encoding = UTF-8. Czy to wystarczy, aby zapewnić właściwe kodowanie? – alexandros