看一下StampHeader1示例.我修改了您的代码,引入了ColumnText.showTextAligned()并为了简化起见使用了短语(也许您也可以更改代码的那一部分):
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