无法使用仅使用skia生成的pdf在Java lanaguage上使用使用itext7的邮票(显示倒置邮票)

时间:2018-07-05 05:46:49

标签: java pdf itext7 skia stamp

我无法使用Java语言使用itext7在仅skia生成的pdf上盖章(skia是google使用的pdf库;如果有人使用过google docs->点击Print->另存为Pdf)。盖章不正确;如果我在pdf页面的左上角盖章,则它将在左下角盖章并显示(反镜)图像和(反镜)文本。对于所有其他PDF,它会提供正确的标记。 Skia生成的pdf文件似乎缺少元数据。

1 个答案:

答案 0 :(得分:0)

由于您既没有共享任何代码,也没有共享任何文档,所以我从Google文档创建了PDF文档,并使用为回答Itextsharp 7 - Scaled and Centered Image as watermark问题而编写的代码在中间添加了水印。

结果如下:

enter image description here

正如您在文档属性中看到的那样,原始文档是使用Skia / PDF m67创建的;使用iText®7.1.3进行了修改。

您需要在左上角添加水印,因此我修改了如下代码:

public void createPdf(String src, String dest) throws IOException {
    PdfDocument pdfDoc = new PdfDocument(
            new PdfReader(src), new PdfWriter(dest));
    Document document = new Document(pdfDoc);
    PdfCanvas over;
    PdfExtGState gs1 = new PdfExtGState();
    gs1.setFillOpacity(0.5f);
    int n = pdfDoc.getNumberOfPages();
    Rectangle pagesize;
    ImageData img = ImageDataFactory.create(IMG);
    float iW = img.getWidth();
    float iH = img.getHeight();
    float x, y;

    for (int i = 1; i <= n; i++)
    {
        PdfPage pdfPage = pdfDoc.getPage(i);
        pagesize = pdfPage.getPageSize();

        x = pagesize.getLeft();
        y = pagesize.getTop() - iH;

        over = new PdfCanvas(pdfDoc.getPage(i));

        over.saveState();
        over.setExtGState(gs1);

        over.addImage(img, iW, 0, 0, iH, x, y);

        over.restoreState();
    }
    document.close();
    pdfDoc.close();
}

结果如下:

enter image description here

图像未镜像;它在页面的左上角。简而言之:用Skia / PDF m67创建的PDF似乎没有任何问题。