如何使用 java 在 IText7 中将图像置于前面(text/image)或将图像发送到后面((text/image))?

How to bring image to the front(of the text/image) or send the image to the back((of the text/image)) in IText7 using java?

如何使用 [=25] 在 IText7(7.0.8) 中将图像置于前面(text/image)或将图像发送到后面((text/image)) =]?

import java.io.FileNotFoundException;
import java.io.IOException;

import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfResources;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;

public class AddImageUnderlayToPDF {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader("c:\Development\test.pdf"),
                new PdfWriter("c:\Development\test_result.pdf"));
        ImageData img = ImageDataFactory.create("c:\Development\kishore signature.png");
        PdfCanvas under = new PdfCanvas(pdfDoc.getFirstPage().newContentStreamBefore(), new PdfResources(), pdfDoc);
        under.addImage(img, 100, 0f, 0f, 100, 100, 300, false);
        under.saveState();
        pdfDoc.close();
    }
}

..但它不起作用,它不显示 pdf 中的图像。我在打开 pdf 时也注意到一个错误:

类似的方法适用于文本但不适用于图像。感谢任何帮助。

错误与您的错误相同:您使用了一次性资源对象,因此结果中缺少图像资源。

您可以使用实际页面资源来解决此问题。只需替换

PdfCanvas under = new PdfCanvas(pdfDoc.getFirstPage().newContentStreamBefore(), new PdfResources(), pdfDoc);

来自

PdfCanvas under = new PdfCanvas(pdfDoc.getFirstPage().newContentStreamBefore(), pdfDoc.getFirstPage().getResources(), pdfDoc);

此外,删除

under.saveState();

line as saveState 仅当您稍后使用匹配的 restoreState.

时才有意义