FlyingSaucer LTR/RTL/BiDi с арабским текстом
Я использую летающую тарелку xhtmlrenderer для создания PDF документов. До сих пор все работало нормально - теперь мы должны генерировать арабский текст внутри pdf. Xhtmlrenderer отображает арабский текст в обратном порядке.
Я где-то читал в Интернете (может быть, на их собственном сайте), что xhtmlrenderer не поддерживает bidi / rtl. Но сам IText содержит примеры для работы с арабским и ивритом через ColumnText и PdfPTable (источники можно найти здесь: http://sourceforge.net/projects/itextpdf/files/Examples/examples-155/examples-155.zip/download - arabic_hebrew.java), и они работают нормально.
Я пытался использовать itext api в ReplacedElementFactory/ITextReplacedElement в xhtmlrenderer, но не смог найти хороших примеров для позиционирования элементов. Кто-нибудь пытался это сделать? Или, может быть, есть более простое (или хотя бы рабочее) решение?
2 ответа
Наконец я могу напечатать арабский текст в RTL / LTR с помощью летающей тарелки. В моем коде я даю ширину и выравнивание для каждого блока арабского текста, но в целом он работает нормально. Код большой, чтобы напечатать его здесь, поэтому спросите, если кому-то интересно
Та же проблема, с которой я столкнулся, единственное решение, которое я могу выяснить, это использование файлов импорта / добавления шрифтов arial arial.ttf и arialbold.ttf в папке ресурсов вашего проекта.
OutputStream outputStream = response.getOutputStream();
ITextRenderer renderer = new ITextRenderer();
// renderer.getFontResolver().addFont("/fonts/arialbold.ttf",
// BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("/fonts/arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("/fonts/arialbold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// SharedContext sharedContext = renderer.getSharedContext();
// sharedContext.setPrint(true);
// sharedContext.setInteractive(false);
// sharedContext.setReplacedElementFactory(new B64ImgReplacedElementFactory());
// sharedContext.getTextRenderer().setSmoothingThreshold(0);
renderer.setDocumentFromString(content);
renderer.layout();
renderer.createPDF(outputStream);
renderer.finishPDF();
outputStream.close();
в вашем использовании CSS
html, body {
margin: 0;
padding: 0;
font-family: Arial, Arial Bold;
font-size: 10px;
line-height: 14px;
}