#java #pdf #arabic #bidi #xhtmlrenderer
#java #PDF #Арабский #bidi #xhtmlrenderer
Вопрос:
Я использую flying saucer 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 xhtmlrenderer / ITextReplacedElement xhtmlrenderer, но не смог найти хороших примеров для позиционирования элементов. Кто-нибудь пытался это сделать? Или, может быть, есть более простое (или, по крайней мере, работающее) решение?
Комментарии:
1. если кому-то интересна тема, вот ссылка на группу Google по этому вопросу: groups.google.com/group/flying-saucer-users/browse_thread /…
Ответ №1:
Наконец-то я могу печатать арабский текст в rtl / ltr с помощью flying saucer. В моем коде я указываю ширину и выравнивание для каждого блока арабского текста, но в целом это работает нормально. (Отредактировано) Код слишком большой, чтобы распечатать его здесь, пожалуйста, найдите код в группах Google, ссылки приведены в комментариях.
Комментарии:
1. привет, аскар. не могли бы вы, пожалуйста, поделиться своим кодом? заранее спасибо
2. @Hamid Ответ со ссылкой был удален из-за политики отсутствия ссылок. Они здесь: groups.google.com/forum /#!сообщение/flying-saucer-users/n0CfuYfpQ6I / …
3. @sala пожалуйста, проверьте ссылку, которую я дал в предыдущем комментарии, она все еще работает.
4. В этом ответе с 2011 года я спрашиваю, проводила ли Библиотека некоторый рефакторинг для работы с арабским языком без добавления предоставленного решения
Ответ №2:
Та же проблема, с которой я столкнулся, единственное решение, которое я могу найти, — это импорт шрифтов 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;
}
Комментарии:
1. @ZainElabidine вы можете справиться с этим с помощью RTL direction, но даже при этом были проблемы с пространством, поэтому я переключился на Jasper, который работает как шарм.