原文: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 水平双面(两面的上下方向一样);
  • duplexduplexlong 垂直双面(两面的上下方向不同);
  • simplex 单面(默认)

打印份数:

  • nx 打印n份
  • 没有设置为打印1份

比如: 以水平双面无边框打印偶数页2份,其设置为 even,noscale,duplex,2x

SumatraPdf 下载地址

http://www.sumatrapdfreader.org/download-free-pdf-viewer-cn.html

转载请注明:宇托的狗窝 » 用SumatraPdf实现PDF静默打印

用SumatraPdf实现PDF静默打印的更多相关文章

  1. 使用electron静默打印

    1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的.并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大. e ...

  2. java实现自动静默打印功能

    ​ 最近接到一个需求,要求实现自动打印功能,一般网页打印pdf需要借助浏览器的pdf组件,而且还要弹出打印窗口,再点击打印才能实现. 那么如何实现自动打印了,从点击自己网页上3次缩减到点击一次了? 一 ...

  3. 突破技术限制,实现Web端静默打印

    作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了? 真实情况是Web端受限于浏览器的权限,无法直接访问打印机等本机资源. ...

  4. 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?

    用foxit reader 打印pdf 直接设置为双面打印并且一张2页打印,发现正反面刚好倒着来的,其实说的正反面倒着是从左右翻的角度来讲的,如果上下翻会发现刚好是这个顺序的,这个是要在双面打印设置里 ...

  5. C# ITextSharp pdf 自动打印

    PDF生成后直接进入打印预览不用下载 using iTextSharp.text; using iTextSharp.text.pdf; Document pdfDoc = new Document( ...

  6. java PDF分页打印

    将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...

  7. 微信小程序 PDF下载打印

    在开发微信小程序时,需要打印生成的PDF,实现思路是:后端生成相应的PDF,微信小程序下载并打开. 但是微信小程序并不可以打印,所以需要借助其他APP比如:WPS,但是发现微信小程序down的PDF在 ...

  8. Qt编写数据导出到Excel及Pdf和打印数据

    一.前言 用Qt开发已经九年了,期间用Qt做过不少的项目,在各种项目中有个功能很常用,尤其是涉及到数据记录存储的项目,那就是需要对查询的数据进行导出到Excel,或者导出到Pdf文件,或者直接打印查询 ...

  9. springboot pdf模板打印

    1.下载Adobe Acrobat DC工具来制作pdf的模板 打开一个pdf 2.制作pdf模板 把自动生成的文本框删除 然后 拖入文本框并自定义键 导入maven 依赖 <dependenc ...

随机推荐

  1. windows server 2012 valid key

    好吧,网页三剑客. 1, load disc iso 2,check ip settings, 3,net-inst-server-start 4,power Node, F2 4.1 F7 usbc ...

  2. mysql数据库基本知识

    一.库操作 创建数据库:creat database 'mydababase1';creat database if not exists 'mydababase1'  //只有两个选项 查询数据库: ...

  3. Google发布移动网站设计原则

    Google 刚刚发布了由 Google 与 AnswerLab 联合打造,名为<Principles of Mobile Site Design: Delight Users and Driv ...

  4. com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method解决方法

    报错日记: Caused by: com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getUserAuthLeve ...

  5. python-广播

    #!/usr/bin/python #coding=utf-8 #广播端 import sys,socket import time s=socket.socket(socket.AF_INET,so ...

  6. JS 开发者必须知道的十个 ES6 新特性

    这篇文章会给你简单介绍一下ES6.如果你还不知道什么是ES6的话,它是JavaScript一个新的实现,如果你是一个忙碌的JavaScript开发者(但谁不是呢),那么继续读下去吧,看看当今最热门的语 ...

  7. session_start()导致history.go(-1)返回时无法保存表单数据的解决方法

    问题背景: 在填写完表单提交时,由于某个表单项可能填写的不合法,导致提交失败,返回表单页面.但返回后所有的表单都被清空了,重新填写比较麻烦,度娘解释说,是由于每个页面都调用了session_start ...

  8. python实例:快速找出多个字典中的公共键

    1.生成随机字典 # 从abcdefg 中随机取出 3-6个,作为key, 1-4 的随机数作为 value s1 = {x : randint(1, 4) for x in sample('abcd ...

  9. jquery validate(转)

    转自:http://blog.sina.com.cn/s/blog_608475eb0100h3h1.html 官网地址:http://bassistance.de/jquery-plugins/jq ...

  10. developer.android.google.cn

    Android Studio官方 Android IDE https://developer.android.google.cn/studio/index.html 探索 Android Studio ...