PDF обнаружение кровотечения
В настоящее время я пишу небольшой инструмент (Python + pyPdf) для проверки PDF-файлов на соответствие принтера.
Увы, я уже запутался в первой задаче: обнаружение, что у PDF есть по крайней мере 3-миллиметровое "кровотечение" (граница вокруг страниц, где ничего не напечатано). Я уже понял, что не могу обнаружить кровотечение для всего документа, так как, кажется, нет глобального. Однако на страницах я могу обнаружить пять разных полей:
mediaBox
bleedBox
trimBox
cropBox
artBox
Я прочитал документацию pyPdf, касающуюся этих блоков, но единственное, что я понял, это mediaBox
который, кажется, представляет общий размер страницы (то есть бумагу).
bleedBox
довольно очевидно, что следует определить кровотечение, но это не всегда так.
Еще одна вещь, которую я заметил, заключалась в том, что, например, в PDF все эти блоки имеют одинаковый размер (не подразумевая никакого кровотечения) на каждой странице, но когда я открываю его, возникает огромное количество кровотечений; Это заставляет меня думать, что отдельные элементы текста имеют свое собственное смещение.
Так что, очевидно, просто рассчитать кровотечение из mediaBox
а также bleedBox
не является жизнеспособным вариантом.
Я был бы более чем рад, если бы кто-нибудь смог пролить некоторый свет на то, чем на самом деле являются эти блоки и что я могу из этого сделать (например, одна коробка всегда меньше другой).
Бонусный вопрос: может кто-нибудь сказать мне, что именно "единица пространства пользователя по умолчанию" упоминается в документации? Я уверен, что это относится к mm
на моей машине, но я хотел бы обеспечить mm
везде.
1 ответ
Цитирование из спецификации PDF ISO 32000-1:2008, опубликованной Adobe:
14.11.2 Границы страницы
14.11.2.1 Общие положения
Страница в формате PDF может быть подготовлена либо для готового носителя, такого как лист бумаги, либо в качестве части процесса допечатной подготовки, в котором содержимое страницы помещается на промежуточный носитель, такой как пленка или накладная пластина для воспроизведения. В последнем случае важно различать промежуточную страницу и готовую страницу. Промежуточная страница часто может содержать дополнительный связанный с производством контент, например, обрезки или метки принтера, которые выходят за границы готовой страницы. Для обработки таких случаев страница PDF может определять до пяти отдельных границ для управления различными аспектами процесса формирования изображения:
Поле мультимедиа определяет границы физического носителя, на котором должна быть напечатана страница. Он может включать в себя любую расширенную область, окружающую готовую страницу, для обрезки, печати меток или других подобных целей. Он также может включать области вблизи краев носителя, которые не могут быть отмечены из-за физических ограничений устройства вывода. Содержимое, выходящее за пределы этой границы, может быть безопасно удалено без ущерба для значения файла PDF.
Рамка обрезки определяет область, в которую содержимое страницы должно быть обрезано (обрезано) при отображении или печати. В отличие от других блоков, поле обрезки не имеет определенного значения с точки зрения физической геометрии страницы или предполагаемого использования; это просто накладывает ограничение на содержимое страницы. Однако в отсутствие дополнительной информации (такой как инструкции наложения, указанные в заявке на работу JDF или PJTF), поле обрезки определяет, как содержимое страницы должно быть расположено на носителе вывода. Значением по умолчанию является мультимедийный блок страницы.
Блок обрезки (PDF 1.3) определяет область, в которую должно быть обрезано содержимое страницы при выводе в производственную среду. Это может включать в себя любую дополнительную зону отбора, необходимую для учета физических ограничений оборудования для резки, складывания и обрезки. Фактическая напечатанная страница может включать в себя печатные метки, которые выходят за пределы отводной коробки. Значением по умолчанию является поле обрезки страницы.
Рамка обрезки (PDF 1.3) определяет предполагаемые размеры готовой страницы после обрезки. Он может быть меньше, чем коробка с носителем, чтобы обеспечить содержание, связанное с производством, такое как инструкции по печати, метки обрезки или цветные полосы. Значением по умолчанию является поле обрезки страницы.
Графический блок (PDF 1.3) определяет объем значимого содержимого страницы (включая потенциальные пробелы), как задумано создателем страницы. Значением по умолчанию является поле обрезки страницы.
Словарь объекта страницы задает эти границы в записях MediaBox, CropBox, BleedBox, TrimBox и ArtBox соответственно (см. Таблицу 30). Все они являются прямоугольниками, выраженными в единицах пространства пользователя по умолчанию. Коробки обрезки, обрезки, обрезки и художественного оформления обычно не должны выходить за границы бокса с носителем. Если они это сделают, они эффективно сводятся к пересечению с медиа-бокс. Рисунок 86 иллюстрирует отношения между этими границами. (Рамка обрезки не показана на рисунке, поскольку она не имеет определенной связи ни с одной из других границ.)
После этого есть хороший график, показывающий эти поля относительно друг друга:
Причины, по которым во многих случаях установлен только медиа-бокс,
что в случае PDF-файлов, предназначенных для электронного использования (то есть для чтения на компьютере), остальные поля практически не имеют значения; а также
что даже в контексте допечатной подготовки они уже не так необходимы, как раньше, ср. статья, на которую ссылается Педро в своем комментарии.
Относительно вашего "бонусного вопроса": единица пространства пользователя по умолчанию составляет 1⁄72 дюйма; начиная с PDF 1.6, его можно изменить на любое (не обязательно целое) кратное этого размера, используя запись UserUnit в словаре страницы. Изменение его в существующем PDF существенно масштабирует его, поскольку единица пространства пользователя является базовой единицей в независимой от устройства системе координат страницы. Поэтому, если вы не хотите обновить каждую команду в описаниях страниц, ссылаясь на координаты, чтобы сохранить размеры страницы, вы не захотите применять единицу измерения пространства пользователя в миллиметре...;)