Подтвердить что ты не робот

Как слить почту поверх PDF?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Для решения no-mess, no-fuss, используйте 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));

Ответ 7

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

Ответ 8

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

Ответ 9

Отказ от ответственности. Я автор этого инструмента.

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

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

Ответ 10

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

PDF-слияния относительно легко сделать в python и pdftk. Fdfgen (pip install fdfgen) - это библиотека python, которая создаст fdf из массива python, поэтому вы можете сохранить сетку Excel в csv, убедившись, что заголовки csv соответствуют имени поля формы pdf, которое вы хотите заполнить этот столбец, и сделать что-то вроде

import csv
import subprocess

from fdfgen import forge_fdf

PDF_FORM = 'path/to/form.pdf'
CSV_DATA = 'path/to/data.csv'

infile = open(CSV_DATA, 'rb')
reader = csv.DictReader(infile)
rows = [row for row in reader]
infile.close()

for row in rows:
    # Create fdf
    filename = row['filename'] # Construct filename
    fdf_data = [(k,v) for k, v in row.items()]
    fdf = forge_fdf(fdf_data_strings=fdf_data)
    fdf_file = open(filename+'.fdf', 'wb')
    fdf_file.write(fdf)
    fdf_file.close()

    # Use PDFTK to create filled, flattened, pdf file
    cmds = ['pdftk', PDF_FORM, 'fill_form', filename+'.fdf',
            'output', filename+'.pdf', 'flatten', 'dont_ask']
    process = subprocess.Popen(cmds, stdout=subprocess.PIPE)
    stdout, stderr = process.communicate()
    returncode = process.poll()
    os.remove(filename+'.fdf')

Я столкнулся с этой проблемой достаточно, чтобы написать собственное бесплатное решение, PdfZero. PdfZero имеет функцию слияния по почте для объединения электронных таблиц с PDF-формами. Вам все еще нужно будет создать форму PDF, но вы можете загрузить форму и csv в pdfzero, выбрать поля формы, которые вы хотите заполнить какими столбцами, создать соглашение об именах для каждого заполненного pdf, используя данные CSV, если это необходимо, и выполнить пакетную генерацию. заполненные PDF.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я написал PdfZero