Xpoint
   [напомнить пароль]

Шаблоны и PDF

Метки: [без меток]
2006-12-24 19:43:10 [обр] Spectrum2(4/26)[досье]

Существует PDF – шаблон (графическое оформление, таблицы – сложное оформление). Фактически, это бланк, в который должны заполняться произвольные данные.

Собственно, проблема – в том, как эти данные туда забить. Кто сталкивался с такой задачей? Какие есть способы? Может быть, кто подскажет статьи на эту тему? Интересуют любые идеи.

В идеале, хотелось бы что-то вроде такого модуля (с поддержкой кириллицы!):

$pdf = SuperPdfModule->new(‘template.pdf’);
$pdf->fill(placeholder_name => ‘Мороженое’, placeholder_flavour => ‘Ванильное’);
$pdf->saveas(‘my_favourite_icecream.pdf’);

Т.е. модуль должен находить в PDFе placeholder_name и placeholder_flavour и заменять их на соответствующие значения.

Что пробовал:
PDF::Template, PDF::API2, PDF::Reuse. Редактировать PDFы они не могут.
CAM::PDF. Редактировать вроде как может, но с моей задачей не справляется. Нет кириллицы. Вообще с форматированием строк в PDF ж*па полная, особенно с кодированием.

Как вариант, можно не текст в PDFе заменять, а создать Text Field’ы и записывать в них значения. CAM::PDF это может, но кириллица не работает.

Можно еще, с PDF::API2 поверх PDFа Text Label’ов наляпать. Но для этого нужно знать координаты для каждого текстового поля внутри документа. Что делать, если нужно заполнить 50 полей…

В целом, складывается очень печальная картина с PDF'ом. Нормальных модулей для работы с ним нет.

спустя 14 часов [обр] Thirteensmay(0/157)[досье]

Совсем недавно делал пару десятков отчетов - PDF::API2, над ним самописанная надстройка (перевод начала координат в верх. лев. угол, позиционирование в мм, общ. упрощение). Часть из них как раз с шаблонами - оставлял места, потом заполнял. Т.е. так как Вы сами пишете:

Можно еще, с PDF::API2 поверх PDFа Text Label’ов наляпать. Но для этого нужно знать координаты для каждого текстового поля внутри документа. Что делать, если нужно заполнить 50 полей...

Так вот, проблемы не вижу, какая разница знать 50 имен плейсхолдеров или 50 координат ? C координатами кстати и работает быстрее и код меньше ;) А что касается их вычисления, так сущий пустяк - масштабируете шаблон во вьювере до полного физического совпадения с реальным размером, прикладываете к монитору линейку, - вуаля ! ;)

спустя 5 часов [обр] Spectrum2(4/26)[досье]

Этот вариант буду использовать только в крайнем случае.
Использовать координаты - это изначально неправильно.
Стоит немножко подправить PDF и все координаты придется заново линейкой рассчитывать.
К тому же, хотелось бы использовать placeholder'ы = полям БД.
На эту тему есть, кстати, пример http://www.opennet.ru/base/dev/pdf_api2.txt.html (Только лучше использовать PDF::Reuse, он гораздо меньше и быстрее)

Еще идеи?

спустя 1 час 22 минуты [обр] Thirteensmay(0/157)[досье]
Может быть тогда шаблоны и сборку делать в каком нибудь другом формате, тот же doc, HTML, прочее, а потом просто конвертить в PDF, благо конвертеров разных куча.
спустя 25 минут [обр] Spectrum2(4/26)[досье]

Thirteensmay[досье] Вариант!
Посмотрю, как это можно сделать.
Но на первый взгляд у этого подхода есть ряд недостатков:
сложно реализовать,
низкая производительность,
отсутствие возможности тонкой оптимизации,
зависимость от большого количества модулей и возможно программ написанных не на Perl.
(все относительно конечно)

Спасибо. Буду искать какие модули тут могут помочь.
но все же хотелось бы работать с PDF непосредственно.

спустя 23 минуты [обр] Thirteensmay(0/157)[досье]
Да мне бы тоже хотелось ;) У адоба есть мегапакет который позволяет делать все что угодно напрямую, но он продается за приличные деньги. Если найдете нормальный вариант работы напрямую, отпишите здесь пожалуйста ;) Что касается конвертирования, незнаю как другие форматы, мне здесь в свое время советовали latex, говорят у него конвертер хороший, но если работать с майкрософтовским doc'ом то вовсе несложно получается, и среда разработки как говорится отличная, и VBA опять таки, тем более MS Office практически стандарт, но конечно смотря какой у Вас сервер. Впрочем не стоит зацикливаться на .doc Что касается производительности то в свое время тестировал: создание документа в Word через ActiveX, а потом его конвертирование, не помню уже чем, была под рукой какая то утилита, так вот, оно получалось быстрее чем напрямую через PDF::API2, так что не факт. Кстати, там помоему в 2007 ворде обещали нативное сохранение в PDF. А что касается зависимости от большого количества дополнительных модулей, так теоретически можно обойтись одним (возможно пакетом) ;) Вобщем если идея конвертирования Вас не пугает, то перспективы тут широкие...
спустя 13 часов [обр] Закиров Руслан(51/343)[досье]

В PDF есть так называемые PDF forms, то есть в adobe reader отрываешь файл и на странице есть поля для ввода, заполняешь бланк (шаблон, форму, как хотите так и называйте), а потом сохраняете вместе с данными или печатаете. Очень похоже на вашу задачу, осталость только найти API, который умеет с ними работать, и разобраться как их создавать.

Я не пользовался этим, но немного поискал и выглядит все не так плохо. У Adobe есть свой тулкит (перл модуль + бинарная библиотека) и есть пример. Так же есть что-то и в перл модулях, нпример PDF::Reuse::prField(). Так что можно покопать.

спустя 9 часов [обр] Spectrum2(4/26)[досье]

Как я понял, не любят PDF на CPAN из-за того, что это proprietory file format.

Thirteensmay[досье] С конвертированием из другого формата не стоит заморачиваться, лучше уж поверх text label'ы печатать.

Закиров Руслан[досье] Вот это интересно. Жаль, что не pure Perl. Нужно еще сайт Adobe покурить. Думал, что там ничего интересного нет.

Остается следующие варианты:

  1. Изменять значения текстовых полей (так-то работает, но с кириллицей не получается).
  2. Печатать поверх text label'ы.
спустя 49 минут [обр] Thirteensmay(0/157)[досье]
Proprietary только сама спецификация формата, а его использование совсем open, в т.ч. разработка читалок, писалок, конвертеров и пр. Как будете делать - Вам решать, я остановился на "поверх text label'ы печатать" ибо просто, да и в случае изменения шаблона вовсе не тяжко, ну потратите лишние 5..10 мин. - не смертельно. Opensource однако ;)
Powered by POEM™ Engine Copyright © 2002-2005