2015-01-25 3 views
2

Мне нужно создать pdf-файл в моем приложении mvc spring. недавно я протестировал iTextPdf library, но я не смог создать документ в формате unicode pdf. на самом деле я не видел нелатинских символов в сгенерированном документе. Я решил использовать Apache PDFBox для своей цели, но я не знаю, поддерживает ли он символы Unicode? Если есть, есть ли хороший учебник для обучения pdfBox? А если нет, какую библиотеку я должен использовать? Спасибо заранее.java - сгенерируйте unicode pdf с Apache PDFBox

+1

И iText, и PDFBox могут использоваться для печати символов за пределами латинских, если они используются правильно. Как ответил @Tilman, простой способ был введен в PDFBox только недавно. IText также позволяет легко. Если вы не только означаете не латинский, но и не-LTR, вы, вероятно, должны сказать. – mkl

+0

Мне нужно использовать как латинские, так и нелатинские (например, персидские) символы в одном документе. На самом деле на моей странице есть как LTR, так и RTL-тексты. – hamed

+0

Боюсь, что к вопросу нужно добавить. Часто люди думают только об особых вариациях некоторых латинских символов или кириллических или дингбатов в этом контексте. Персонажи, требующие специальных лигатур и RTL, не обязательно должны быть у них в голове. – mkl

ответ

2

Текущая версия Apache PDFBox не может иметь дело с Unicode, см. https://pdfbox.apache.org/ideas.html

iTextPdf v 5.x генерирует PDF-файлов с Unicode. Существует Exemple здесь: IText в действии: Глава 11: Выбор правильный шрифт part3.chapter11.UnicodeExample http://itextpdf.com/examples/iia.php?id=199

Чтобы запустить его, вам просто нужно адаптировать значение EncodingExample.FONT и добавить некоторый код для создания выходного файла.

3

версии 1.8. * Не поддерживают генерацию PDF с помощью Unicode, но версии 2.0. *. Это пример EmbeddedFonts.java:

public class EmbeddedFonts 
{ 
    public static void main(String[] args) throws IOException 
    { 
     PDDocument document = new PDDocument(); 
     PDPage page = new PDPage(PDRectangle.A4); 
     document.addPage(page); 

     String dir = "../pdfbox/src/main/resources/org/apache/pdfbox/resources/ttf/"; 
     PDType0Font font = PDType0Font.load(document, new File(dir + "LiberationSans-Regular.ttf")); 

     PDPageContentStream stream = new PDPageContentStream(document, page); 

     stream.beginText(); 
     stream.setFont(font, 12); 
     stream.setLeading(12 * 1.2); 

     stream.newLineAtOffset(50, 600); 
     stream.showText("PDFBox Unicode with Embedded TrueType Font"); 
     stream.newLine(); 

     stream.showText("Supports full Unicode text ?"); 
     stream.newLine(); 

     stream.showText("English русский язык Tiếng Việt"); 

     stream.endText(); 
     stream.close(); 

     document.save("example.pdf"); 
     document.close(); 
    } 
} 

Обратите внимание, что в отличие от IText, поддержка PDFBox для создания PDF очень низкий уровень, то есть мы не поддерживаем пункты или таблицы из коробки. Нет учебника, но есть много примеров. API ориентирует себя на спецификацию PDF.

+1

Все еще есть небольшая ошибка в подмножестве шрифтов в текущем SNAPSHOT: если на той же странице вы сначала используете шрифт без подмножества ('stream.setFont (font, 12, false);'), тогда добавьте некоторый текст, затем используйте тот же шрифт с подмножеством ('stream.setFont (font, 12, true);'), затем добавьте еще какой-нибудь текст, текст, составленный для второй настройки шрифта, может быть неполным. (Но поскольку я видел, что в этом контексте были обнаружены другие сбои, я думаю, что это тоже скоро будет исправлено.);) – mkl

+0

спасибо, я открыл PDFBOX-2632 –

Смежные вопросы