Разница между версиями 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, но я хотел бы знать, существует ли какой-либо контент, чтобы провести хорошее сравнение между версиями.

Заранее спасибо!


person Shanky    schedule 20.06.2014    source источник
comment
Отказ от ответственности: я разработчик iText. iTextSharp 4.1.6 исполнилось 5 лет. Помимо очень веских юридических причин, по которым вам следует перейти на версию 5.x в производственной среде или бизнес-среде, есть также множество технических причин, по которым вы должны отдать предпочтение версии 5.x: 5 лет исправлений, исправлений, проверок кода. . Теперь поддерживаются новые стандарты. Улучшения производительности в некоторых областях. Но в основном, новые функции и исправления. Подробного списка различий нет, но никогда не стоит использовать программное обеспечение 5-летней давности. Но решать вам, конечно.   -  person Michaël Demey    schedule 20.06.2014
comment
В дополнение к тому, что сказал @MichaëlDemey, первое, что спросит у вас любой, кто поддерживает iText, это какую версию вы используете, и если вы скажете 4.1.6, все скажут вам сначала обновиться. Если вы спросите, как мне это сделать, вы, вероятно, получите ответы 5.x, которые вам нужно будет обратно портировать на 4.x самостоятельно. Вы можете просмотреть журналы изменений, чтобы увидеть всю проделанную работу. Однако, с технической точки зрения, если вы действительно знаете синтаксис PDF, на самом деле нет ничего, что 4.1.6 не может сделать, если вы готовы немного поработать над ним.   -  person Chris Haas    schedule 20.06.2014
comment
Крис, я добавил более исчерпывающий список, взятый из журнала изменений, и использовал его в ответе. Есть вещи, которые вы не сможете сделать в версии 4.1.6: например: если вы хотите, чтобы текст находился в определенной области, вам потребуется более детальный анализ на основе местоположения символа, а не фрагмента грубого текста. .   -  person Bruno Lowagie    schedule 20.06.2014
comment
Извините, @BrunoLowagie, я должен был быть более откровенным. Я имел в виду, что если вы можете читать и писать необработанные команды PDF, то не должно быть ничего, что нельзя было бы сделать в 4.1.6. Опять же, если вы можете читать и писать необработанные команды PDF, вам, вероятно, тоже не нужна библиотека!   -  person Chris Haas    schedule 20.06.2014


Ответы (1)


Я технический директор iText Software, так что, как Михаэль, который уже ответили в разделе комментариев, я являюсь одновременно и самым авторитетным, и предвзятым источником.

На сайте iText есть очень простая сравнительная таблица .

Эта диаграмма не охватывает извлечение текста, поэтому позвольте мне перечислить соответствующие улучшения по сравнению с iText 5.

Возможно, вы также нашли эту страницу.

Если вас интересуют исправления ошибок и улучшения производительности в отношении синтаксического анализа текста, вот более полный список:

  • 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 (для работы с потоками вместо byte[] известной длины).
  • 5.0.4: Работа с многоступенчатыми фильтрами; Исправлена ​​ошибка, из-за которой в качестве первого байта встроенного потока изображения выводились пробелы.
  • 5.0.4: Применение потоковых фильтров к встроенным изображениям.
  • 5.0.4: PdfReader: предоставьте декодер фильтра для произвольных массивов байтов (вместо только потоков)
  • 5.0.6: CMapParser: исправлено чтение неработающих cmap 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: изображения: обрабатывать нулевые и косвенные ссылки в параметрах декодирования, выдавать исключение, если невозможно декодировать изображение.
  • 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: Добавлен метод appendTextChunk(() в SimpleTextExtractionStrategy для предоставления процесса добавления, чтобы подклассы могли добавлять текст вне операции анализа текста.
  • 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: исключение исключения при отображении пустого словаря.

Есть некоторые вещи, которые вы не сможете сделать, если не обновитесь. Например, вы не сможете делать то, что описано в эти слайды.

Если вы посмотрите на дорожную карту для iText, вы видите, что в будущем мы будем уделять еще больше времени извлечению текста.

Честно говоря: использование 5-летней версии было бы не только изобретением велосипеда, но и попаданием во все ловушки, в которые мы попали за последние 5 лет. Уверяю вас, что покупка лицензии обойдется дешевле.

person Bruno Lowagie    schedule 20.06.2014
comment
@Ловаги. Большое спасибо за появление!. Я хотел бы услышать о правовых нарушениях, которые могут возникнуть, если я использую v 4.1.6. Однако разработчик Бруно Лоуаги предупредил, что версии до 5 могут включать код, не лицензированный по закону LGPL, поэтому пользователи предыдущих версий с закрытым исходным кодом могут быть привлечены к ответственности за нарушение авторских прав. Это были строки, написанные в Вики на странице iText - person Shanky; 24.06.2014
comment
Поскольку вы не являетесь клиентом, у нас нет причин раскрывать эту информацию. Более того: мы договорились с автором, представившим код, что не будем разглашать эту информацию. В любом случае: вы не сделаете никому (ни себе, ни своим клиентам) одолжение, если решите, чтобы они инвестировали в старую версию iText. - person Bruno Lowagie; 24.06.2014
comment
Спасибо. Просто подтверждаю, стоит ли покупать лицензию на 5.x. У меня есть еще один запрос, который выходит за рамки этого вопроса. Есть ли у вас какой-либо учебник или электронная книга, в которой кратко объясняется анализ (извлечение текста, изображений и других материалов) PDF-файла с использованием iTextSharp. у меня есть iText in Action, выпуски 1 и 2. Даже эти книги больше концентрируются на создании pdf, а не на части извлечения. пожалуйста, помогите мне с некоторыми ссылками. - person Shanky; 24.06.2014
comment
В настоящее время я пишу Азбуку PDF. Только когда это будет закончено, я начну писать другие книги (в зависимости от того, что нужно клиентам). У нас есть опыт и материалы по этому вопросу (как показано на этих слайдах: slideshare.net/iTextPDF/itext-summit-2014-talk-unstructured-pdf), но пока эти материалы предоставлены только нашему заказчику GlobalSubmit (компания, которая упоминается на слайдах). Не было бы глупо, если бы мы раздавали все бесплатно? Мы были бы очень плохими инженерами, не так ли? - person Bruno Lowagie; 24.06.2014
comment
@richard Нет необходимости оскорблять разработчиков, которые написали отличное программное обеспечение, которое вы любите и используете. Пока вы распространяете свое программное обеспечение бесплатно, вам не нужно покупать коммерческую лицензию. Как вы, наверное, знаете, весь код, который вы найдете на Stack Overflow, также поставляется с лицензией. Если вы копируете фрагмент из Stack Overflow, вы используете его под лицензией Creative Commons By Attribution Share Alike. Это означает, что вы должны делиться своим кодом под той же лицензией CC-BY-SA. Это честный поступок. - person Bruno Lowagie; 27.10.2016
comment
Я сказал, что это прекрасно работает. Это не оскорбление разработчиков. - person richard; 27.10.2016
comment
ОК, @richard, я думал, вы хотели сказать, что разработчики не заслуживают оплаты за свою работу по поддержке программного обеспечения, поддержанию его в актуальном состоянии в соответствии с последними стандартами PDF. Вы звучали так, как будто ожидаете, что разработчики будут работать бесплатно. - person Bruno Lowagie; 27.10.2016
comment
@amedee Э... Это не то, что я слышал: meta.stackexchange.com/questions/285711/ - person Bruno Lowagie; 04.01.2017