We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

修改PDF,发现PDF变大了

感谢您的查看和帮助!

我在向PDF右上角插入表格,发现第一张旋转了270度,我把第一张转成图片,在添加到PDF第一页发现,PDF变大了很多,您有办法,让PDF压缩吗?

输入文件:input.pdf (1.5 MB)
输出后变大的PDF文件:output.pdf (2.2 MB)

以下是我的全部代码

     string[] sqlData = {
       $"46;2020年;1",
       $"运输;10年;页码"
        };

    // 加载源PDF文档 input input测试
    Aspose.Pdf.Document doc = new Aspose.Pdf.Document(@"E:\桌面\666\源文件\input.pdf");

    //获得第一页
    var page1toadd = doc.Pages[1];
    //获得总页数   如果不加1  将会在最后一页的前面加
    int pagesCount = doc.Pages.Count + 1;
    //PDF最后一页插入第一页  pagesCount(是最后一页索引)
    doc.Pages.Insert(pagesCount, page1toadd);
    //删除第一页
    doc.Pages.Delete(1);


        //判断PDF第一页是否旋转
        Rotation rot = doc.Pages[1].Rotate;

        if (!rot.ToString().Equals("None"))
        {

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


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

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

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

            page.SetPageSize(Aspose.Pdf.PageSize.A4.Width, Aspose.Pdf.PageSize.A4.Height);

            var Width = page.GetPageRect(false).Width;
            var Height = page.GetPageRect(false).Height;

            imageStamp.Width = Width;
            imageStamp.Height = Height;

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


    // 初始化表的新实例
    Aspose.Pdf.Table table = new Aspose.Pdf.Table();
    // 将表格边框颜色设置为浅灰色
    table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
    // 设置表格单元格的边框
    table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));

    // 使用表的列宽设置
    table.ColumnWidths = "2.4cm 1.8cm 1.8cm";

    // 创建循环以添加10行
    for (int row_count = 0; row_count < 2; row_count++)
    {
        // 将行添加到表
        Aspose.Pdf.Row row = table.Rows.Add();

        table.Rows[row_count].FixedRowHeight = 42.525;

        string[] rowData = sqlData[row_count].Split(';');

        for (int i = 0; i < rowData.Length; i++)
        {

            TextFragment fragment = new TextFragment();

            Aspose.Pdf.Text.TextSegment segment = new Aspose.Pdf.Text.TextSegment($"{rowData[i]}");
            Aspose.Pdf.Text.TextState ts = new TextState(System.Drawing.Color.Red);
            ts.Font = FontRepository.FindFont("SimSun");
            ts.Font.IsEmbedded = true;
            ts.FontSize = 13f;
            segment.TextState = ts;

            fragment.Segments.Add(segment);

            Cell cell = new Cell();
            row.Cells.Add(cell);
            cell.Paragraphs.Add(fragment);
            cell.VerticalAlignment = VerticalAlignment.Center;
            cell.Alignment = HorizontalAlignment.Center;
        }

    }

    //Pdf页面宽度
    double pageWidth = doc.Pages[1].GetPageRect(true).Width;
    double pageHeight = doc.Pages[1].GetPageRect(true).Height;
    //获得表格的宽
    float tableWidth = (float)table.GetWidth();


    //右上角
    table.Alignment = HorizontalAlignment.Right;
    table.Top = 15f;
    float rightMargin = (float)(tableWidth / 1.9);
    table.Left = (float)(pageWidth - (tableWidth + rightMargin));


    //将表对象添加到输入文档的第一页
    doc.Pages[1].Paragraphs.Add(table);

    //保存包含表对象的更新文档  output.pdf
    doc.Save(@"E:\桌面\666\源文件\output.pdf");

@fhn123456

请查看以下文章以压缩 PDF 文档并减小其大小。

你好,我目前使用的是Aspose.PDF是17.7版本的,没有这个OptimizationOptions API
可以使用其他的API吗

@fhn123456

在较新版本的 API 中,这些选项仅移动到不同的命名空间下。但它们仍然存在于不同命名空间下的旧版本中,即 Aspose.Pdf。此外,我们不建议使用旧版本,因为它们具有过时的方法和类。我们仅建议始终使用最新版本的 API,并在最新版本的基础上提供支持。