用程序自动替换PDF文件中的图像

本文提供了一段使用Java和C#代码在PDF文件中替换图片的示例。通过调用iText及iTextSharp库,可以在指定位置替换PDF文件中的图像。示例展示了如何替换第一页中的第一张图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要使用Java代码,应该调用iText库。
要使用C#代码,应该调用iTextSharp库。


Here's the code to replace images in PDFs, in Java and C#. It will replace the first image in the first page.

Java代码

PdfReader pdf = new PdfReader("in.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileOutputStream("c:\\out.pdf"));
PdfWriter writer = stp.getWriter();
Image img = Image.getInstance("image.png");
PdfDictionary pg = pdf.getPageN(1);
PdfDictionary res =
    (PdfDictionary)PdfReader.getPdfObject(pg.get(PdfName.RESOURCES));
PdfDictionary xobj =
    (PdfDictionary)PdfReader.getPdfObject(res.get(PdfName.XOBJECT));
if (xobj != null) {
    for (Iterator it = xobj.getKeys().iterator(); it.hasNext(); ) {
        PdfObject obj = xobj.get((PdfName)it.next());
        if (obj.isIndirect()) {
            PdfDictionary tg = (PdfDictionary)PdfReader.getPdfObject(obj);
            PdfName type =
                (PdfName)PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE));
            if (PdfName.IMAGE.equals(type)) {
                PdfReader.killIndirect(obj);
                Image maskImage = img.getImageMask();
                if (maskImage != null)
                    writer.addDirectImageSimple(maskImage);
                writer.addDirectImageSimple(img, (PRIndirectReference)obj);
                break;
            }
        }
    }
}
stp.close();




C#代码:
InBlock.gifPdfReader pdf = new PdfReader("in.pdf");
InBlock.gifPdfStamper stp = new PdfStamper(pdf, new FileStream("out.pdf",
InBlock.gifFileMode.Create));
InBlock.gifPdfWriter writer = stp.Writer;
InBlock.gifImage img = Image.GetInstance("image.png");
InBlock.gifPdfDictionary pg = pdf.GetPageN(1);
InBlock.gifPdfDictionary res =
InBlock.gif    (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
InBlock.gifPdfDictionary xobj =
InBlock.gif    (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
InBlock.gifif (xobj != null) {
InBlock.gif    foreach (PdfName name in xobj.Keys) {
InBlock.gif        PdfObject obj = xobj.Get(name);
InBlock.gif        if (obj.IsIndirect()) {
InBlock.gif            PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
InBlock.gif            PdfName type =
InBlock.gif                (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
InBlock.gif            if (PdfName.IMAGE.Equals(type)) {
InBlock.gif            PdfReader.KillIndirect(obj);
InBlock.gif            Image maskImage = img.ImageMask;
InBlock.gif            if (maskImage != null)
InBlock.gif                writer.AddDirectImageSimple(maskImage);
InBlock.gif                writer.AddDirectImageSimple(img, PRIndirectReference)obj);
InBlock.gif                break;
InBlock.gif            }
InBlock.gif        }
InBlock.gif    }
InBlock.gif}
InBlock.gifstp.Close();









本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/149127,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值