Разница между версиями iTextSharp 4.1.6 и 5.x
Мы разрабатываем анализатор Pdf для использования вместе с нашей системой. Требование таково, что мы храним всю информацию в любых документах PDF и должны иметь возможность воспроизводить документ как таковой (с минимальными изменениями по сравнению с оригинальным документом).
Мы немного погуглили и нашли iTextSharp лучшим помощником для наших целей. Мы разрабатываем наш проект с использованием.net.
Возможно, вы уже догадались, как я уже упоминал в моем заголовке, требующем сравнения для конкретных версий iTextSharp (4.1.6 против 5.x). Мы знаем, что 4.1.6 является последней версией iTextSharp с лицензией LGPL/MPL. 5.x версии AGPL.
Мы хотели бы провести хорошее сравнение между версиями, прежде чем выбирать версию LGPL, или мы покупаем лицензию на AGPL (мы не хотим публиковать наш код).
Я просмотрел изменения ревизий в iTextSharp, но мне хотелось бы узнать, существует ли какой-либо контент, чтобы сделать хорошее сравнение между версиями.
Заранее спасибо!
1 ответ
Я технический директор iText Software, поэтому, как и Михаэль, который уже ответил в разделе комментариев, я в то же время самый авторитетный источник, а также предвзятый источник.
На веб-сайте iText есть очень простая сравнительная таблица: http://itextpdf.com/functionalitycomparison
Эта диаграмма не охватывает извлечение текста, поэтому позвольте мне перечислить соответствующие улучшения, начиная с iText 5.
Вы, вероятно, также нашли эту страницу: http://itextpdf.com/salesfaq
Если вас интересуют исправления ошибок и улучшения производительности при разборе текста, это более исчерпывающий список:
- 5.0.0: Извлечение текста: капитальный ремонт для выполнения вычислений в пространстве пользователя. Это позволяет синтаксическому анализатору правильно определять разрывы строк, даже если текст или страница повернуты.
- 5.0.1: Рефакторирован обратный вызов, поэтому сигнатура метода не нуждается в изменении по мере развития API обратного вызова рендеринга.
- 5.0.1: Рефакторинг для облегчения взаимодействия внешних пользователей с процессором потока контента. Также переработан слушатель рендеринга, чтобы прослушивание событий текста и изображения происходило в одном и том же интерфейсе (значительно снижает сложность, не связанную с добавленной стоимостью)
- 5.0.1: Новые функции фильтрации для средств визуализации текста.
- 5.0.1: дополнительная утилита для предварительного просмотра содержимого PDF.
- 5.0.1: Добавлен гораздо более продвинутый слушатель рендера текста, который может восстанавливать содержимое страницы на основе физического расположения текста на странице.
- 5.0.1: Добавлена поддержка обработки формы XObject (теперь можно анализировать текст, добавленный через PdfTemplate)
- 5.0.1: Добавлена элементарная поддержка обратных вызовов XObject Image
- 5.0.1: Исправлена ошибка - извлечение текста некорректно для определенных ориентаций страницы
- 5.0.1: Исправлена ошибка - матрицы объединялись в неправильном порядке.
- 5.0.1: PdfTextExtractor: изменен слушатель рендеринга по умолчанию (новая стратегия с учетом местоположения)
- 5.0.1: геттеры для GraphicsState
- 5.0.2: Основной рефакторинг интерфейса для функциональности извлечения текста: например, введение класса PdfReaderContentParser
- 5.0.2: CMapAwareDocumentFont: настройки для повышения надежности обработки квазидействующих файлов PDF
- 5.0.2: PdfContentReaderTool: обработка нулевого указателя, плюс несколько удачно размещенных вызовов сброса
- 5.0.2: PdfContentReaderTool: Показать подробности о записях ресурса
- 5.0.2: PdfContentStreamProcessor: настройка, чтобы внедренные изображения не вызывали проблем с анализом и улучшали обнаружение EI
- 5.0.2: LocationTextExtractionStrategy: исправлен антипараллельный алгоритм, а также учтены отрицательные межсимвольные смещения. Перейдите к стратегии извлечения текста, которая сначала строит текстовую модель, а затем вычисляет требования к конкатенации.
- 5.0.2: корректировка реализации сегмента строки; оптимизация изменений, внесенных Бруно в извлечение текста; например: введение класса MarkedContentInfo.
- 5.0.2: Основной рефакторинг интерфейса для функциональности извлечения текста: например, введение класса PdfReaderContentParser
- 5.0.3: добавлен метод для получения области изображения в пользовательских единицах
- 5.0.3: лучший анализ встроенных изображений
- 5.0.3: Добавление дополнительной проверки начала / конца последовательности при разборе потока ToUnicode.
- 5.0.4: Потоки контента в массивах должны быть проанализированы, как если бы они были разделены пробелами
- 5.0.4: выставить CTM
- 5.0.4: Рефакторинг, чтобы включить встроенную обработку изображений в свой собственный класс. Добавлен анализ данных изображения, если не применен фильтр (в некоторых PDF-файлах нет пробела между концом данных изображения и оператором EI). В конечном счете, будет лучше фактически проанализировать данные изображения, но для этого потребуется довольно большой рефакторинг декодеров iText (для работы с потоками вместо байта [] известной длины).
- 5.0.4: Обрабатывать многоступенчатые фильтры; Исправлена ошибка, при которой пробел выводился как первый байт потока встроенного изображения.
- 5.0.4: Применение потоковых фильтров к встроенным изображениям.
- 5.0.4: PdfReader: открыть фильтр-декодер для произвольных байтовых массивов (вместо только потоков)
- 5.0.6: CMapParser: исправлено чтение поврежденных карт ToUnicode.
- 5.0.6: обрабатывать слегка искаженные встроенные изображения
- 5.0.6: CMapAwareDocumentFont: некоторые PDF-файлы имеют карту различий, превышающую 256 символов.
- 5.0.6: производительность: кэшировать шрифты, используемые при извлечении текста
- 5.1.2: PRTokeniser: Сделан алгоритм, позволяющий найти startxref более эффективным в использовании памяти.
- 5.1.2: RandomAccessFileOrArray: улучшена обработка больших файлов, которые невозможно отобразить
- 5.1.2: CMapAwareDocumentFont: исправление NPE, если отображение не инициализируется (я бы предпочел использовать ненужные символы, чем выбрасывать неожиданное исключение в будущем)
- 5.1.3: рефакторинг того, как фильтры применяются к потокам, настройте анализатор так, чтобы он мог обрабатывать многоступенчатые фильтры
- 5.1.3: изображения: разрешить правильное декодирование битовых масок изображений 1 бит на канал
- 5.1.3: изображения: добавить потоки jbig2 для прохождения
- 5.1.3: images: обрабатывать нулевые и косвенные ссылки в параметрах декодирования, генерировать исключение, если не удается декодировать изображение
- 5.2.0: улучшенные сообщения об ошибках и лучшая обработка файлов нулевого размера и попытки чтения за концом файла.
- 5.2.0: снято ограничение, согласно которому при отображении памяти размер файла должен быть менее 2 ГБ.
- 5.2.0. Избегайте исключения NullPointerException в RandomAccessFileOrArray
- 5.2.0: Сделал служебный метод в pdfContentStreamProcessor закрытым и прояснил состояние класса с учетом состояния
- 5.2.0: LocationTextExtractionStrategy: ограничивает проверку длины строки и рефакторинг для облегчения чтения кода.
- 5.2.0: Лучшая обработка словарей цветового пространства в изображениях.
- 5.2.0: улучшена обработка квази-неправильного содержимого встроенного изображения.
- 5.2.0: не декодируйте встроенные потоки изображений, пока они нам не понадобятся.
- 5.2.0: избежать NullPointerException для словаря ресурсов не предусмотрено.
- 5.3.0: LocationTextExtractionStrategy: старый подход сравнения вызывал исключения во время выполнения в Java 7
- 5.3.3: включить параметр увеличения текста
- 5.3.3: раскрыть информацию о глифе за глифом
- 5.3.3: Исправление: преобразование текста в пользовательское пространство применялось несколько раз для объектов sub-textrenderinfo
- 5.3.3: Исправление: правильный расчет базовой линии, чтобы он не включал окончательный интервал между символами
- 5.3.4: Добавлен низкоуровневый хук фильтрации в LocationTextExtractionStrategy.
- 5.3.5: Исправлена ошибка в PRTokeniser: обрабатывать случай, когда число находится в конце потока.
- 5.3.5: Заменен StringBuffer на StringBuilder в PRTokeniser по соображениям производительности.
- 5.4.2: Добавлен метод isChunkAtWordBoundary() в LocationTextExtractionStrategy, чтобы проверить, должен ли быть вставлен пробел между предыдущим фрагментом и текущим.
- 5.4.2: добавлен метод getCharSpaceWidth() в LocationTextExtractionStrategy для получения ширины пробела.
- 5.4.2: добавлен метод getText() в LocationTextExtractionStrategy для получения текста текущего чанка.
- 5.4.2. В метод SimpleTextExtractionStrategy добавлен метод appendTextChunk(() для предоставления процесса добавления, чтобы подклассы могли добавлять текст вне операции синтаксического анализа текста.
- 5.4.5: добавлен класс MultiFilteredRenderListener для анализатора PDF.
- 5.4.5: добавлены классы GlyphRenderListener и GlyphTextRenderListener для обработки каждого глифа, а не для обработки фрагментов текста.
- 5.4.5: Добавлен метод getMcid() в TextRenderInfo.
- 5.4.5: исправлена утечка ресурсов, когда в потоке контента было много встроенных изображений
- 5.5.0: CMapAwareDocumentFont: если ширина пространства шрифта не определена, используйте ширину шрифта по умолчанию.
- 5.5.0: PdfContentReader: избегать исключений при отображении пустого словаря.
Есть некоторые вещи, которые вы не сможете сделать, если не обновитесь. Например, вы не сможете делать вещи, описанные в этих слайдах: http://www.slideshare.net/iTextPDF/itext-summit-2014-talk-unstructured-pdf
Если вы посмотрите на дорожную карту для iText, то увидите, что в будущем мы потратим еще больше времени на извлечение текста: http://www.slideshare.net/iTextPDF/itext-summit-2014-keynote-talk
Честно говоря, использование 5-летней версии - это не просто изобретать колесо, это все равно, что попадать в каждую ловушку, в которую мы попали за последние 5 лет. Я могу заверить вас, что покупка лицензии будет дешевле.