2015-01-16 6 views
0

У меня есть код, который сломался с обновлением 5.5.4. Я внутренне подтвердил, что он работает с предыдущими версиями 3 ...Ошибка iText с добавлением элементов с 5.5.4

добавления элемента вызывает исключения нулевого указателя

reader = new PdfReader('Users/Me/Documents/a.pdf') 
stamper = new PdfStamper(reader, new FileOutputStream('some_file')) 
cb = stamper.getOverContent(1) 
ct = new ColumnText(cb) 
ct.setSimpleColumn(120f, 48f, 200f, 600f) 
pz = new Paragraph (new Phrase (20, 'Hello World!', f)) 
ct.addElement(pz) 
ct.go() 
stamper.close() 
reader.close() 

джон

большую новую книгу Бруно кстати ...

UPDATE Я действительно пропустил немного кода раньше, и я пытался изолировать проблему в более длинном фрагменте кода. . Эта версия показывает эту проблему для меня:

bf = BaseFont.createFont(BaseFont.HELVETICA_BOLD, 'Cp1252', BaseFont.EMBEDDED) 
f = new Font(bf, 13) 
reader = new PdfReader(src') 
stamper = new PdfStamper(reader, new FileOutputStream(dest)) 
cb = stamper.getOverContent(1) 
ct = new ColumnText(cb) 
ct.setSimpleColumn(120f, 48f, 200f, 600f) 
pz = new Paragraph ('Hello World!') 
ct.addElement(pz) 
ct.go() 
stamper.close() 
reader.close() 

ct.addText (порций) работает, но не addElement() в 5.5.4, не в 5.5.1 - 5.5.3

ответ

0

ваш пример кода является неполным. Например: он пропускает PDF-файл, к которому вы пытаетесь добавить дополнительные слова (я взял простой "Hello World" pdf), и он пропускает некоторые определения, такие как объявление переменной f (я взял шрифт по умолчанию, который является Helvetica, 12pt) ,

Когда я заполнить пробелы вы оставили в вашем вопросе, я в конечном итоге с the following code:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    PdfContentByte cb = stamper.getOverContent(1); 
    ColumnText ct = new ColumnText(cb); 
    ct.setSimpleColumn(120f, 48f, 200f, 600f); 
    Font f = new Font(); 
    Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f)); 
    ct.addElement(pz); 
    ct.go(); 
    stamper.close(); 
    reader.close(); 
} 

Этот код приводит к PDF colum_text_phrase.pdf, документ, который теперь показывает слова «Hello World!» дважды, один раз, потому что эти слова уже присутствовали в оригинальном документе, и один раз, потому что мы добавили эти слова, используя адаптированный код из вашего вопроса.

Другими словами: Я не могу воспроизвести проблему, о которой вы сообщаете, поэтому ваш вопрос является неопровержимым.

Обратите внимание, что я не понимаю эту линию:

Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f)); 

Почему бы вам создать Phrase и затем обернуть его внутри Paragraph? Почему бы не использовать Phrase или Paragraph? Например:

Paragraph pz = new Paragraph(20, "Hello World!", f); 

Edit:

На основании вашего редактирования, я приспособил ColumnTextPhrase пример. Я до сих пор не в состоянии воспроизвести проблему, а не с помощью:

pz = new Paragraph ('Hello World!') 

(который является то, что вы написали), ни с помощью:

pz = new Paragraph ('Hello World!', f) 

(который является то, что вы, вероятно, имел в виду, чтобы написать).

EDIT:

Использование файла совместно в свой комментарий, я был в состоянии воспроизвести проблему. Я также понимаю, почему возникает проблема: у вас есть файл, который является Tagged PDF. Теперь вы добавляете контент, который не помечен.Старые версии iText позволяют делать такую ​​невнимательную операцию, последняя версия iText, по-видимому, препятствует вам делать что-то, что идет против «Хороший вкус». Я передам это в развитие, чтобы выяснить, было ли это намеренно или нет.

+0

У вас работает код с примером и 5.5.4. Кажется, на самом деле это связано с читателем. Как отправить файл примера? –

+0

«PdfReader» или Adobe Reader или другой просмотрщик PDF? Невозможно загрузить файлы (кроме изображений) в StackOverflow. Обычно люди хранят файлы на Dropbox, Google Диске, ... и обмениваются ссылкой. –

+0

PdfReader .. hello world.pdf не вызывает ошибки, но этот файл делает. Сделано с InDesign и сплющено. [link] (https://www.dropbox.com/s/txe9pn3h186y977/4back.pdf?dl=0) –

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