Уже второй день я провожу исследования безрезультатно. По крайней мере, теперь я могу спросить что-то очень конкретное.
Я пытаюсь написать правильный HTML-код, содержащий некоторые нелатинские символы в файле PDF, используя iTextи, более конкретно, используя ITextRendererиз Flying Saucer. ].
Мой короткий пример/код начинается с инициализации строковой переменной doc со следующим значением:
String doc = ""
+ "Some greek characters: Καλημέρα Some greek characters"
+ "";
Вот код, который я использую для целей отладки. Я сохраняю эту строку в HTML-файл, а затем открываю ее в браузере, чтобы еще раз убедиться, что HTML-содержимое корректно и я все еще могу читать греческие символы:
//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();
Следующий шаг — попытаться записать это значение в PDF-файл. Вот мой код:
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);
Конечный результат моего кода:
В файле HTMLЯ получаю: Некоторые греческие символы: Καλημέρα Некоторые греческие символы(ожидается)
В PDF файл Я получаю: Некоторые греческие символы: Некоторые греческие символы ( неожиданное - греческие символы игнорируются!!)
Зависимости:
версия java "1.6.0_27 "
itext-2.0.8.jar
de.huxhorn.lilith.3rdparty.flyingsaucer.core-renderer-8Pre2.jar
Я также экспериментировал с гораздо большим количеством шрифтов, но я думаю, что моя проблема не имеет ничего общего с использованием неправильных шрифтов.Любая помощь более чем приветствуется.
Thanx