Я пытаюсь сгенерировать PDF-письмо из HTML-текста, содержащего арабские и английские символы, я создаю документ, используя itext, затем добавляю нижний колонтитул и верхний колонтитул к документу, теперь, когда я добавил форматированный текст, используя HTMLWorker, арабский письма не оказаны.
Я пытался использовать пользовательский шрифт (arial, arialuni), но арабские символы отображались с неправильным написанием (слева направо), поэтому я создаю PdfPTable с одним PdfPCell и использую HTMLWorker.parseToList для добавления элементов в ячейку. , но это не работает, тогда я перехожу с HTMLWorker на XMLWorkerHelper, но это тоже не работает, пользователь может вставить длинный HTML-код, содержащий таблицы и абзацы.
вот мой код:
// create the document
final Document document = new Document(new RectangleReadOnly(695, 842), 80, 80, 120, 140);
final PdfWriter pd = PdfWriter.getInstance(document, baos);
final GeneratedPdfService event = new GeneratedPdfService();
pd.setPageEvent(event);
// open the document
document.open();
// add paragraphs
final Paragraph reference = new Paragraph(corrReference, FontFactory.getFont("arial", 12, Font.NORMAL, BaseColor.BLACK));
final Paragraph date = new Paragraph("Date: " + currDate, FontFactory.getFont("arial", 12, Font.NORMAL, BaseColor.BLACK));
document.add(new Paragraph(date));
document.add(new Paragraph(reference));
document.add(new Paragraph("\n\n"));
// define the font
BaseFont bf = BaseFont.createFont(arial.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// create the elements list
List<Element> elements = XMLWorkerHelper.parseToElementList(emailTemplate.replace("<br>", "<br />"), null);
PdfPTable table = new PdfPTable(1);
table.setTotalWidth(535);
PdfPCell cell = new PdfPCell();
cell.setBorder(Rectangle.NO_BORDER);
cell.setRunDirection(PdfWriter.RUN_DIRECTION_LTR);
for (Element e : elements) {
for (Chunk c : e.getChunks()) {
c.setFont(new Font(bf));
}
cell.addElement(e);
}
table.addCell(cell);
table.getRows().size();
table.writeSelectedRows(0, -1, document.right() - 535, document.top() - 50, pd.getDirectContent());
// close the document
document.close();