Штамп PDF-файл с контролем положения файла штампа - PullRequest
10 голосов
/ 12 декабря 2011

Кто-нибудь знает о штамповке PDF-файла в PDF-файл, а также о средствах управления позиционированием PDF-файла?

У меня есть файл orginal.pdf и logo.pdf. Я хочу поставить logo.pdf файл в файл orginal.pdf в левом верхнем углу файла original.pdf. Как это можно сделать с Ghostscript или pdftk ?

1 Ответ

27 голосов
/ 19 декабря 2011

Это можно сделать с помощью Ghostscript plus pdftk, но для этого требуется как минимум 2 различных шага.

AFAIK, вы не можете напрямую контролировать размещение штампа pdftk. По умолчанию он помещает марку в центр страницы и одновременно выполняет операцию «масштабирование по размеру».

Итак, сначала вы должны исправить свой штамп, чтобы он сначала помещался на пустую страницу, прямо в том месте, где вы хотите. Это вы можете достичь с помощью Ghostscript на первом этапе. Затем, на втором шаге, используйте pdftk для объединения двух файлов.

Давайте рассмотрим пример.

Первый: Создать файл «stamp-small.pdf». (У вас уже есть; мне нужен один, чтобы продемонстрировать принцип.)

gs \
  -o stamp-small.pdf \
  -sDEVICE=pdfwrite \
  -g3200x500 \
  -c "/Helvetica-Bold findfont 36 scalefont setfont" \
  -c "0 .8 0 0 setcmykcolor" \
  -c "12 12 moveto" \
  -c "(This is my stamp) show" \
  -c "showpage"

Этот пример был для Linux или Mac OS X. В Windows вы бы изменили его так:

gswin32c.exe ^
  -o stamp-small.pdf ^
  -sDEVICE=pdfwrite ^
  -g3200x500 ^
  -c "/Helvetica-Bold findfont 36 scalefont setfont" ^
  -c "0 .8 0 0 setcmykcolor" ^
  -c "12 12 moveto" ^
  -c "(This is my stamp) show" ^
  -c "showpage"

(Вы также можете поместить все это в одну строку, но затем пропустить метки продолжения строки для соответствующей ОС.) Эта первая команда передает серию простых инструкций PostScript командной строке Ghostscript и говорит создать небольшую страницу PDF. с размерами 320x50 баллов. Это должно имитировать вашу «маленькую» марку, для которой вы ищете место размещения.

Секунда: Создайте полностраничный (в моем случае, файл формата PDF) PDF, который можно применить на третьем этапе в качестве реального штампа:

gs \
  -o A4-stamp.pdf \
  -sDEVICE=pdfwrite \
  -g5950x8420 \
  -c "<</PageOffset [280 790]>> setpagedevice" \
  -f stamp-small.pdf 

В Windows:

gswin32c.exe ^
  -o A4-stamp.pdf ^
  -sDEVICE=pdfwrite ^
  -g5950x8420 ^
  -c "<</PageOffset [280 790]>> setpagedevice" ^
  -f stamp-small.pdf 

Эта команда достигла нескольких вещей:

  1. В качестве входных данных использовался изначально созданный файл stamp-small.pdf.
  2. Используется холст 595x842 пункта (то есть размер страницы ISO A4).
  3. Применяется небольшая команда PostScript для смещения входного содержимого на 280 пунктов вправо и на 790 пунктов вверх (координаты PostScript и PDF начинаются с левого нижнего угла).
  4. Создает 'A4-stamp.pdf' в качестве вывода.

По сути, моя оригинальная строка небольшого размера теперь находится в верхнем правом углу страницы А4.

Третье: Теперь вы можете применить этот новый «штамп» к вашему исходному файлу PDF, используя pdftk:

pdftk original.pdf stamp A4-stamp.pdf output stamped.pdf

или, чтобы проштамповать все страницы многостраничного оригинального PDF:

pdftk original.pdf multistamp A4-stamp.pdf output stamped.pdf

Этот пример должен дать вам достаточное представление о том, как разработать аналогичную процедуру для вашего logo.pdf, как я делал для моего stamp-small.pdf. (Я сделал это для верхнего правого угла, вы хотите свой для верхнего левого угла.)

...