.NET使用PDFSharp拆分PDF文件流

最近做了一个比较有意思的功能,当A用户传入一个pdf文件后,其他人申请借阅的时候只能借阅这个pdf的某几页,这时候就要对原始的pdf文件流进行拆分,给用户展示指定的某几页,废话不多说,直接开始实践步骤。

1.导入第三方组件

这里我用到的第三方组件为PDFSharp,在项目引用上右键,点击NuGet搜索PDFSharp并安装到项目中即可

2.编写核心代码

        /// <summary>
        /// 拆分pdf文件流(返回拆分后的页合集)
        /// </summary>
        /// <param name="memoryStream">pdf文件流</param>
        /// <returns></returns>
        private static List<MemoryStream> SplitPdf(MemoryStream memoryStream)
        {
            // 打开文件(文件流方式)
            var inputDocument = PdfSharp.Pdf.IO.PdfReader.Open(memoryStream, PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import);
            var streamList = new List<MemoryStream>();
            for (int idx = 0; idx < inputDocument.PageCount; idx++)
            {
                // 创建新的pdf文档
                var outputDocument = new PdfSharp.Pdf.PdfDocument
                {
                    Version = inputDocument.Version
                };
                outputDocument.Info.Title = String.Format("Page {0} of {1}", idx + 1, inputDocument.Info.Title);
                outputDocument.Info.Creator = inputDocument.Info.Creator;

                // 添加拆分页到list
                outputDocument.AddPage(inputDocument.Pages[idx]);
                var ms = new MemoryStream();
                outputDocument.Save(ms);
                streamList.Add(ms);
            }
            return streamList;
        }

3.拿到拆分后的文件流,就可以根据自己的需求进行操作了,比如保存到本地,或者直接使用控件加载指定的文件流显示。

THE END