PDF转图片流,再把图片插入到原有的PDF当中,PDF空间大了很多。

您好,感谢您的查看和帮助!

我在使用Aspose.Pdf中遇到了问题,我将input.pdf文件里面的全部文件转成图片流后,保存到当前pdf中发现他很大。

input原始文件大小只有:94KB
out输出文件大小:4.6MB
out.pdf (4.6 MB)

测试文件:inupt.pdf (93.1 KB)

下面是我的全部代码:

        //打开文档
        Aspose.Pdf.Document doc = new Aspose.Pdf.Document("input.pdf");

        //PDF每页转成图片
        for (int i = 1; i <= doc.Pages.Count; i++)
        {

            //PDF页面宽度
            float pageWidth = (float)doc.Pages[i].GetPageRect(false).Width;

            //PDF页面高度
            float pageHeight = (float)doc.Pages[i].GetPageRect(false).Height;

            //PDF拆分指定文件为图片   根据文件流返回照片流   拆分第一页为图片
            MemoryStream images = PdfToJpgOneAspose(doc, i);

            //接收图片
            Aspose.Pdf.ImageStamp imageStamp = new Aspose.Pdf.ImageStamp(images);

            //删除第一页
            doc.Pages.Delete(i);

            //在第一页插入空白页
            var page = doc.Pages.Insert(i);

            page.SetPageSize(pageWidth, pageHeight);

            imageStamp.Width = pageWidth;
            imageStamp.Height = pageHeight;

            //第一页插入图片
            doc.Pages[i].AddStamp(imageStamp);

        }
  
        doc.Save("out.pdf", Aspose.Pdf.SaveFormat.Pdf);


     /// <summary>
    /// PDF拆分指定文件为图片   根据文件路径返回照片流
    /// </summary>
    public static MemoryStream PdfToJpgOneAspose(Aspose.Pdf.Document pdfDocument, int pages)
    {

        //分辨率
        Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(300);

        Aspose.Pdf.Devices.JpegDevice jpegDevice = new Aspose.Pdf.Devices.JpegDevice(resolution, 50);
      
        MemoryStream memStream = new MemoryStream();

        //转换一个特定的页面,并保存图像流
        jpegDevice.Process(pdfDocument.Pages[pages], memStream);

        //返回图片流
        return memStream;

    }

@fhn123456

您正在将 PDF 页面文本转换为图像,这会增加 PDF 的大小。 您可以如下所示减小分辨率大小以减小输出文件大小。

Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(100);

您好,感谢您的回复,我尝试从新创建一个实例,并把图片添加到新的实例中,发现PDF文件小了很多,如下代码。

1,但是我在使用当中,有一个问题。
我的需求是:根据图像尺寸指定PDF页面大小,以下代码确实可以实现,但是,图片分辨率300,A4像素是2480x3508,导致我的PDF页面也是2480x3508大小的,最终导致PDF也会大一些,PDF 页面A4应该是595.3x841.9的,我尝试将图片大小改成595.3x841.9发现,PDF里面的图片模糊了。
有没有API可以实现像素转成PDF需要的磅单位。

根据图片分辨率转成PDF页面需要的大小,如:图像:2480x3508,PDF页面就是:595.3x841.9

以下是我的全部代码:

    public static string PdfToJpgAsposetest(string fileName)
    {

        //打开文档
        Aspose.Pdf.Document doc = new Aspose.Pdf.Document(fileName);

        //创建实例
        Aspose.Pdf.Document document = new Aspose.Pdf.Document();

        //PDF每页转成图片
        for (int i = 1; i <= doc.Pages.Count; i++)
        {

            //PDF页面宽度595磅        1cm=28.35磅 1.5cm=42.525磅   一磅也叫点(72磅=1英寸)         72磅=1英寸,1英寸=2.54厘米   1 厘米 = 28.3464566929 点(磅)
            float pageWidth = (float)doc.Pages[i].GetPageRect(false).Width;
            //PDF页面高度842点
            float pageHeight = (float)doc.Pages[i].GetPageRect(false).Height;

            //添加一页
            Aspose.Pdf.Page page = document.Pages.Add();

            //PDF拆分指定文件为图片   根据文件流返回照片流   拆分第一页为图片
            MemoryStream images = PdfToJpgOneAspose(doc, i);

            System.Drawing.Image img = new Bitmap(images);

            var image = new Aspose.Pdf.Image { ImageStream = images };

            //边距信息
            page.PageInfo.Margin = new Aspose.Pdf.MarginInfo(0, 0, 0, 0);

            //高  
            page.PageInfo.Height = img.Height;
            //宽 
            page.PageInfo.Width = img.Width;
           
            //段落
            page.Paragraphs.Add(image);

        }

       
        document.Save("out.pdf", Aspose.Pdf.SaveFormat.Pdf);

    }


     /// <summary>
    /// PDF拆分指定文件为图片   根据文件路径返回照片流
    /// </summary>
    public static MemoryStream PdfToJpgOneAspose(Aspose.Pdf.Document pdfDocument, int pages)
    {

        //分辨率
        Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(300);

        Aspose.Pdf.Devices.JpegDevice jpegDevice = new Aspose.Pdf.Devices.JpegDevice(resolution, 50);

        MemoryStream memStream = new MemoryStream();

        //转换一个特定的页面,并保存图像流
        jpegDevice.Process(pdfDocument.Pages[pages], memStream);

        //返回图片流
        return memStream;

    }

@fhn123456

您正面临 Aspose.PDF 的预期行为。 但是,我们已将您的疑虑记录在我们的问题跟踪系统中。 已根据您的要求记录了票证 PDFNET-53310。 一旦有更新可用,我们会通知您。

好的,感谢您的回复和帮助!

Aspose.Pdf.Image.ImageScale。图像比例,是否可以按比例缩小图像,值我该如何设置,范围是多少?
public double ImageScale { get; set; }

@fhn123456

如果要调整图像大小,请阅读以下文章。
设置图像大小

您可以从以下 Github 示例中找到 ImageScale 的代码示例。