We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

Aspose.PDF for java 向指定位置插入图片遇到的问题

您好,我正在使用Aspose.PDF for java 20.10 向PDF文件的指定位置插入图片,但是我遇到了一些问题。

首先,这个PDF文件是我用Aspose.cell for java 20.6 转换得到的,下面是Excel转PDF的代码。

byte[] pdfByte;
InputStream is = new ByteArrayInputStream(excelByte);
Workbook wb = new Workbook(is);
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);
pdfSaveOptions.setOnePagePerSheet(true);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
wb.save(outputStream, pdfSaveOptions);
pdfByte = outputStream.toByteArray();
return pdfByte;

得到PDF文件之后,我使用了下面的代码将图片插入到了指定的位置:

    @Test
    public void insertImage() throws IOException {
        // Open a document ,test_bak.pdf就是我上面转换得到的PDF
        Document pdfDocument1 = new Document("D://test_bak.pdf");
        // Set coordinates
        int width = 100;
        int height = 100;
        int xIndent = 129;
        int yIndent = 56;
        // Get the page you want to add the image to
        Page page = pdfDocument1.getPages().get_Item(1);
        // Load image into stream
        java.io.FileInputStream imageStream = new java.io.FileInputStream(new java.io.File("D://签章.png"));
        // Add an image to the Images collection of the page resources
        page.getResources().getImages().add(imageStream);
        // Using the GSave operator: this operator saves current graphics state
        page.getContents().add(new GSave());
        // Create Rectangle and Matrix objects
//        Rectangle rectangle = new Rectangle(lowerLeftX, lowerLeftY, upperRightX, upperRightY);
        Matrix matrix = new Matrix(new double[] {width, 0, 0, height, xIndent, yIndent});
        // Using ConcatenateMatrix (concatenate matrix) operator: defines how
        // image must be placed

        page.getContents().add(new ConcatenateMatrix(matrix));
        XImage ximage = page.getResources().getImages().get_Item(page.getResources().getImages().size());
        // Using Do operator: this operator draws image
        page.getContents().add(new Do(ximage.getName()));
        // Using GRestore operator: this operator restores graphics state
        page.getContents().add(new GRestore());
        // Save the new PDF
        pdfDocument1.save("D://guanfang.pdf");
        // Close image stream
        imageStream.close();
    }

但是当我插入完成,查看本地生成的PDF后发现了一些问题,插入的图片上下翻转了,而且Y轴的坐标也不正确。另外我尝试了通过Office软件打开Excel时另存为PDF文件,此时用这个PDF文件插入图片的表现是正常的。
附件为效果图。image.pdf (116.2 KB)
下面的附件为要插入的图片和原PDF文件
签章.jpg (5.7 KB)
temp1.pdf (62.3 KB)

@jjsoft

您可以通过指定位置使用以下代码段在PDF文档中插入图像。但是,如果您仍然遇到定位问题。请共享使用Microsoft Excel生成的PDF文件和输出正确位置的PDF文件。我们将进一步为您提供帮助。

Document doc = new Document(dataDir + "temp1.pdf");
System.out.println(doc.getPages().get_Item(1).getRotate());
ImageStamp stamp = new ImageStamp(dataDir + "签章.jpg");
stamp.setXIndent(129);
stamp.setYIndent(56);
stamp.setBackground(false);
stamp.setHeight(100);
stamp.setWidth(100);
stamp.setOpacity(0.5);
for(Page page:doc.getPages()){
 page.addStamp(stamp);
}
doc.save(dataDir + "stamped.pdf");

stamped.pdf (82.9 KB)

经过测试,它成功的解决了上面的问题。感谢您提供的支持。

@jjsoft

很高兴知道您的问题已解决。如果您需要进一步的帮助,请告知我们。