【发布时间】:2020-01-22 21:11:18
【问题描述】:
使用 iText 7.1.9 java 版本,我试图在固定/绝对位置将图像添加到 PDF,如果 PDF 不是横向的,那么我将其旋转 90 度,但是,一旦页面旋转原点点(是左下角)也会旋转(现在在左上角并旋转 90 度),所以当我插入图像时,它最终会旋转并使用错误的原点。请参阅下面链接的两个 PDF 示例,了解正在发生的事情。
页面旋转后,有什么方法可以将页面原点更改为左下角?有没有比使用PdfDocument.getPage(p).setRotation 更好的方法来旋转页面?
我是否应该简单地旋转图像并做一些数学运算来计算出任何其他元素的新位置?我尝试使用imageData.setRotation(90) 旋转图像,但它似乎什么也没做。
以下是使用此问题底部所附 PDF 的输入:
//String pdfPath = "before_expected.pdf";
//String pdfDest = "after_expected.pdf";
//Or
String pdfPath = "before_unexpected.pdf";
String pdfDest = "after_unexpected.pdf";
以下是我旋转页面和添加图片的代码:
//Open existing PDF
FileInputStream inputStream = new FileInputStream(pdfPath);
PdfReader reader = new PdfReader(inputStream).setUnethicalReading(true);
//Create new PDF
FileOutputStream outputStream = new FileOutputStream(pdfDest);
PdfWriter writer = new PdfWriter(outputStream);
PdfDocument pdfDocument = new PdfDocument(reader, writer);
//Load sample image
ImageData imageData = ImageDataFactory.create("C:/sample_image.png");
Image image = new Image(imageData);
//Get root element of PDF
Document document = new Document(pdfDocument);
//Get orientation
Rectangle pageSize = pdfDocument.getPage(1).getPageSize();
System.out.println("Original rotation " + pdfDocument.getPage(1).getRotation() + System.lineSeparator() + pageSize.toString());
//Rotate 90 if page is not landscape - placeholder
if (pageSize.getHeight() > pageSize.getWidth())
{
pdfDocument.getPage(1).setRotation(pdfDocument.getPage(1).getRotation() + 90);
}
//Find page size
Rectangle currentPageSize = pdfDocument.getPage(1).getPageSizeWithRotation();
//Locate image 40% across page and 20% up page
float absoluteXpos = currentPageSize.getWidth() * 0.4f;
float absoluteYpos = currentPageSize.getHeight() * 0.2f;
System.out.println("Image location from origin: " + absoluteXpos + ", "+absoluteYpos);
//Add image
image.setFixedPosition(absoluteXpos, absoluteYpos);
document.add(image);
//Removed code to close any tidy up
document.close();
第二个 PDF (before_unexpected.pdf) 的输出显示它已旋转,但如上所述,进一步旋转页面似乎对添加其他内容没有任何影响:
Original rotation 90
Rectangle: 842.0x1191.0
Image location from origin: 336.80002, 238.2
这是我用于测试的 PDF 文件:
前两个图像显示预期/期望的行为,后两个显示图像如何插入错误的位置(基于不正确的原点/旋转)。
Click here for the original file for the first pdf
Click here for the processed file for the first pdf
【问题讨论】: