juliklive , venting since 2003

PDF-книги в стиле Pragmatic Programmers

Недавно возникла задача распространять 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 и засовывает его как графику в генерируемый новый (по принципу матрешки). Если хотите быть оригинальным рекомендую впечатывать не один ватермарк, а два - один из них двухпунктовым белым шрифтом :-)

Suspects: Веб-стройка

What others said

Oleg Marchuk

Как графику? Тю... А решений через post-script не искал?

Julik

Описался я - конечно не как графику. Как XObject - как будто исходный файл помещен постранично в создаваемый в программе верстки. Текст остается текстом и тд.

Почему не поскрипт? Очень просто - я не доверяю опенсурсным дистиллерам и не хочу давать им доступ к своему дизайну.

Julik

+как вы мне прикажете подключать к GhostScript адобовские и макинтошные OTF и PS1 шрифты (особенно те которые с русскими букывками)

Сергей

Спасибо. В закладки!

Have a word?


Please do not go bonkers with code blocks, links and viagra ads, we are taking measures