微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用iText 7 C#复制大尺寸PDF文件时出现内存异常版本7.1.12

如何解决使用iText 7 C#复制大尺寸PDF文件时出现内存异常版本7.1.12

我正在尝试对现有文档(3 GB的大小)进行一些操作。 我发现用PdfReader读取文档没有问题。 将现有文档页面复制到新文档时出现内存异常。 请找到我创建的代码

string inputFile = CommonHelper.GetPdfFilePath("MergeRootAttributesOntoPage.pdf");
            string outputFile = CommonHelper.GetoutputPdfFile("MergeRootAttributesOntoPage_iText7");
            PdfReader pdfReader = new PdfReader(
                                                new RandomAccessSourceFactory().SetForceRead(false).CreateBestSource(inputFile),new ReaderProperties()
                                                    );
            PdfDocumentWrapper sourceDocument = new PdfDocumentWrapper(pdfReader,true);
            PdfWriter pdfWriter = new PdfWriter(outputFile).SetSmartMode(true);
            PdfDocumentWrapper destinationDocument = new PdfDocumentWrapper(pdfWriter);
            destinationDocument.InitializeOutlines();

            sourceDocument.copyPagesTo(1,sourceDocument.GetNumberOfPages(),destinationDocument);
            sourceDocument.Close();
            destinationDocument.Close();

使用PDf Merge对象复制方案:

 string inputFile = CommonHelper.GetPdfFilePath("MergeRootAttributesOntoPage.pdf");
            string outputFile = CommonHelper.GetoutputPdfFile("MergeRootAttributesOntoPage_iText7");
            PdfReader pdfReader = new PdfReader(
                                                new RandomAccessSourceFactory().SetForceRead(false).CreateBestSource(inputFile),new ReaderProperties()
                                                );
            PdfDocumentWrapper sourceDocument = new PdfDocumentWrapper(pdfReader,true);
            PdfWriter pdfWriter = new PdfWriter(outputFile).SetSmartMode(true);
            PdfDocumentWrapper destinationDocument = new PdfDocumentWrapper(pdfWriter);
            PdfMerger resultDocument = new PdfMerger(destinationDocument).SetCloseSourceDocuments(true);
            resultDocument.Merge(sourceDocument,1,sourceDocument.GetNumberOfPages()).Close();
            resultDocument.Close();

一页一页地复制

 string inputFile = CommonHelper.GetPdfFilePath("MergeRootAttributesOntoPage.pdf");
            string outputFile = CommonHelper.GetoutputPdfFile("MergeRootAttributesOntoPage_iText7");
            PdfReader pdfReader = new PdfReader(
                                                new RandomAccessSourceFactory().SetForceRead(false).CreateBestSource(inputFile),true);
            PdfWriter pdfWriter = new PdfWriter(outputFile).SetSmartMode(true);
            PdfDocumentWrapper destinationDocument = new PdfDocumentWrapper(pdfWriter);
            destinationDocument.SetCloseWriter(false);
            destinationDocument.InitializeOutlines();
            pdfpageFormcopier pdfpageFormcopier = new pdfpageFormcopier();

            for (int i = 1; i <= sourceDocument.GetNumberOfPages(); ++i)
            {
               destinationDocument.AddPage(sourceDocument.GetPage(i).copyTo(destinationDocument,pdfpageFormcopier));
            }

以上所有方法在复制对象时都以内存异常结束 任何解决方案都是热烈的欢迎

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。