Недавно возникла задача распространять PDF-файлы с "водяным знаком" - персонализированные версии журнала с отметкой, для кого они были подготовлены. Генерировать оные нужно из веб-приложения (при том что сами журналы сделаны в InDesign). Существует, как выяснилось, масса библиотек дабы PDF создать с нуля, но почти нету оных чтобы уже существующий PDF обработать (в особенности - не имея оригинальных шрифтов например).
Оказалось, что ни на Ruby ни на PHP внятного решения нет, зато есть совершенно магическое на Perl. Дабы никому не пришлось тратить на поиски солюшена много времени (среди кучи бессмысленного shareware для этой задачи под Винды отыскать то что нужно непросто), сразу код.
use PDF::Reuse;
use PDF::Reuse::Util;
use strict;
my ($name) = @ARGV;
prFile('book_for_someone.pdf');
my $sourcePdf = 'pdf_that_your_designer_made.pdf';
my $greeting = "This book is personalized for " . $name;
my $left = 1;
while ($left) {
prFont('HO');
prAdd("0 0 0 rg\n0 g\nf\n");
prText( 38, 800, $greeting);
$left = prSinglePage($sourcePdf);
}
prEnd;
И дальше из любого веб-приложения через командную строку поднимается как
perl make_pdf.pl "John Doe"
Работает по сути гениально - читает старый PDF и засовывает его как графику в генерируемый новый (по принципу матрешки). Если хотите быть оригинальным рекомендую впечатывать не один ватермарк, а два - один из них двухпунктовым белым шрифтом :-)
What others said
Oleg Marchuk
Как графику? Тю... А решений через post-script не искал?
Julik
Описался я - конечно не как графику. Как XObject - как будто исходный файл помещен постранично в создаваемый в программе верстки. Текст остается текстом и тд.
Почему не поскрипт? Очень просто - я не доверяю опенсурсным дистиллерам и не хочу давать им доступ к своему дизайну.
Julik
+как вы мне прикажете подключать к GhostScript адобовские и макинтошные OTF и PS1 шрифты (особенно те которые с русскими букывками)
Сергей
Спасибо. В закладки!