pdfbox 2.0.7 - проблема с китайскими иероглифами
Мы используем pdfbox в SAP PO (7.50) уже несколько месяцев, и он работает нормально большую часть времени. Мы получили xml файлы счетов и создали собственный PDF из этой xml структуры. Но теперь мы получаем все больше и больше данных, включая китайские иероглифы. И процесс завершился ошибкой с исключением:
Проблема создания PDF: U + 548 C ('.notdef') недоступна в этом шрифте Кодировка Helvetica-Bold: WinAnsiEncoding
Мы пытались изменить наш код в некоторых частях так, чтобы для китайских символов мы использовали шрифт 'MingLiU', который не включен в TrueTypeCollection mingliu.tt c.
Мы получили подсказку от Tilman Hausherr по следующей ссылке: PDFBox не поддерживает несколько языков
Вот два скриншота из созданного PDF:
(1)
На первом снимке экрана показан файл PDF с информацией об ожидаемом адресе поставщика и условиях оплаты (отмечены красным). Он был создан и сохранен с помощью do c .save (имя файла) в конце.
(2)
The Второй скриншот показывает PDF, который был создан почти так же. Разница в том, что мы не сохранили 2-й файл в файловой системе , потому что он нам нужен в кодировке base64 в контейнере (тип конверта xml).
Здесь мы были частью вызовите класс (в классе 1), создав PDF-файл (в классе 2), а затем обработайте возвращаемое значение (getBytes и закодируйте с помощью base64).
в классе 1:
// Call createPDFFromMasterXML (returned as String sPdf)
sPdf = pdfFromMaster.createPDFFromMasterXML(oSFDocument);
In класс 2 (создание PDF со значениями от xml):
...
doc = new PDDocument();
page = new PDPage(PDRectangle.A4);
...
// Add Vendor
addVendorInfo(doc, page);
...
// Add other parts
...
doc.addPage(page);
// Add Header
addReportHeader(doc);
// Add Footer
addReportFooter(doc, FOOTER_LINE1, FOOTER_LINE2);
// Save ByteArrayOutputStream
doc.save(baos);
// write to byte[]
ba = baos.toByteArray();
// Close Document
doc.close();
// flush and close baos
baos.flush();
baos.close();
// return Document
return new String(ba);
Вернуться в класс 1:
...
// Create binary PDF
bPdf = sPdf.getBytes();
// Encode Base64 and get MD5 Hash
sPdfBase64Enc = DatatypeConverter.printBase64Binary(bPdf);
...
Есть идеи ??