Редактирование PDF с помощью XPDF (или с помощью чего-то другого)

StackOverflow https://stackoverflow.com/questions/2094253

  •  21-09-2019
  •  | 
  •  

Вопрос

Я хотел бы спросить, возможно ли редактировать PDF-файлы с помощью ни xpdf библиотека, и если да, то каким образом?Я предполагаю, что это возможно, но я не смог найти ни учебника, ни документации для xpdf, так что я действительно понятия не имею : ( .Я также открыт для использования другой библиотеки, если какая-либо другая поддерживает PDF редактирование.Мое единственное требование к такой библиотеке заключается в том, что она должна быть C++ библиотека или, по крайней мере, C один и должен быть кроссплатформенным (Windows и Linux)

Мне нужно только базовое редактирование PDF-файла, например:

"это текст в PDF-документе" было бы изменено на "это текст в формате pdf", а также с другим цветом текста.

Спасибо за все ваши ответы!

Это было полезно?

Решение

Просто чтобы вы понимали масштаб того, во что вы ввязываетесь, "базовое редактирование" содержимого PDF почти всегда нетривиально.

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

BT /F1 12 Tf 72 720 Td (this is a text in a pdf document) Tj ET

что, если перевести на что-то более знакомое, это:

BeginText();
SetFont(F1, 12.0);  // Font 1, 12.0 pt
TextMoveTo(72, 720);
ShowText("this is a text in a pdf document");
EndText();

Итак, в этом случае вы должны преобразовать это во что-то вроде этого:

BeginText();
SetFont(F1, 12.0);  // Font 1, 12.0 pt
TextMoveTo(72, 720);
ShowText("this is a ");
SetFont(F2, 12);
ShowText("text");
SetFont(F1, 12);
ShowText(" in a pdf document");
EndText();

который стал бы:

BT /F1 12 Tf 72 720 Td (this is a ) Tj /F2 12 Tf (text) Tj /F1 12 Tf
( in a pdf document) Tj ET

в эквивалентном формате PDF.Проблема многогранна:

  1. Вы должны извлечь страницу и все ее ресурсы (нетривиально)
  2. Вы должны создать новую страницу, вставив новые ресурсы (вы добавляете новый шрифт), внедрив шрифт, если это допустимо
  3. Измените поток содержимого страницы, чтобы включить в него ваш измененный контент.

И 3 - это то, где вы можете зациклиться, потому что существует бесконечное количество способов создать страницу с описанным вами контентом, и даже с приличной библиотекой вам будет трудно получить, возможно, 70% из них.Позвольте мне кратко описать, почему это так плохо, как кажется.Существуют программы для создания PDF-файлов (я смотрю на тебя, трофф), которые сначала размещают весь обычный текст на странице, затем выделяют весь текст курсивом, затем весь текст жирным шрифтом.Клянусь, я ничего не выдумываю.Некоторые программы хотят расположить текст очень точно, поэтому, если вам повезет, они будут использовать оператор TJ, который выделяет текст с определенным кернингом.Если вам не повезет (что происходит в большинстве случаев), вместо этого они размещают текст с набором ходов перед каждым отдельным символом на странице.А что, если ваш текст нанесен криво или в необычной ориентации (карты, объявления)?Как насчет случаев, когда кто-то незаметно изменяет размер шрифта для большего различия между верхним и нижним регистром или имитирует маленькие заглавные буквы?

Вот почему, когда я писал инструмент поиска текста для Acrobat 1.0, мне потребовалось два месяца пота, чтобы обработать как можно больше крайних случаев.Это не редактирование текста - это просто попытка найти одно слово или фразу.

Я не собираюсь рекомендовать вам библиотеку - извините - я кратко ознакомился с xpdf, и неясно, есть ли у нее возможности генерации PDF или она просто использует PDF.PDFlib, который является коммерческим продуктом, по-видимому, предназначен для генерации PDF-файла, хотя неясно, может ли он его использовать, но вы, безусловно, могли бы получить обе стороны, склеив их вместе.

Если бы это был я, я бы использовал инструменты, которые я разработал, и я бы все еще немного стеснялся этой задачи.Моя библиотека используется Atalasoft ( Аталасофт ), компания, в которой я работаю, для создания PDF-файлов из цельной ткани и для редактирования в очень ограниченной области (аннотации, метаданные документа).Самое сложное заключается в том, что мы делаем все возможное, чтобы скрыть сложность PDF от наших клиентов.В целом, наши клиенты хотят США понять спецификацию вместо них и упростить остальное - но задачи, подобные этой (редактирование - еще одна), действительно трудно выполнить, не понимая глубины спецификации PDF.Если вы начинаете входить в библиотечный мир работы с PDF-файлами, вам следует начать с чтения спецификации, особенно главы 8 (Графика) и главы 9 (текст), и вы получите лучшее представление о том, что вам придется делать с библиотекой.

Другие советы

xpdf - это библиотека PDF, доступная только для чтения.Он не может записывать PDF, не говоря уже об изменении содержимого.

Вы смотрели Itext / iSharp для редактирования PDF-файлов?

Хотя и не библиотека в традиционном смысле этого слова, Pdfправить имеет возможности редактирования по сценарию.Но для этого требуется QT. ПодоФо вероятно, лучше всего соответствует вашим требованиям.Есть также PdfХуммус.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top