Проект, над которым я сейчас работаю, требует больших тиражей документов, которые будут разосланы клиентам.Например, один сеанс печати может содержать более 1000 писем, каждое из которых отправляется разному клиенту.
Для создания этого сеанса печати внешний сервис (т.е. не использующий PDFBox) сначала генерирует каждое из этих писем.как отдельный файл PDF.Затем мой код загружает все эти файлы PDF, объединяет их все вместе с PDFBox (чтобы их можно было распечатать как одно задание в типографии), и я добавляю «баннерную страницу» спереди (также с PDFBox), котораяговорит типографии, что делать с буквами.
Все напечатано с двух сторон.Но поскольку каждое письмо отправляется разному клиенту, у меня не может быть двух писем, напечатанных вплотную на одном листе бумаги.Это означает, что к любому письму с нечетным числом страниц должна быть добавлена пустая страница.Непосредственно перед печатью объединенный PDF-документ для очень маленького тиража, состоящего только из двух букв, может выглядеть примерно так:
Banner Page
Blank
Letter 1
Blank
Letter 2
Blank
Но тут возникает моя проблема. Я добавил пустые страницыс этим кодом:
PDFMergerUtility docMerger = new PDFMergerUtility();
for (PDDocument currDoc : documents) {
// Add blank page to document if odd number
if (currDoc.getNumberOfPages() % 2 != 0) {
currDoc.addPage(new PDPage());
}
// Merge into single document
docMerger.appendDocument(mergedDoc, currDoc);
// Close currDoc
currDoc.close();
}
Кажется, что это работает последовательно для баннерных страниц, но для некоторых типов букв, это облажается.Если я открываю полученный PDF-файл, он выглядит нормально, но когда я печатаю, я получаю дополнительный чистый лист бумаги между буквами.
Поэтому, пока я вижу это в Acrobat Reader (или даже в средстве просмотра PDFBox):
Sheet 1: Banner Page
Sheet 2: Letter 1
Sheet 3: Letter 2
Вывод на печать выглядит следующим образом:
Sheet 1: Banner Page
Sheet 2: Letter 1
Sheet 3: BLANK!
Sheet 4: Letter 2
Sheet 5: BLANK!
Между тем, если я возьму этот код new PDPage()
, я получу следующий результат, как в Acrobat, так и в распечатанном виде:
Sheet 1: Banner Page
Sheet 2: Letter 1 (front) AND Letter 2 (back)
Я пытался отладить через PDDocument.silentPrint(PrinterJob)
, но все становится действительно рискованным, когда он глубоко проникает в структуру PDF, и ничто не выскакивает как неуместное.Есть идеи, что может происходить?