为有中文需求的客户提供多渠道中文技术支持.

Thu Apr 09, 2026 8:10 am

替换图片后,图片层次会改变,导致遮挡内容,求助

lxl12315
 
Posts: 10
Joined: Mon Jul 01, 2024 11:43 pm

Thu Apr 09, 2026 9:04 am

你好,

感谢你的咨询,
你目前是使用我们那个版本进行测试的呢?我初步使用当前最新Spire.PDF Pack(Hot Fix) Edit Download版本: 12.4.0和下面代码进行了测试是没有这个现象,
Code: Select all
            PdfDocument doc = new PdfDocument();

            //Load file from disk.
            doc.LoadFromFile(@"test.pdf");

            //Get the first page.
            PdfPageBase page = doc.Pages[0];

            //Create PdfImageHelper object to get Image from page
            PdfImageHelper helper = new PdfImageHelper();
            Spire.Pdf.Utilities.PdfImageInfo[] images = helper.GetImagesInfo(page);

            //Replace the first image on the page.
            helper.ReplaceImage(images[0], PdfImage.FromFile(@"12.png"));

            String result = "ReplaceImage_out2.pdf";

            //Save the document
            doc.SaveToFile(result);

out.png

如果你使用的版本和代码不一致,建议你更新版本再测试下,期待你的进一步反馈。

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1537
Joined: Wed Apr 25, 2018 3:20 am

Thu Apr 09, 2026 11:05 am

感谢您的回复,我发现了客户的原文件,这张图是透明的,本身就是最顶层,所以替换成其他图后就会遮挡了,请问有函数或者属性将图片置于最底层吗?

lxl12315
 
Posts: 10
Joined: Mon Jul 01, 2024 11:43 pm

Fri Apr 10, 2026 6:33 am

Hello,

你好,
感谢反馈,你可以参考下面方式针对新图片设置透明度再绘制。PDF 内容是绘制在画布的,后绘制的内容就是在上层,当前这种方式可以达到不遮盖的效果。
Code: Select all
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile(@"test2.pdf");
            PdfPageBase page = doc.Pages[0];
            PdfImageHelper helper = new PdfImageHelper();
            Spire.Pdf.Utilities.PdfImageInfo[] images = helper.GetImagesInfo(page);
            //删除原有图片
            RectangleF rf= images[0].Bounds;
            helper.DeleteImage(images[0]);
            PdfImage image = PdfImage.FromFile(@"12.png");
            //设置透明度绘制新图片
            page.Canvas.SetTransparency(0.8f);
            page.Canvas.DrawImage(image, rf);
            String result = @"out.pdf";
            doc.SaveToFile(result);

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1537
Joined: Wed Apr 25, 2018 3:20 am

Fri Apr 10, 2026 9:47 am

好的, 谢谢,不过透明度是全图调整的,置于底层确实很难实现

lxl12315
 
Posts: 10
Joined: Mon Jul 01, 2024 11:43 pm

Mon Apr 13, 2026 3:49 am

你好,

感谢你的反馈,你如果不设置替换图片透明度,可以使用下面方式将原文档内容CreateTemplate创建模板重新绘制一次。
Code: Select all
            //加载原 PDF
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile(@"test2.pdf");
            PdfPageBase page = doc.Pages[0];

            //获取并删除原有图片
            PdfImageHelper helper = new PdfImageHelper();
            PdfImageInfo[] images = helper.GetImagesInfo(page);
            RectangleF imageBounds = images[0].Bounds;         
            helper.DeleteImage(images[0]);                     

            //创建新 PDF,添加与原页面相同大小的页面
            PdfDocument newDoc = new PdfDocument();
            PdfPageBase newPage = newDoc.Pages.Add(page.Size, new PdfMargins(0));

            //在新页面的底层绘制新图片
            PdfImage newImage = PdfImage.FromFile(@"IMG.png");
            newPage.Canvas.DrawImage(newImage, imageBounds);

            // 将原页面作为模板绘制到新页面的上层
            PdfTemplate template = page.CreateTemplate();
            newPage.Canvas.DrawTemplate(template, new PointF(0,0));

            //保存并关闭文档
            newDoc.SaveToFile(@"OUT.PDF");
            newDoc.Close();
            doc.Close();

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1537
Joined: Wed Apr 25, 2018 3:20 am

Return to 中文技术支持