2016-12-06 4 views
0

Я пытаюсь объединить 2 PDF-файла с помощью утилиты itext 4.2.0. Для некоторых случаях он бросает InvalidPDFException в поле ниже кодiText PDF Concatination failed - InvalidPDFException

reader = new PdfReader("c:\tmp\test.pdf"); 

com.itextpdf.text.exceptions.InvalidPdfException: Не найдено для trailer.not.found в com.itextpdf.text.pdf.PdfReader .rebuildXref (Неизвестный источник) на com.itextpdf.text.pdf.PdfReader.readPdf (Неизвестный источник) на com.itextpdf.text.pdf.PdfReader. (Неизвестный источник) на com.itextpdf.text.pdf.PdfReader . (Неизвестный источник)

Этот PDF i S действует одно я открыл его в редакторе текста и обеспечил он имеет% PDF, а также% EOF в соответствии с рекомендациями here

UPDATE

версия IText является 2.1.7. Банку неправильно назвали 4.2.0.

Указанный путь («c: \ tmp \ test.pdf») является образцом одного. Мы отправляем как «c: /tmp/test.pdf»

+2

Замените '' c: \ tmp \ test.pdf '' на '' c: \\ tmp \\ test.pdf "' - или у вас действительно есть имена файлов с горизонтальными символами табуляции в них? – mkl

+0

iText 4.2.0 не был выпущен iText Software. Я настоятельно рекомендую вам использовать 2.1.7 или 5.5.10. –

+1

Пожалуйста, поделитесь рассматриваемым PDF-файлом для анализа.Без этого мы можем только предположить, что это дефект. – mkl

ответ

1
  1. Нет iText 4.2.0. Пожалуйста, выбросьте его. Официальные разработчики iText - это версия изгоев, которая не выпущена. Это «горло», означающее, что Бог действительно знает, что внутри. Решения: Выбросьте IText 4.2.0 и заменить его на более позднюю, официальную версию:https://github.com/itext/itextpdf/releases
  2. Вы получаете ошибку о том, что фактическое сообщении об ошибке для ключа trailer.not.found не найдено. Это означает, что вы используете банку iText, которая не построена правильно. Файлы .lng отсутствуют в банке, поэтому фактическое сообщение об ошибке не может быть найдено. Решение: Отбросьте iText 4.2.0 и замените его на более позднюю официальную версию:https://github.com/itext/itextpdf/releases
  3. Ключ trailer.not.found соответствует сообщению «Трейлер не найден». Это означает, что вы пытаетесь создать PdfReader с файлом, который может выглядеть как PDF, но это не так. Например: начинается с %PDF-, но трейлера нет. Это означает, что iText ищет файл (который должен завершиться в %%EOF, проверьте, действительно ли это так) и можно найти ключевое слово startxref. Другими словами: трейлер отсутствует. Решение: проверьте, действительно ли PDF. Обратите внимание, что старые версии iText не смогли прочитать PDF-файлы, в которых используется функция, введенная после версии PDF 1.5. Возможно, ваша «неофициальная» версия iText такова, что старый ...
  4. И наконец: \ - это символ побега. Это неправильно: "c:\tmp\test.pdf" потому что, если читается как «C: [Закладка] тр [Закладка] est.pdf», где [Вкладка] это символ табуляции \t. Вы должны использовать либо "c:/tmp/test.pdf", либо "c:\\tmp\\test.pdf".
+0

Спасибо. Версия iText - это 2.1.7, а не 4.2.0, как я упоминал в обновлении. Все мои PDF-файлы уже находятся в базе данных. Я просто загрузил этот PDF-файл и попытался вставить новый PDF (эта новая страница PDF создается iText) в существующую. Я могу открыть загруженный PDF-файл в читателе, и если я открою в нем текстовый редактор, я могу видеть% PDF, %% EOF, startxref, как вы рекомендовали. но когда я пытаюсь создать PdfStamper с этим загруженным pdf, то я столкнулся с исключением. Тот же код работает для некоторых pdf-файлов (один и тот же вариант использования) –

+0

Вы знаете, что 2.1.7 следует использовать в коммерческих средах, не так ли? См. [Может ли iText 2.1.7/iTextSharp 4.1.6 или ранее использоваться в коммерческих целях?] (Http://developers.itextpdf.com/question/versions-older-than-5). В разделе 2.1.7 есть некоторые нерешенные юридические вопросы которые были зафиксированы только в iText 5. Кроме того, iText 2.1.7 датируется 2009 годом. Многие вещи улучшились с этой даты. –

+0

@BrunoLowagie: не должно быть: _hould * not * использоваться в коммерческих средах_? –