Как сделать слияние почты поверх PDF? - PullRequest
12 голосов
/ 10 декабря 2008

Я часто получаю PDF от нашего дизайнера (встроенного в Adobe InDesign), который должен быть разослан тысячам людей.

У меня есть список со всеми людьми, и слияние по почте легко сделать в OpenOffice.org. Однако OpenOffice.org не поддерживает расширенный PDF. Я просто хочу вывести текст на каждую страницу и распечатать его.

Вот как я это делаю сейчас: распечатайте 6.000 копий PDF, затем снова поместите их в принтер и просто распечатайте имя, адрес и другую информацию поверх него. Но это дорого.

К сожалению, я не могу сделать PDF-файл с изображением и использовать его в OpenOffice.org, потому что он останавливает работу компьютера. Отправка этой работы на принтер также занимает очень много времени.

Итак, есть ли простой способ сделать это слияние (желательно на Python) без оплаты сторонних закрытых решений?

Ответы [ 9 ]

7 голосов
/ 28 сентября 2009

Теперь я сделал аккаунт. Я исправил это, используя оригинальный pdftk.

В своем квесте я полностью пропускаю функции "фон" и "наложение". Мое решение было таким:

pdftk names.pdf background boat_background.pdf output out.pdf

Создание names.pdf вы можете легко сделать с помощью Python reportlab или аналогичных сценариев создания PDF. Для этого лучше всего использовать код: создание 6k-страниц в LibreOffice / OpenOffice заняло несколько часов, а в Python - всего несколько секунд.

2 голосов
/ 06 июля 2012

Есть два гораздо более простых и дешевых решения.

Во-первых, вы можете выполнить слияние писем непосредственно в InDesign, используя DataMerge. Это утилита, добавленная в InDesign еще в CS. Вы экспортируете или сохраняете свои имена в формате CSV. Импортируйте данные в шаблон InDesign, а затем вставьте свое имя, адрес и такие поля в макет. Нажмите Go. Он создаст новый документ со всеми готовыми буквами, или вы можете перейти прямо к принтеру.

ИЛИ, вы можете экспортировать свои данные в файл XML и создать динамический макет с использованием заполнителей XML в InDesign.

В книге «Руководство дизайнера по Adobe InDesign и XML» вы узнаете, как это сделать, или посмотрите видео Lynda.com о динамических рабочих процессах с InDesign и XML.

Очень легко сделать.

Если вы хотите создать отдельные файлы PDF для слияния, вы можете запустить один длинный PDF со всеми именами в одном файле, а затем выполнить извлечение для разделения файлов PDF в самом Acrobat Pro.

2 голосов
/ 10 декабря 2008

Вероятно, вы можете посмотреть библиотеку PDF, например iText . Если у вас есть знания в области программирования и немного времени, вы можете написать код, который добавляет контактную информацию в PDF-файлы

1 голос
/ 18 декабря 2011

Как насчет использования программы с переменными данными, такой как - XMPie для Adobe Indesign. Это плагин, который должен ссылаться на ваш список людей (хотя это может быть список в Excel).

1 голос
/ 10 декабря 2008

Для решения, не требующего беспорядка, используйте iText, чтобы просто добавить текст в PDF. Например, вы можете сделать следующее, чтобы добавить текст в документ PDF после загрузки:

PdfContentByte cb= ...;
cb.BeginText();
cb.SetFontAndSize(font, fontSize);
float x = ...;
float y = ...;
cb.SetTextMatrix(x, y);
cb.ShowText(fieldValue);
cb.EndText();    

С этого момента сохраните его как другой файл и распечатайте.

Однако я обнаружил, что поля форм - это способ создания документов PDF из шаблонов.

Если у вас есть шаблон с полями формы (добавленный с помощью Adobe Acrobat), у вас есть один из двух вариантов:

  • Создайте файл FDF, который по сути представляет собой список значений для полей в форме. FDF - это простой текстовый документ, который ссылается на исходный документ, поэтому при открытии PDF-документа документ загружается со значениями полей, предоставленными FDF.
  • Либо загрузите шаблон с помощью библиотеки, такой как iText / iTextSharp, заполните поля формы вручную и сохраните в виде отдельного файла PDF.

Пример файла FDF выглядит следующим образом (украдено у Planet PDF ):

%FDF-1.2
%âãÏÓ
1 0 obj
<<<
 /F(Example PDF Form.pdf)
 /Fields[
  <<
  /T(myTextField)
  /V(myTextField default value)
  >>
  ]
 >>
>> endobj trailer
<>
%%EOF

Из-за простого формата и небольшого размера FDF этот подход является предпочтительным, и этот подход должен хорошо работать на любом языке.

Что касается программного заполнения полей, вы можете использовать iText следующим образом:

PdfAcroForm acroForm = writer.AcroForm;
acroForm.Put(new PdfName(fieldInfo.Name), new PdfString(fieldInfo.Value));
1 голос
/ 10 декабря 2008

Вероятно, лучшим способом было бы создать другой PDF-файл с отсутствующим текстом и наложить один PDF-файл поверх другого. Быстрый Google нашел эту ссылку, показывающую, как это сделать в Acrobat, и я уверен, что есть и другие методы.

http://forums.macrumors.com/showthread.php?t=508226

1 голос
/ 10 декабря 2008

Если вы не можете получить шаблон в другом формате, чем PDF, простое специальное решение будет

  • преобразовать PDF в изображение
  • поместите изображение в фон вашего документа (OpenOffice.org)
  • расположение полей слияния в верхней части изображения
  • сделать слияние почты и распечатать
0 голосов
/ 25 января 2017

Отказ от ответственности : я являюсь автором этого инструмента.

Я сталкивался с этой проблемой достаточно много раз, чтобы создать для нее бесплатный онлайн-инструмент: https://pdfbatchfill.com/

Он принимает форму PDF в качестве шаблона и использует ее вместе с данными формы CSV для создания одного PDF или отдельных PDF-файлов в ZIP-файле.

0 голосов
/ 18 мая 2015

Вы можете использовать функцию слияния данных InDesign или сделать то, что вы делали, распечатав часть работы, а затем распечатать слияние почты поверх этого с помощью Word или Open Office. Но также обратите внимание на то, чтобы найти компанию, которая может заниматься офсетной печатью переменных данных или динамической публикацией. Может быть немного дороже, но может сэкономить пакет, когда дело доходит до времени, тестирования, даже упаковки и рассылки.

...