Как мы научили ABBYY FineReader PDF редактировать целые абзацы


    Сегодня мы обновили ABBYY FineReader 15 и выпустили его под брендом ABBYY FineReader PDF, потому что он объединяет все инструменты для работы с PDF. По этому поводу публикуем первый пост из серии материалов о фичах программы. В нем мы расскажем об одной интересной возможности, которая не первый месяц есть в программе, но, возможно, не все о ней знали.

    Давно ли вы открывали PDF-файлы? Готовы поспорить, что совсем недавно. Скорее всего, на вашем компьютере точно найдется пара сканов, а может, еще и макет презентации, аналитическое исследование или техническая инструкция. Для каких задач обычно используют эти документы? По данным опроса ABBYY, 62% респондентов ищут информацию в PDF, 60% — копируют текст из документа, а 52% — редактируют: вносят в файл правки, исправляют ошибки и опечатки.

    Даже сейчас не все знают, что можно редактировать текст в PDF. Да, изменение таких файлов устроено не так, как редактирование обычного текстового документа. ABBYY FineReader PDF с многофункциональным текстовым редактором для работы с PDF и сканами позволяет быстро внести изменения прямо в PDF, без утомительной конвертации файла в другие форматы. При редактировании текст в PDF плавно перетекает со строчки на строчку, как в MS Word. Можно добавить или удалить несколько слов, изменить целые абзацы или даже поменять их местами.

    В этом посте мы раскроем технические подробности редактирования многострочных фрагментов текста в FineReader: как мы изменили движок программы, как редактирование устроено изнутри и как оно выглядит для пользователя. Поехали!

    Форматом PDF пользуются по всему миру: его содержимое одинаково отображается на любых компьютерах, смартфонах и планшетах с разными операционными системами. Это удобно и помогает избежать неловких ситуаций. Например, когда вы написали текст в MS Word, отправили коллегам, а они открывают его LibreOffice'ом или Wordpad'ом, и все поехало и начинается веселье. PDF, конечно, в этом плане удобнее, но с текстом здесь все сложно. В 70% всех существующих PDF-документов текст есть, а в 30% — нет, так как это изображения.

    Поговорим сначала о PDF, в которых текст есть. Чтобы редактировать PDF, надо понимать, как в нем записан текст. Открывали когда-нибудь PDF в блокноте? Если да, то вы видели такое:

    Чтобы все это отображалось понятно для пользователя, нужно проделать большую работу.

    Задача: понять PDF


    Содержимое каждой страницы в PDF-файле хранится в виде потоков команд для отрисовки документа – это могут быть текст, изображения или векторная графика. Структуру файла определяют PDF-объекты, например, страница, картинка, комментарий (а абзацы, строчки текста и буквы – это всего лишь части объекта). Символ в PDF представляется глифом. То, как они записаны, определяется шрифтом. Каждый символ хранится отдельно: у него есть шрифт, код символа в шрифте и координаты его расположения на странице. То, где глифы расположены, определяется как раз потоком команд. Кроме того, буквы объединены в потоки текста (text run), но они не смысловые.

    В PDF нет ни строк, ни абзацев, которые есть в документах текстовых форматов. Даже порядок текста не всегда определен. То есть вы видите текст, но на самом деле текста не существует. Это хаос из трудно понятных инструкций (как на изображении выше), которые нужно правильно отобразить в конкретных местах документа, с соответствующим форматированием.

    «А как же текст?» – спросите вы.



    Текст в PDF все же существует, и его даже получится редактировать. Для этого мы учим наши технологии понимать структуру текста, например, определять и выделять строки. Расскажем об этом подробнее.

    Библиотеки PDF и как мы их поменяли


    Чтобы сделать возможным редактирование целых абзацев, мы сильно поменяли нашу внутреннюю подсистему (библиотеку), которую мы называем PdfTools. Она занимается тем, что открывает PDF-файлы, парсит потоки команд (т.е. понимает, где расположен текст, где картинки, и воссоздает структуру документа) и помогает пользователям оперировать этими данными: прочитать, изменить, сохранить в PDF.

    Подсистема PdfTools содержит все необходимые инструменты, чтобы прочитать содержимое и обернуть его в объекты (страница, картинка, комментарий), с которыми удобно работать программе. С этими объектами уже могут работать наши продукты, в частности ABBYY FineReader PDF и другие.

    Как было раньше. В FineReader 14 мы умели редактировать текст только в рамках одной строчки. После редактирования необходимо было выполнить «рендеринг» — расставить глифы на свои новые места.

    Вообще рендеринг — это визуализация. Но мы вкладываем в это слово иное понятие — расположение объектов в PDF на своих местах. Для PDF-специалистов это и есть визуализация, которую больше никто не видит. Когда мы говорим о визуализации в привычном понимании, то используем слово «растеризация».

    Весь этот процесс располагался в подсистеме PdfTools. Она помогала нам собирать содержимое PDF в строчки и редактировать их. Например, надо поставить на 5-ое месте глиф «А». FineReader передавал подсистеме PdfTools, что на пятое место нужно поставить глиф «А» с заданным размером и шрифтом, а PdfTools вставляла «А» и перемещала на нужное место в строчке все глифы, которые следовали за буквой «А». Построчное редактирование довольно легкое: текст просто смещался вправо или, например, влево, если он записан на иврите или арабском языке. Это позволяло внести небольшие корректировки, например, исправить опечатку, но не давало возможность сделать более глобальные изменения в тексте PDF-документа.

    Что решили изменить. Когда появилась задача многострочного редактирования, мы поняли, что в рамках одной библиотеки PdfTools это будет проблематично делать. Нам необходимо было научиться автоматически находить в тексте PDF более крупные фрагменты, например, «видеть» абзацы, понимать, где находятся их границы, какое форматирование должно быть у целого фрагмента текста и что происходит при переходе с одной строки на другую. Чтобы определить все эти параметры, мы решили привлечь для решения этой задачи и другие наши OCR-технологии — Document Analysis (DA) и Synthesis, которые умеют строить структуру документа.

    Document Analysis и Synthesis


    Чтобы определять в тексте блоки, ABBYY FineReader PDF использует технологию Document Analysis. Она позволяет найти абзацы, таблицы, картинки. Программа подсвечивает найденные блоки небольшими бледными рамками, чтобы пользователю удобнее было вносить правки:



    Далее мы усовершенствовали другую подсистему нашей программы – Synthesis. Мы уже рассказывали на Хабре, зачем она нужна. Если вкратце, именно она определяет структуру и все характеристики распознанного текста: какие используются шрифты и размеры, какое начертание (bold, italic, underline), где заголовки, списки, отступы и многие другие параметры, которые можно настраивать в том же MS Word. Мы доработали Synthesis для того, чтобы при распознавании и воссоздании страницы очень точно восстанавливать исходные параметры текста.

    Особенности подчеркнутого текста


    В PDF нет такого атрибута текста как подчеркивание, привычного, например, пользователям MS Word. Подчеркивание в PDF – это векторная графика, никак не связанная с текстом. Без дополнительной доработки продукта при редактировании «подчеркнутого» текста символы бы перемещались привычным образом, а линии, обозначающие подчеркивания, оставались бы на месте. ABBYY FineReader PDF умеет определять и редактировать подчеркнутый текст привычным пользователю образом.

    Редактирование таблиц в PDF


    Изменилось и редактирование таблиц. Раньше программа «видела» таблицу, как отдельные строки, и редактировала ее так же. Теперь при работе с таблицами ABBYY FineReader PDF определяет содержимое каждой ячейки, умеет извлекать из них текст и работать с ним. Это удобно, когда надо исправить ошибку в цифре, поменять точку на запятую и при этом сохранить структуру таблицы, сделать это быстро и без конвертации PDF-документа в другие форматы.

    Как отредактировать скан?


    Возможность многострочного редактирования доступна и для сканов. Кстати, пользователю даже не надо задумываться, скан перед ним или нет. ABBYY FineReader PDF сам определит это и запустит нужные механизмы. Например, в дате договора — опечатка, или ФИО контрагента поменялось: оно стало длиннее и должно «перетечь» на следующую строчку.

    В программе скан сначала распознается, а потом происходит подготовка к редактированию. Когда скан распознали, то текст получается не в нашем исходном документе, а в его виртуальном «двойнике». И именно в нем происходят все операции по редактированию.

    Когда пользователь закончил редактировать документ, программа автоматически собирает все изменения со страницы и заменяет эти фрагменты в исходном документе. Наша задача — встроить текст обратно в PDF-документ, не повредив все то остальное, что уже есть в нем.

    Редактирование скана позволяет не тратить время на конвертацию документа в другие форматы и обратно. Это удобно, когда нужно быстро внести забытую правку в дату или другой фрагмент текста.


    Пример многострочного редактирования. Текст автоматически перераспределяется по строкам по мере добавления слов и предложений внутри абзаца.

    Вместо заключения


    Исправить опечатку в листовке, поменять местами текстовые блоки в инструкции, изменить целый абзац в скане договора или добавить несколько новых, поправить форматирование всего текста – все эти задачи теперь возможно решить:

    • быстро,
    • без конвертации документа,
    • с помощью одной программы.

    Попробовать можно прямо сейчас – скачайте триал-версию ABBYY FineReader PDF бесплатно.

    В следующем посте через неделю мы расскажем о том, как научили ABBYY FineReader PDF еще одной интересной фиче и для чего может пригодиться новая функциональность.

    Пишите в комментариях, о каких еще технологических особенностях нашей программы вам было бы интересно узнать?
    ABBYY
    Решения для интеллектуальной обработки информации

    Комментарии 42

      0
      Разве можно редактировать текст в PDF? Разве это разрешено в бесплатных программах?
        0
        Спецификация не запрещает. Не очень просто, да, но возможно
          0
          В какой бесплатной программе можно редактировать текст в PDF?

          Спасибо.
            0
            Я вам не каталог софта и не гугл:)
            +2
            LibreOffice. На самом деле тут больше вопрос к самому файлу, текст ли там. Он может оказаться набором векторной графики или кучей жпегов. Но, имхо, если у вас в принципе возникла такая потребность, вы что-то делаете не так.
              0
              Спасибо.
                0

                Увы, в LibreOffice едут шрифты, рамки, и все остальное. Пробовал редактировать примитивный PDF из двух страниц.


                Понять смысл можно, но выглядит всё ужасно. До сих пор не существует приличной альтернативы Acrobat'у. :(

                  0

                  В статье, конечно, много передёргивание умолчаний, но в одном автор прав — в неудачных (и не очень редких) случаях "текст" в pdf может быть и не текст вовсе, а пачка ничего не значащих векторных примитивов.
                  Или как у нас в деревне был случай (какая-то дока от Samsung) — красиво расставленные отдельные слова. Смотрится как сплошной красивый текст, но сплошным текстом не является.
                  И там никакой акробат не поможет, ага.

                    +1

                    Да, поэтому ABBYY в своём продукте наверное может сделать редактирование, так как они спецы по распознаванию текста. К сожалению, при всём желании их продуктом воспользоваться не могу, так как работаю в Linux, Windows у меня вообще нигде нет, даже в виртуалке.


                    PDF, кстати, может быть вообще набором отсканированных картинок.

                      0
                      Акробат, я так понимаю, распознает по технологии OCR любые примитивы и превратит в текст с абзацами.
                        0

                        Это абсолютно точная информация?
                        Или мысли вслух?

                          0
                          Ну вот как он мне распознал Ваш вопрос с экрана, сохранённого в джипег:
                          Это абсолютно точная информация?
                          Или мысли вслух?

                          При этом Акробат назначает либо скрытый, либо автоматически созданный на основе трассировки шрифт в зависимости от режима OCR. Абзацы он не распознаёт, но понимает блоки текста со строками.

                            +1
                            Это в статье написано. Вполне однозначно изложено в предпоследнем пункте: «Как отредактировать скан?»

                            P.S. Да простит меня фирма ABBYY, конечно же я имел в виду, что Finereader, а не Акробат, распознает и превратит. Прошу прощения за глупую описку.
                          0

                          Я однажды встретил PDF, где текст был набран побуквенно: т. е. бралась буква, например, «А» и размещалась по всей странице, потом бралась следующая, например, «Б» и т. д.

                          0
                          Увы, в LibreOffice едут шрифты, рамки, и все остальное. Пробовал редактировать примитивный PDF из двух страниц. Понять смысл можно, но выглядит всё ужасно. До сих пор не существует приличной альтернативы Acrobat'у. :(

                          Статья как раз о том, что ABBYY FineReader PDF умеет редактировать текст и делает это теперь не хуже Акробата. Попробуйте сами: триал можно скачать здесь

                            0

                            Да я понимаю, только нет у меня Windows. Не буду же я ее ставить ради необходимости несколько раз в год отредактировать PDF...

                              +1
                              Беда в том, что FineReader ничуть не лучше Акробата. И там и там приходится искать ключ или номер. То и другое недоступно, если нет денег.
                          0
                          В какой бесплатной программе можно редактировать текст в PDF?

                          Раньше версия Master PDF Editor для Linux (но не для других ОС) была полностью бесплатна для использования, и последний бесплатный выпуск на данный момент всё ещё доступен с сайта производителя (ссылки в конце статьи). Конкретно эту версию не тестировал, но более старыми версиями пользуюсь много лет, хотя у меня довольно скромные запросы в плане функционала.
                            0
                            К сожалению, как и многие другие бесплатные приложения, не полностью, а «free for non-commercial use». Из полностью бесплатного на память приходит только векторный редактор Inkscape. Но он, в силу своей направленности, умеет работать только с отдельными страницами, поэтому приходилось на работе сочетать его с PDF Split & Merge. Конечно, не очень удобно, зато лицензионно чисто.
                          0
                          В бизнесе в пдф сохраняют тексту документов и презентаций для того, чтобы их не меняли. Если нужна возможность редактирования, то присылают исходные файлы. Бывают случае, когда исходники не сохранились, а нужно составить договор на основе текущего, но в таком случае нужен не параграф, а весь текст.
                          Вопрос — а для каких кейсов все-таки нужно редактирование абзацев?
                        0
                        А как же версия для mac?
                          0

                          Наша продуктовая команда как раз работает над ней!

                          +1
                          спасибо за статью
                            0

                            И вам спасибо, что прочитали.

                            0
                            PDF — это результат компиляции набора инструкций, отсюда и проблемы. Редактировать PDF так же сложно, как редактировать EXE.
                              0

                              Это не результат компиляции, а исходный код программы. PDF — это язык программирования PostScript, из которого убрали некоторые конструкции (например, условия и циклы). Что впрочем не делает работу с ним ни капли проще.

                                0
                                Вы уверены? Википедия, вот, приводит пример кода на этом языке:
                                %!PS
                                 /Courier             % name the desired font
                                 20 selectfont        % choose the size in points and establish 
                                                      % the font as the current one
                                 72 500 moveto        % position the current point at 
                                                      % coordinates 72, 500 (the origin is at the 
                                                      % lower-left corner of the page)
                                 (Hello world!) show  % stroke the text in parentheses
                                 showpage             % print all on the page

                                Не очень-то похоже на бинарное содержимое PDF.
                                  0
                                  Вы уверены? Википедия, вот, приводит пример кода на этом языке:

                                  quwy Пример, который Вы привели, не похож на PDF. В PDF такие команды будут выглядеть так:


                                  BT
                                  72 500 TD
                                  /F1 200 Tf
                                  (Hello, world!) Tj
                                  ET

                                  Как уже выше было сказано, PDF не целиком состоит из таких команд, это всего лишь команды для отображения контента. Помимо него, в PDF записано еще много чего интересного. Кстати, если объекты в PDF запаковать каким-нибудь кодеком, то он станет гораздо больше похож на бинарный файл.

                                  0
                                  Это не результат компиляции, а исходный код программы. PDF — это язык программирования PostScript, из которого убрали некоторые конструкции (например, условия и циклы). Что впрочем не делает работу с ним ни капли проще.

                                  eumorozov Как выше сказано, это действительно не результат компиляции. Но отождествлять PDF с PostScript тоже неправильно. Нужно понимать, что PDF-документ — это набор объектов, расположенных на фиксированных местах (смещении, offset) в файле. Объекты могут иметь разные назначения. Один из объектов в документе — это контент страницы. Такой объект имеет поток stream, в котором записан поток команд. Вот как раз такой поток команд и определяет видимую часть страницы. Правила записи потока команд действительно взяты из PostScript и имеют много общего.

                                    0
                                    Должно быть, вы говорите про compressed PDF?
                                      0
                                      Должно быть, вы говорите про compressed PDF?

                                      PereslavlFoto Нет. Возможно, вас смутила фраза про объекты и смещения? Это характерно абсолютно для всех PDF. Любой PDF можно представить и как compressed, и в обычном, читаемом виде (decompressed). Вопрос только в размере файла, который, очевидно, в сжатом состоянии будет меньше.

                                        0
                                        Да, меня смутила фраза про смещения. Потому что я правил PDF, стирая там отдельные команды и меняя bounding box.

                                        А вот можно ли попросить вашего совета про устройство PDF файлов? Если да, я личное сообщение напишу.
                                          0
                                          А вот можно ли попросить вашего совета про устройство PDF файлов? Если да, я личное сообщение напишу.

                                          PereslavlFoto мы планируем сделать отдельный пост и рассказать про устройство PDF. Если совет нужен сейчас, то пишите, конечно.

                                  0
                                  Мне доводилось редактировать PDF в текстовом редакторе. Проблемы не возникали.
                                    0
                                    Так я и EXE могу подредактировать в текстовом редакторе. Вопрос не в том, можно или нельзя, а в том, насколько это геморройно, особенно если нужно не просто букву заменить.
                                      0
                                      Мне доводилось редактировать PDF в текстовом редакторе. Проблемы не возникали.

                                      PereslavlFoto Скорее всего, вы просто меняли один символ один на другой, и при этом сам документ не был заархивирован. Тогда вы понимаете, что редактируете, и как это сделать, не нарушив байтовое смещение PDF-объектов. Но это возможно в очень редких случаях...

                                        0
                                        Я брал decompressed PDF, стирал команды окрашивания векторных рисунков и исправлял bounding box. Байтовое смещение нарушалось, однако это не имело значения.

                                        Когда работаешь с нулевым бюджетом и не можешь купить программы, остаётся только ghostscript и руки. :-)

                                        A propos, не знаете ли, какой программой можно оставить в PDF векторный рисунок (обводку и заливку), однако убрать переключения цветов? Задача в том, чтобы переключать цвет не внутри PDF файла, а до того, как он начнёт выводиться. То есть вот в редакторе изначально была обводка и заливка чёрного цвета, а мне надо, чтобы была обводка и заливка незаданного цвета.

                                        Спасибо.
                                          0
                                          Я брал decompressed PDF, стирал команды окрашивания векторных рисунков и исправлял bounding box. Байтовое смещение нарушалось, однако это не имело значения.

                                          PereslavlFoto Большинство просмотрщиков умеют восстанавливать байтовые смещения объектов, если они не очень большие. При таком редактировании документа главное не перестараться...


                                          A propos, не знаете ли, какой программой можно оставить в PDF векторный рисунок (обводку и заливку), однако убрать переключения цветов? Задача в том, чтобы переключать цвет не внутри PDF файла, а до того, как он начнёт выводиться. То есть вот в редакторе изначально была обводка и заливка чёрного цвета, а мне надо, чтобы была обводка и заливка незаданного цвета.

                                          PereslavlFoto Уточните, что значит "чтобы была обводка и заливка незаданного цвета"? То есть она как бы была, но прозрачного цвета? Или все-таки ее не было? Или чтобы она была такого цвета, как векторные примитивы, нарисованные до нужного объекта? PDF дает простор для воображения.


                                          В принципе, любую из этих операций можно сделать как вы уже делали, в блокноте. Но как выразился quwy, можно поправить что угодно, вопрос в том, насколько это сложно.

                                            0
                                            Вообразим, что мы с вами начертили прямоугольник и залили его заливкой. Мы сделали это в векторном редакторе. Прямоугольник у нас красного цвета, заливка красного цвета. Мы вывели результат в PDF.

                                            Теперь мы верстаем документ в pdfLaTeX и включаем в него эту PDF-иллюстрацию. Нам надо, чтобы цвет прямоугольника был не красный и чтобы цвет заливки был не красный. Нам надо, чтобы цвет этой монохромной иллюстрации задавался в вёрстке.

                                            Известно изящное решение: нужно, чтобы в PDF-иллюстрации был задан контур обводки и был задан контур заливки, однако чтобы не был задан их цвет. То есть чтобы рисунок был сделан без указания цвета. При этом верстальная программа, включая этот рисунок, изобразит его прежде заданным цветом.

                                            Иными словами, нужно, чтобы цвет был задан до включения PDF-иллюстрации и чтобы цвет никак не менялся внутри PDF-иллюстрации, не был задан в ней.

                                            Я умею сделать это руками и не умею в программе…

                                            (Кажется, это ваш вариант «как векторные примитивы, нарисованные до».)
                                              0
                                              Вообразим, что мы с вами начертили прямоугольник и залили его заливкой. Мы сделали это в векторном редакторе. Прямоугольник у нас красного цвета, заливка красного цвета. Мы вывели результат в PDF.

                                              PereslavlFoto К сожалению, мы не имеем точного представления, как LaTex вставляет к себе PDF-документ. PDF-документ — это многослойная структура, и контент страницы — это только его часть, пусть и наиболее существенная. Вероятно, LaTex умеет парсить документ и извлекать этот контент, может, даже преобразует в свой язык. Таким образом, если операндов цвета не встретилось, он сможет использовать свои операнды.


                                              У Вас достаточно специфичный сценарий, вряд ли какая-то программа сможет делать именно то, что вам нужно: так как в PDF отсутствие цвета означает дефолтный черный цвет, многие редакторы все равно его явно запишут в поток команд.


                                              Передадим вас запрос продуктовой команде FineReader.

                                      0
                                      PDF — это результат компиляции набора инструкций, отсюда и проблемы. Редактировать PDF так же сложно, как редактировать EXE.

                                      quwy Тут вынуждены не согласиться. Результатом компиляции должен быть набор инструкций, который сможет выполнять какая-то программа (например, PDF-viewer). Но это не так. PDF-редакторы читают и пишут PDF, не переделывая его в промежуточный набор команд.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое