当前位置: 首页 > news >正文

用C#实现连续打印pdf文件

要实现连续打印多个 PDF 文件而不在两个文件中间留下空白的效果,你可以使用 PdfSharpiTextSharp 等库来合并这些 PDF 文件。然后,将合并后的 PDF 文件发送到打印机。下面是使用 PdfSharp 的示例代码。

使用 PdfSharp 实现 PDF 合并并打印

  1. 首先,你需要安装 PdfSharp NuGet 包。在项目目录下运行以下命令:

    dotnet add package PdfSharp --version 1.50.5147
  2. 然后,使用以下代码合并 PDF 并打印:

    using System;
    using System.Diagnostics;
    using PdfSharp.Pdf;
    using PdfSharp.Pdf.IO;class Program
    {static void Main(){string[] pdfFiles = { "file1.pdf", "file2.pdf", "file3.pdf" };string outputPdf = "merged.pdf";MergePdfFiles(pdfFiles, outputPdf);PrintPdf(outputPdf);}static void MergePdfFiles(string[] pdfFiles, string outputPdf){using (var outputDocument = new PdfDocument()){foreach (string pdfFile in pdfFiles){using (var inputDocument = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Import)){// 将输入PDF文件的所有页面添加到输出文档for (int i = 0; i < inputDocument.PageCount; i++){outputDocument.AddPage(inputDocument.Pages[i]);}}}outputDocument.Save(outputPdf);}}static void PrintPdf(string pdfFile){Process printProcess = new Process();printProcess.StartInfo.FileName = pdfFile;printProcess.StartInfo.Verb = "print";printProcess.StartInfo.CreateNoWindow = true;printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;printProcess.Start();}
    }
    

代码解释

  1. MergePdfFiles 方法: 这个方法将多个 PDF 文件合并为一个。通过逐个打开每个 PDF 文件,并将每个 PDF 的所有页面添加到一个新的输出文档中。

  2. PrintPdf 方法: 这个方法使用 Process 类来启动打印任务。它将合并后的 PDF 文件发送到默认打印机。

  3. Main 方法: 在主函数中,你可以指定要合并的 PDF 文件,并调用合并和打印的函数。

注意事项

  • 这段代码假设你要打印的 PDF 文件都在项目的根目录下。如果文件路径不同,请确保指定正确的路径。
  • Process.StartInfo.Verb = "print" 将调用默认打印机,如果你想指定特定的打印机,可以进一步配置 ProcessStartInfo

通过这种方式,你可以避免在多个 PDF 文件之间产生空白页,实现连续打印效果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一起学习LeetCode热题100道(40/100)
  • LlamaIndex-milvus-RAG
  • 基于vue框架的yit商城uwd1i(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 【产品经理】竞品分析怎么理解?拆解一下
  • 万字干货!手把手教你如何训练超大规模集群下的大语言模型
  • 【STM32嵌入式系统设计与开发拓展】——15_ADC
  • 重修设计模式-行为型-状态模式
  • Java面试八股之什么是消息队列
  • 智慧景区系统:科技赋能旅游新体验
  • 理解 Go 语言的分组操作
  • JAVA中的ArrayDeque和LinkedList实现Deque,前者不能存NULL结点,后者可以存放NULL。
  • 【upload]-ini-[SUCTF 2019]CheckIn-笔记
  • MySQL 中主键索引的页分裂:深入探讨
  • STM32家族系列的区别
  • 使用go实现一个简单的聊天服务器
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【译】理解JavaScript:new 关键字
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JSDuck 与 AngularJS 融合技巧
  • LeetCode算法系列_0891_子序列宽度之和
  • Magento 1.x 中文订单打印乱码
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • vue-loader 源码解析系列之 selector
  • Vue实战(四)登录/注册页的实现
  • 安卓应用性能调试和优化经验分享
  • 程序员最讨厌的9句话,你可有补充?
  • 配置 PM2 实现代码自动发布
  • 如何优雅地使用 Sublime Text
  • 使用Gradle第一次构建Java程序
  • 思维导图—你不知道的JavaScript中卷
  • 学习ES6 变量的解构赋值
  • 一、python与pycharm的安装
  • 一个项目push到多个远程Git仓库
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • #laravel 通过手动安装依赖PHPExcel#
  • #pragma pack(1)
  • (145)光线追踪距离场柔和阴影
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)hibernate配置管理
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转载)Linux 多线程条件变量同步
  • @AutoConfigurationPackage的使用
  • @Mapper作用
  • @SuppressWarnings注解
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [17]JAVAEE-HTTP协议
  • [C#]winform基于opencvsharp结合Diffusion-Low-Light算法实现低光图像增强黑暗图片变亮变清晰
  • [C++] 多线程编程-thread::yield()-sleep_for()