FlyingSaucer LTR / RTL / BiDi с арабским текстом - PullRequest
7 голосов
/ 09 июня 2011

Я использую летающую тарелку 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 ]

2 голосов
/ 15 июня 2011

Наконец-то я могу печатать арабский текст в RTL / LTR с помощью летающей тарелки.В моем коде я даю ширину и выравнивание для каждого блока арабского текста, но в целом он работает нормально.Код большой, чтобы напечатать его здесь, поэтому спросите, если кто-то заинтересован

1 голос
/ 13 декабря 2017

С той же проблемой, с которой я столкнулся, единственное решение, которое я могу выяснить, это использование файлов импорта / добавления arial.ttf и файлов 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;
}
...