Предупреждение: я очень мало знаю о CF, но немного о iText.
Ответ Генри сработает, но он может быть немного более эффективным.
Вы хотите PdfStamper
.Изменение размера страницы не поддерживается напрямую на более высоком уровне, поэтому вам придется использовать низкоуровневые вызовы объектов pdf.Например:
final static float POINTS_PER_INCH = 72f;
final static float INCHES_TO_ADD = 3f;
PdfReader reader = new PdfReader(pdfPath); // throws
PdfStamer stamper = new PdfStamper(reader, outputStream); // throws
for (int curPageNum = 1; curPageNum <= reader.getNumberOfPages(); ++curPageNum) {
PdfDictionary pageDict = reader.getPageN(curPageNum);
// pdf rects are stored as [llx, lly, urx, ury].
// X increases to the right, Y increases upward.
// Note that the origin doesn't have to be 0,0.
PdfArray mediaBox = pageDict.getAsArray(PdfName.MEDIABOX);
float curBottom = mediaBox.getAsNumber(1).floatValue();
curBottom -= INCHES_TO_ADD * POINTS_PER_INCH;
mediaBox.set(1, new PdfNumber(curBottom));
}
stamper.close(); // throws
В дополнение к мультимедийному блоку вам также может понадобиться изменить CROPBOX, используя ту же технику «получить прямоугольник, отрегулировать дно».Обратите внимание, что в вашем PDF-файле могут существовать несколько других блоков страниц, которые могут или не должны быть изменены ... "art box", "trim box", "bleed box".Возможно, я тоже забыл одну или две.
Это почти наверняка приведет к отрицательному значению вашей нижней координаты Y [s].Если ваш PDF обрабатывается программным обеспечением «Меньше, чем хорошо», это может быть проблемой.Это было бы ошибкой в их программном обеспечении, а не в этом процессе.Однако, если вам нужно обойти проблему, подобную этой, код Генри сделает свое дело, создав страницы с 0,0 в левом нижнем углу.Adobe не бросит глаз, как и сам iText, хотя программное обеспечение, написанное с использованием iText, может быть не слишком умным.