将PDF文件拆分为多个文件-控制台c#

本教程展示了使用LEADTOOLS SDK在c# Windows控制台应用程序中单独保存多页PDF中的每一页的三种不同技术。

概述
总结 本教程介绍如何在c# Windows控制台应用程序中分割多页PDF文件。
完成时间 30分钟
Visual Studio项目 下载教程项目(4kb)
平台 c# Windows控制台应用程序
IDE Visual Studio 2017, 2019
开发许可 下载LEADTOOLS
用另一种语言试试
  • c#:.NET Framework(控制台)
  • Java:Java

所需的知识

步骤熟悉创建项目的基本步骤添加引用和设置License教程,在工作之前将PDF文件拆分为多个文件-控制台c#教程。

创建项目并添加LEADTOOLS引用

中创建的项目的副本开始添加引用和设置License教程。如果该项目不可用,请按照该教程中的步骤创建它。

所需要的参考资料取决于项目的目的。引用可以通过以下两种方法中的一种添加(但不能同时添加)。

如果使用NuGet引用,本教程需要以下NuGet包:

如果使用本地DLL引用,则需要以下DLL。

dll位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64

有关应用程序需要哪些DLL文件的完整列表,请参阅在你的申请中包含的文件

设置License文件

许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License

有两种类型的运行时许可证:

请注意

中详细介绍了添加LEADTOOLS NuGet和本地引用以及设置许可添加引用和设置License教程。

添加分割页面代码

随着项目的创建、引用的添加和许可的设置,编码就可以开始了。

解决方案资源管理器,打开Program.cs.将以下语句添加到顶部的using块中Program.cs

c#
//在顶部使用块使用系统;使用先;使用Leadtools;使用Leadtools.Codecs;使用Leadtools.Pdf;使用Leadtools.Document;使用Leadtools.Document.Converter;使用Leadtools.Document.Writer;使用Leadtools.Ocr;

将下面的代码添加到Main ()方法创建拆分文件目录,并调用下面各节中创建的方法。

c#
静态无效主要(字符串[]参数){试一试{SetLicense ();字符串multipageFile =@“C: \ LEADTOOLS22 \资源\ \ leadtools.pdf图像”字符串_splitDir =@“C: \ LEADTOOLS22 \ Resources \ \分割图像pdf文档”如果(! Directory.Exists (_splitDir)){Directory.CreateDirectory (_splitDir);SplitUsingRasterCodecs (multipageFile _splitDir);SplitUsingPDFFile (multipageFile _splitDir);SplitUsingLEADDocument (multipageFile _splitDir);(异常交货){Console.WriteLine (ex.ToString ());控制台。WriteLine (“按任意键退出。”);控制台。ReadKey (真正的);

下面将讨论三种不同的分割PDF文件页面的技术,每种技术都有自己的优点。

方法1:使用光栅编解码器

在这种方法中,每个页面都以栅格(位图)图像的形式加载,然后保存为栅格PDF文件。这是使用RasterCodecs类。

这种方法的主要优点是代码简单。它只需要几行代码,而且完全相同的代码可以用于其他多页格式,如TIFF或GIF。

方法中创建新方法程序类命名SplitUsingRasterCodecs(string inputFile, string _directory).方法中调用此方法Main ()方法,如上所示。

c#
静态无效SplitUsingRasterCodecs (字符串inputFile,字符串_directory){使用(RasterCodecs codecs =RasterCodecs ()){codecs.Options.Pdf.InitialPath =@ " C: \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64”inttotalPages = codecs.GetTotalPages(inputFile);控制台。写($“SplitUsingRasterCodecs . .\nTotal pages: {totalPages},分割页面:");intPage = 1;page <= totalPages;+ +页){控制台。写($“{页面}. .”);字符串outputFileName = $“{Path.GetFileNameWithoutExtension (inputFile)} _codecs_page{页面}. pdf”字符串outputFile =路径。结合(_directory outputFileName);使用(RasterImage图像=编解码器。负载(inputFile、页面)编解码器。保存(image, outputFile, RasterImageFormat。RasPdfLzw, 0);Console.WriteLine ();

方法二:使用PDFFile

在这种方法中,PDFFile类,它是PDF格式的专用类。这意味着该代码不能用于其他文档或图像格式。

这种方法的主要优点是它保留了PDF页面的内容,因为它不将可搜索的文本转换为光栅图像。此外,在许多情况下,它不会导致原始PDF文件中的图像重新编码,从而提高性能并保持图像质量。代码也非常简单。

方法中创建新方法程序类命名SplitUsingPDFFile(string inputFile, string _directory).方法中调用此方法Main ()方法,如上所示。

c#
静态无效SplitUsingPDFFile (字符串inputFile,字符串_directory){PDFFile =PDFFile (inputFile);inttotalPages = pdfFile.GetPageCount();控制台。写($“SplitUsingPDFFile . .\nTotal pages: {totalPages},分割页面:");intPage = 1;page <= totalPages;+ +页){控制台。写($“{页面}. .”);字符串outputFileName = $“{Path.GetFileNameWithoutExtension (inputFile)} _pdfFile_page{页面}. pdf”字符串outputFile =路径。结合(_directory outputFileName);pdfFile。ExtractPages(page, page, outputFile);Console.WriteLine ();

方法三:使用LEADDocument

这种方法是三种方法中最先进的,它利用了LEADDocument而且DocumentConverter类。

由于这些类适用于不同的格式,所以类似的代码可以用于分离多种类型的文档文件,并输出到不同的文档和光栅格式。例如,在下面的代码中,简单地更改DocumentFormat.Pdf成为DocumentFormat.Docx将文件分割成Microsoft Word输出页面,而不是PDF页面。此外,这些功能强大的类产生优化的输出文件。

方法中创建新方法程序类命名SplitUsingPDFFile(string inputFile, string _directory).方法中调用此方法Main ()方法,如上所示。

c#
静态无效SplitUsingLEADDocument (字符串inputFile,字符串_directory){DocumentWriter =DocumentWriter ();//可选:使用documentWriter.GetOptions()和documentWriter.SetOptions()修改PDF选项varcreateOptions =CreateDocumentOptions ();LEADDocument inputDocument = DocumentFactory。LoadFromFile (inputFileLoadDocumentOptions ());IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead);ocrEngine。启动(,,,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);控制台。写($“SplitUsingLEADDocument . .\nTotal pages: {inputDocument.Pages。Count},分割页面:");foreachvarinputPageinputDocument.Pages){LEADDocument pageDocument = DocumentFactory.Create(createOptions);pageDocument。AutoDisposeDocuments =真正的pageDocument。Name =“VirtualPage”pageDocument.Pages.Add (inputPage);docConverter =DocumentConverter ();docConverter。SetOcrEngineInstance (ocrEngine);docConverter.SetDocumentWriterInstance (documentWriter);intpage = inputDocument.Pages.IndexOf(inputPage) + 1;//(+ 1),因为index是从零开始的控制台。写($“{页面}. .”);varjobData =DocumentConverterJobData{文档= pageDocument,OutputDocumentFileName =路径。结合(_directory, $“{Path.GetFileNameWithoutExtension (inputFile)} _LeadDoc_page{页面}. pdf”),DocumentFormat = DocumentFormat. pdf};varjob = docConverter.Jobs.CreateJob(jobData);docConverter.Jobs.RunJob(工作);控制台。WriteLine (”“);ocrEngine.Shutdown ();

处理流

来处理文件使用MemoryStream,修改两种方法SplitUsingRasterCodecs而且SplitUsingLEADDocumentreplace类调用它们的代码Main ()方法如下:

c#
//下面的代码在Main方法中//注意PDFFile类不接受流输入字节[] multipageData = File.ReadAllBytes(multipageFile);使用(MemoryStream multipageStream =MemoryStream (multipageData)){SplitUsingRasterCodecs (multipageStream);SplitUsingLEADDocument (multipageStream);静态无效SplitUsingRasterCodecs(流inputStream){使用(RasterCodecs codecs =RasterCodecs ()){codecs.Options.Pdf.InitialPath =@ " C: \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64”inttotalPages = codecs.GetTotalPages(inputStream);控制台。写($“SplitUsingRasterCodecs . .\nTotal pages: {totalPages},分割页面:");intPage = 1;page <= totalPages;+ +页){控制台。写($“{页面}. .”);使用(RasterImage图像=编解码器。负载(inputStream,页面))使用(MemoryStream outputStream =MemoryStream ()){编解码器。保存(image, outputStream, RasterImageFormat。RasPdfLzw, 0);//使用包含拆分文件的输出内存流,在它被关闭并释放给下一页之前Console.WriteLine ();静态无效SplitUsingLEADDocument(流inputStream){DocumentWriter =DocumentWriter ();//可选:使用documentWriter.GetOptions()和documentWriter.SetOptions()修改PDF选项varcreateOptions =CreateDocumentOptions ();LEADDocument inputDocument = DocumentFactory。LoadFromStream (inputStream,LoadDocumentOptions ());IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead);ocrEngine。启动(,,,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);控制台。写($“SplitUsingLEADDocument . .\nTotal pages: {inputDocument.Pages。Count},分割页面:");foreachvarinputPageinputDocument.Pages){LEADDocument pageDocument = DocumentFactory.Create(createOptions);pageDocument。AutoDisposeDocuments =真正的pageDocument。Name =“VirtualPage”pageDocument.Pages.Add (inputPage);docConverter =DocumentConverter ();docConverter。SetOcrEngineInstance (ocrEngine);docConverter.SetDocumentWriterInstance (documentWriter);intpage = inputDocument.Pages.IndexOf(inputPage) + 1;//(+ 1),因为index是从零开始的控制台。写($“{页面}. .”);varjobData =DocumentConverterJobData{文档= pageDocument,OutputDocumentStream =MemoryStream (),DocumentFormat = DocumentFormat. pdf,JobName =“LeadDoc_page”+页面};varjob = docConverter.Jobs.CreateJob(jobData);docConverter.Jobs.JobCompleted += Jobs_JobCompleted;docConverter.Jobs.RunJob(工作);控制台。WriteLine (”“);ocrEngine.Shutdown ();私人静态无效Jobs_JobCompleted (对象sender, DocumentConverterJobEventArgs{MemoryStream outputStream = e.Job.JobData.OutputDocumentStream作为MemoryStream;//转换作业完成后,每个输出流将包含一个分割页//在释放和关闭之前使用流outputStream.Dispose ();outputStream.Close ();

运行项目

按下运行项目F5,或选择Debug ->开始调试

如果正确地执行了这些步骤,应用程序将运行并创建新文件。每一页leadtools.pdf应该以三种不同的方式将其创建为单独的PDF文件,并将页码附加在名称后面。

总结

本教程展示了如何添加必要的引用来加载PDF文件的所有页面,并使用各种技术将它们分割为单独的文档。

另请参阅

iOS
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2023领德科技有限公司版权所有。