gpt4 book ai didi

java - 如何使用 iText 旋转 PDF 中的水印(文本)?

转载 作者:行者123 更新时间:2023-11-30 10:10:38 24 4
gpt4 key购买 nike

我正在使用 iText 在 PDF 文件上加盖水印(文本:“SuperEasy You Done”),如 How to watermark PDFs using text or images? 中所述。 (TransparentWatermark2.java)。 See project source code on GitHub .

现在我得到的 PDF 示例是 this one (文档的其余部分从略):

enter image description here

如您所见,水印居中且水平。

我想在页面中间保持居中,但是将它旋转“45”度,因此它会逆时针旋转。像这样:

enter image description here

This is the code用于在给定的字节数组上标记水印(pdf 文档现在仅供我使用)

/**
* Returns the same document with the watermark stamped on it.
* @param documentBytes Byte array of the pdf which is going to be returned with the watermark
* @return byte[] with the same byte array provided but now with the watermark stamped on it.
* @throws IOException If any IO exception occurs while adding the watermark
* @throws DocumentException If any DocumentException exception occurs while adding the watermark
*/
private byte[] getDocumentWithWaterMark(byte[] documentBytes) throws IOException, DocumentException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// pdf
PdfReader reader = new PdfReader(documentBytes);
int n = reader.getNumberOfPages();
PdfStamper stamper = new PdfStamper(reader, outputStream);
// text watermark
Font font = new Font(Font.HELVETICA, 60);
Phrase phrase = new Phrase("SuperEasy You Done", font);
// transparency
PdfGState gs1 = new PdfGState();
gs1.setFillOpacity(0.06f);
// properties
PdfContentByte over;
Rectangle pagesize;
float x, y;
// loop over every page (in case more than one page)
for (int i = 1; i <= n; i++) {
pagesize = reader.getPageSizeWithRotation(i);
x = (pagesize.getLeft() + pagesize.getRight()) / 2;
y = (pagesize.getTop() + pagesize.getBottom()) / 2;
over = stamper.getOverContent(i);
over.saveState();
over.setGState(gs1);
// add text
ColumnText.showTextAligned(over, Element.ALIGN_CENTER, phrase, x, y, 0);
over.restoreState();
}
stamper.close();
reader.close();
return outputStream.toByteArray();
}

PS:我读过这个,但没有帮助:

最佳答案

您只需要在this line 中的第6 个参数指定所需的旋转角度即可。 :

ColumnText.showTextAligned(over, Element.ALIGN_CENTER, phrase, x, y, 0); // rotate 0 grades in this case

如果指定值为正 (> 0) 则旋转为逆时针,否则 (< 0) 则旋转为顺时针。

在这种特殊情况下,要将水印逆时针旋转 45 度,您只需编写前一行 like this :

ColumnText.showTextAligned(over, Element.ALIGN_CENTER, phrase, x, y, 45f); // 45f means rotate the watermark 45 degrees anticlockwise

通过应用相同的原理,我们可以实现任何方向的任何旋转。


整个文档在这里:https://itextpdf.com/en/resources/api-documentationversion 5 的链接下和 version 7 .

关于java - 如何使用 iText 旋转 PDF 中的水印(文本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52748248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com