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

Wed Apr 24, 2024 7:16 am

您好我在使用Spire.Doc for .NET C#的page.ExtractImages()的方法,提取图片,速度十分缓慢,有没有更好的解决方法

15527851109
 
Posts: 2
Joined: Wed Apr 24, 2024 7:12 am

Wed Apr 24, 2024 7:37 am

您好,

感谢您的留言。
您是否使用最新版本Spire.Pdf for Net 10.4.7测试,如果没有,请用最新版本测试看看。
另外,提取图片还可以用PdfImageHelper类来实现,我把相关代码放在下面供您参考:
// 创建一个PdfDocument对象
Code: Select all
            PdfDocument doc = new PdfDocument();
            // 从指定路径加载PDF文件
            doc.LoadFromFile(@"../../data/input.pdf");

            // 初始化计数器变量i为1
            int i = 1;

            // 遍历PDF文档的每一页
            foreach (PdfPageBase page in doc.Pages)
            {
                // 创建一个PdfImageHelper对象
                PdfImageHelper helper = new PdfImageHelper();

                // 获取当前页面的图片信息
                PdfImageInfo[] imagesInfo = helper.GetImagesInfo(page);
                // 遍历当前页面的每个图片信息
                foreach (PdfImageInfo imageInfo in imagesInfo)
                {
                    // 将图片保存到指定路径,文件名为"图片"加上计数器i的值,格式为PNG
                    imageInfo.Image.Save(@"../../output/" + "图片" + i + ".png", System.Drawing.Imaging.ImageFormat.Png);

                    // 计数器i自增1
                    i++;
                }
            }


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Wed Apr 24, 2024 7:55 am

我用最新的版本也是了一下速度还是比较慢,调试都调试不下去,下面是我的代码,是压缩pdf的时候使用的,我刚刚换成了imageHelper.GetImagesInfo(),速度也是比较吗
Spire.Pdf.PdfDocument pdf = new Spire.Pdf.PdfDocument();

pdf.LoadFromFile(path);
//获取第一页
PdfPageBase page = pdf.Pages[0];
//获取第一页的图片信息
//创建一个PdfImageHelper的对象
PdfImageHelper imageHelper = new PdfImageHelper();
PdfImageInfo[] imageInfo = imageHelper.GetImagesInfo(page);
//提取页面中的图片
//System.Drawing.Image[] images = page1.ExtractImages();
if (imageInfo != null && imageInfo.Length > 0)
{
var j = 0;
foreach (var item in imageInfo)
{
System.Drawing.Image image = item.Image;
Spire.Pdf.Graphics.PdfBitmap bp = new Spire.Pdf.Graphics.PdfBitmap(image);
//降低图片的质量
bp.Quality = 60;
//用压缩后的图片替换原文档中的图片
page.ReplaceImage(j, bp);
j++;
}

}

15527851109
 
Posts: 2
Joined: Wed Apr 24, 2024 7:12 am

Wed Apr 24, 2024 8:12 am

您好,

我看您代码中不仅在提取图片,完整场景是提取图片,然后降低图片质量,并把替换图片。操作图片本身就是很消耗内存与耗时,并且这几个环节还都是操作图片。一旦文档中图片较多,很容易程序卡住。
此外,对于压缩pdf中图片质量,你可以参考下面的帮助文档:

https://www.e-iceblue.cn/pictures/compr ... -in-c.html

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Return to 中文技术支持