Чтобы добавить CropBox (на страницу), вы можете использовать процедуру EndPage, отправив pdfmark в конец страницы вместо начала, он должен перезаписать любой ранее существующий CropBox.
Или, проще говоря, вы можете просто визуализировать часть мультимедиа напрямую, что в первую очередь похоже на то, что вы хотите сделать, и позволяет избежать (потенциально продолжительного) шага обработки.
Установите размер носителя для области, которую вы хотите визуализировать. А пока давайте предположим, что вам нужен квадрат размером 2 дюйма, на 1 дюйм вверх от нижней части страницы. Итак, мы начинаем с того, что размер носителя составляет 2 дюйма квадратного размера и фиксируем его так, чтобы любой ввод не мог его изменить:
-dDEVICEWIDTHPOINTS=144 -dDEVICEHEIGHTPOINTS=144 -dFIXEDMEDIA
Если вы добавите это в командную строку, которую вы используете для рендеринга PDF-файла, вы увидите, что вы получили 2-дюймовый квадрат. Конечно, сейчас это левый нижний угол страницы, поэтому теперь нам нужно сместить позицию мультимедиа так, чтобы нужная часть находилась на странице. Для этого мы используем PostScript, а именно ключ PageOffet в словаре устройства страницы:
<</PageOffset [-72 0]>> setpagedevice
Обратите внимание, что мы смещаем нижний левый угол страницы, поэтому мы используем -72, мы хотим, чтобы угол уменьшился.
, поскольку мы используем PostScript, нам нужно ввести его с ключами -c и -f:
-c "<</PageOffset [-72 0]>> setpagedevice" -f
Таким образом, вся командная строка становится:
./gs -dDEVICEWIDTHPOINTS=144 -dDEVICEHEIGHTPOINTS=144 -dFIXEDMEDIA -c "<</PageOffset [-72 0]>> setpagedevice" -f input.pdf
Если вы действительно хотите добавить CropBox и создать файл PDF, вам нужно добавить процедуру EndPage, которая добавит CropBox на каждую страницу отдельно:
./gs -sDEVICE=pdfwrite -o ./marked.pdf -c "<</EndPage {0 eq {[/CropBox [300 400 400 600] /PAGE pdfmark pop true}{pop false}ifelse}>>setpagedevice" -f "c:\big boat.pdf