用SumatraPdf实现PDF静默打印
原文:https://yutuo.net/archives/24a22d50d6001564.html
之前做一系统,有一个打印PDF文件的需求,需求如下:
- 能指定打印机
- 能两面打印
- 最好能静默打印
在网上找了一堆资料,没发现直接用Java打印的,只发现一个调用Adobe Reader来实现打印的方法,但它有一个问题,就是总有一个Adobe Reader进程是常驻的,而且会在服务器上显示出来,每次打印多个文件时,服务器一个劲地弹Adobe Reader的窗口;还有一个问题是它不支持双面打印。
然后想到我一直用开源工具SumatraPdf看PDF,SumatraPdf是不是支持打印呢?网上一找,SumatraPdf还真支持打印。写代码测试了一下,SumatraPdf打印进是静默的。本来以为直接用就行了,然后发现SumatraPdf也不支持双面打印。在网上找了一下,发现可以通过修改SumatraPdf代码来实现双面打印(参考地址),呵呵,这不就是我想要的吗?看了一下SumatraPdf的Licence协议,是GPL协议,不过我是用进程调用,是可以免费使用的。
2016/01/26: 最新版的SumatraPdf已经支持双面打印,无需修改代码
于是用SVN下载好SumatraPdf的源代码(下载地址)。源代码的vs文件夹里提供了Visual Studio 2010和Visual Studio 2012两个工程定义。个人建议用Visual Studio 2010打开编译,因为我试用了Visual Studio 2012,发现Visual Studio 2012编译的文件不支持Xp和2003(Visual Studio 2012Update1开始支持,不过Express版本好像不支持)。
然后就是修改方法了,需要修改的文件是src文件夹下的Print.cpp文件(最新版已经支持,修改方法已经删除 ),然后编译代码,SumatraPdf就准备好了。
SumatraPdf打印的命令行的参考地址如下:
https://github.com/sumatrapdfreader/sumatrapdf/wiki/Command-line-arguments
具体为
- 打印到指定打印机:
SumatraPdf.exe -print-to "打印机名" -print-settings "设置" "要打印的文件路径" - 打印到默认打印机:
SumatraPdf.exe -print-to-default -print-settings "设置" "要打印的文件路径"
打印设置有以下几个选项(下文中的n和m为数字):
页面选择:
even偶数页odd奇数页n-m第n页到第m页n第n页- 没有设置为全部页面
页面大小:
noscale无边框shrink缩小到合适大小(默认)fit合适大小compat兼容
双面打印:
duplexshort水平双面(两面的上下方向一样);duplex或duplexlong垂直双面(两面的上下方向不同);simplex单面(默认)
打印份数:
nx打印n份- 没有设置为打印1份
比如: 以水平双面无边框打印偶数页2份,其设置为 even,noscale,duplex,2x
SumatraPdf 下载地址
http://www.sumatrapdfreader.org/download-free-pdf-viewer-cn.html
转载请注明:宇托的狗窝 » 用SumatraPdf实现PDF静默打印
用SumatraPdf实现PDF静默打印的更多相关文章
- 使用electron静默打印
1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的.并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大. e ...
- java实现自动静默打印功能
最近接到一个需求,要求实现自动打印功能,一般网页打印pdf需要借助浏览器的pdf组件,而且还要弹出打印窗口,再点击打印才能实现. 那么如何实现自动打印了,从点击自己网页上3次缩减到点击一次了? 一 ...
- 突破技术限制,实现Web端静默打印
作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了? 真实情况是Web端受限于浏览器的权限,无法直接访问打印机等本机资源. ...
- 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?
用foxit reader 打印pdf 直接设置为双面打印并且一张2页打印,发现正反面刚好倒着来的,其实说的正反面倒着是从左右翻的角度来讲的,如果上下翻会发现刚好是这个顺序的,这个是要在双面打印设置里 ...
- C# ITextSharp pdf 自动打印
PDF生成后直接进入打印预览不用下载 using iTextSharp.text; using iTextSharp.text.pdf; Document pdfDoc = new Document( ...
- java PDF分页打印
将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...
- 微信小程序 PDF下载打印
在开发微信小程序时,需要打印生成的PDF,实现思路是:后端生成相应的PDF,微信小程序下载并打开. 但是微信小程序并不可以打印,所以需要借助其他APP比如:WPS,但是发现微信小程序down的PDF在 ...
- Qt编写数据导出到Excel及Pdf和打印数据
一.前言 用Qt开发已经九年了,期间用Qt做过不少的项目,在各种项目中有个功能很常用,尤其是涉及到数据记录存储的项目,那就是需要对查询的数据进行导出到Excel,或者导出到Pdf文件,或者直接打印查询 ...
- springboot pdf模板打印
1.下载Adobe Acrobat DC工具来制作pdf的模板 打开一个pdf 2.制作pdf模板 把自动生成的文本框删除 然后 拖入文本框并自定义键 导入maven 依赖 <dependenc ...
随机推荐
- js中的promise详解
一 概述 Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件.ES6统一了用法,并原生提供了Promise对象.作为对象,Promise有一下两个特点: (1)对象的 ...
- Java Web入门学习(二) Eclipse的配置
Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后 ...
- Linux系统编程:线程控制
一.提出问题 问1.线程存在的意义是什么?什么时候适合使用多线程? 答1.在单进程环境中实现多任务,线程可访问其所在进程的资源,例如内存.描述符等.对于单进程,如果要完成多项任务,这些任务只能依次执行 ...
- windows电脑配置
1.本地电脑通过修改hosts文件实现域名本地解析 以管理员身份打开记事本 并打开C:\Windows\System32\drivers\etc 路径下的hosts文件 在文件末尾添加如下
- C++11 实现生产者消费者双缓冲
基础的生产者消费者模型,生产者向公共缓存区写入数据,消费者从公共缓存区读取数据进行处理,两个线程访问公共资源,加锁实现数据的一致性. 通过加锁来实现 class Produce_1 { public: ...
- 第1章—Spring之旅—Spring模块介绍
Spring模块介绍 Spring7大核心模块: 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.S ...
- Hadoop Hive概念学习系列之hive三种方式区别和搭建、HiveServer2环境搭建、HWI环境搭建和beeline环境搭建(五)
说在前面的话 以下三种情况,最好是在3台集群里做,比如,master.slave1.slave2的master和slave1都安装了hive,将master作为服务端,将slave1作为服务端. 以 ...
- 深入理解java集合框架之---------Arraylist集合
ArrayList简介 ArrayLIst是动态数组,用MSDN的说法就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小,要注意 ...
- Flex 生成行号
private function formatIndexNumber(item:Object, colum:Object):String { return indexNumLabelFun( ...
- C#、OC递归锁
做ios也有1年了,C#的东西有些都忘记了,最近几天也打算重温一下,不能学了ios把C#给抛弃了,两者都要抓,一精多专.目前C#只是重温,重点是web这块.今天主要是想起了之前做过的面试题,虽然题比较 ...