用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 ...
随机推荐
- Android Studio如何配置adb以及常用命令
https://blog.csdn.net/google_huchun/article/details/53314046 用Android Studio一年多了,都没有使用其调试adb,今天就分享ad ...
- C# 并发队列ConcurrentQueue
测试函数 static async Task RunProgram() { var taskQueue = new ConcurrentQueue<CustomTask>(); var c ...
- PHP正则表达式笔记和实例
转自: https://www.cnblogs.com/yafei236/p/4168290.html 本文主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己 ...
- excel 正则表达式用法
Private Sub RegEx_Replace() Dim myRegExp As Object Dim Myrange As Range, C As Range ...
- jenkins backup and migration
service jenkins stop 压缩包:tar -czvf /tmp/xx.tar.gz --exclude=“workspace” --exclude=“.m2" --exclu ...
- 同一个Activity先后加载2个Layout,从layout1取值传入layout2
同一个Activity先后加载2个Layout,从layout1取值传入layout2 没啥技术含量,就权当丰富下mono for android的小代码. Main.xaml <?xml ve ...
- Ngin 简单配置文件
#user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...
- windows系统PHP7开启curl_init
1.php.ini,开启extension=php_curl.dll,去掉去掉前面的“;” 2.检查php.ini的extension_dir值是哪个目录(也就是插件扩展目录,比如php_curl.d ...
- 【Druid】access denied for user ''@'ip'
今天在写单元测试时,遇到一个很奇葩的问题,一直在报这样的错误: Caused by: java.sql.SQLException: Access denied for user ''@'183.134 ...
- hibernate_Session接口_load_get
hibernate读取数据库内容,用 1,session.get(Class类型,主键); 立马发出sql语句.从数据库中取出值装到对象里去 2,session.load(Class类型,主键); 从 ...