Я использую iText для печати водяного знака (текст: «SuperEasy You Done») на файлах PDF, как описано в Как сделать водяные знаки PDF-файлами с помощью текста или изображений? ( TransparentWatermark2.java ). См. Исходный код проекта на GitHub .
Теперь пример PDF-файла, который я получаю, этот (остальная часть документа опущена):
![enter image description here](https://i.stack.imgur.com/Lny9z.png)
Как видите, водяной знак расположен по центру и горизонтали.
Я бы хотел держать его по центру в середине страницы, но поверните ее на 45 градусов , чтобы она вращалась против часовой стрелки.Примерно так:
![enter image description here](https://i.stack.imgur.com/Dq4mL.png)
Это код для отметки водяного знака на заданном байтовом массиве (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: я читал это, но это не помогло: