Взгляните на пример StampHeader1
. Я адаптировал ваш код, введя ColumnText.showTextAligned()
и используя Phrase
для простоты (возможно, вы также можете изменить эту часть своего кода):
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Phrase header = new Phrase("Copy", new Font(FontFamily.HELVETICA, 14));
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
float x = reader.getPageSize(i).getWidth() / 2;
float y = reader.getPageSize(i).getTop(20);
ColumnText.showTextAligned(
stamper.getOverContent(i), Element.ALIGN_CENTER,
header, x, y, 0);
}
stamper.close();
reader.close();
}
Как вы узнали, это код предполагает, что никакого вращения не было определено.
Теперь рассмотрим пример StampHeader2
. Я использую ваш «неправильный» файл, и я добавил одну дополнительную строку:
stamper.setRotateContents(false);
Говоря мастеру, чтобы не вращать содержимое, которое я добавляю, я добавляю контент, используя как если бы страница не была повернута. Посмотрите на результат: stamped_header2.pdf . Мы добавили «Копировать» вверху страницы, но по мере поворота страницы мы видим, что слово отображается сбоку. Слово вращается, потому что страница повернута.
Возможно, это то, что вы хотите, может быть, это не так. Если это не так, посмотрите StampHeader3
, в котором я вычисляю x
и y
по-разному, основываясь на вращении страницы:
if (reader.getPageRotation(i) % 180 == 0) {
x = reader.getPageSize(i).getWidth() / 2;
y = reader.getPageSize(i).getTop(20);
}
else {
x = reader.getPageSize(i).getHeight() / 2;
y = reader.getPageSize(i).getRight(20);
}
Теперь слово «Копировать» появляется на том, что воспринимается как «верх страницы» (но на самом деле это может быть сторона страницы): stamped_header3.pdf