最近做一个项目,是关于报告之类的,涉及到报告打印这个功能,真是坑了个爹啊。在网上找了很多方法,web打印有很多控件,如:杰表打印,lodop,等等。因为业务上的报表表格都是一些word文档,其内容也非常之多。基本上表格,复合表格之类的。数据量不定,所以分页也必须考虑上。

首先考虑,杰表打印,因为lodop网上有网页说对css支持不好。杰表打印免费版确实是良心之作啊,收费版我没有用过。通过程序在html输出内容并分好页,每一页放在一个

myDoc = {

documents: document,

settings:{topMargin:0,

leftMargin:0,

bottomMargin:0,

rightMargin:0}, // 设置上下左距页边距为10毫米,注意,单位是 1/10毫米

/*

要打印的div 对象在本文档中,控件将从本文档中的 id 为 'page1' 的div对象,

作为首页打印id 为'page2'的作为第二页打印 */

copyrights: '杰创软件拥有版权 www.jatools.com' // 版权声明,必须

};

var jatoolsPrinter = document.getElementById("jatoolsPrinter");

jatoolsPrinter.printPreview(myDoc); // 打印预览

这样就可以打印了,但是免费版本有个问题,在不同分辨率上字体,大小经常不一样,带来了一个问题:调好了A机子B机子又不行,总是达不到理想的效果。由于收费版贵,也不知道效果如何,所以就没有购买了。将就着用了一段时间。

前不久,在网上找到了一个神器《wxhtmltopdf》,直接将html生成pdf,并且直接javascript脚本运行。分页也不在话下。最主要是页面调好的布局,生成后无变型,字体大小一致。哇草,这太合适我的需求了吧。去官网一看,跨平台,牛啊,妈妈再也不用担心什么window,linux,mac os了,百度一搜安装方法一堆,果断试试。

wkhtmltopdf http://www.baidu.com baidu.pdf

就这么简单,pdf就生成了,而且效果很好。就他了。

下来就是怎么在程度上调用的问题了。这个很简单,java php C#都有方法。直接用啊,我这里用的是java的。

public class HtmlToPdfInterceptor extends Thread {

private InputStream is;

public HtmlToPdfInterceptor(InputStream is){

this.is = is;

}

public void run(){

try{

InputStreamReader isr = new InputStreamReader(is, "utf-8");

BufferedReader br = new BufferedReader(isr);

String line = null;

while ((line = br.readLine()) != null) {

// System.out.println(line.toString()); //输出内容

}

}catch (IOException e){

e.printStackTrace();

}

}

}

/**

* html转pdf

*

* @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径

* @param destPath pdf保存路径

* @return 转换成功返回true

*/

public static boolean convert_landscape(String srcPath, String destPath) {

File file = new File(destPath);

File parent = file.getParentFile();

//如果pdf保存路径不存在,则创建路径

if (!parent.exists()) {

parent.mkdirs();

}

StringBuilder cmd = new StringBuilder();

cmd.append(toPdfTool);

cmd.append(" --page-size A4 "); //设置纸张;

cmd.append(" --orientation Landscape "); //方向;

cmd.append(" --margin-top 10px --margin-right 10px --margin-bottom 10px --margin-left 10px ");//设置边距

cmd.append(srcPath);

cmd.append(" ");

cmd.append(destPath);

boolean result = true;

try {

Process proc = Runtime.getRuntime().exec(cmd.toString());

HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());

HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());

error.start();

output.start();

proc.waitFor();

} catch (Exception e) {

result = false;

e.printStackTrace();

}

return result;

}

就这两个方法,把http的连接传入即可。

好了,pdf有了,那就是查看,打印的问题。这里又坑爹的问题,chrome上可以直接浏览pdf并且打印,但万恶的IE就没有那么爽了。但是不是没有办法解决,考虑到使用的用户大多习惯于IE或360之类的,所以IE上的打印还是得解决。

第一次选择了pdf.js,说实话,这些控件都很好,用起来也非常方便,只是有一些问题实在是折腾人了。我使用了pdf.js在IE,chrome浏览都很好,打印就不行了,IE直接不输出内容,chrome打印出来的内容失真了。没有时间去研究到底是什么问题造成的。换吧。

第二次选择了pdfobject.js,先说明一下pdf.js的确实方法,无需安装任何插件就可以浏览。但pdfobject.js就不行了,在IE下需要安装Adobe Acrobat Reader DC,

然后就是pdfoject.js的使用了。

var option = {

fallbackLink: "

has error

",

pdfOpenParams:{

view: 'FitV',

zoom:"80",

pagemode:"none"

}

}

PDFObject.embed("${root!}${pdf_path!}", document.body,option);

就这一句,embed第一个参数就是pdf的连接,IE下adobe reader 默认不是预览模式,界面很多功能菜单,非常地丑。

在配置的时候记得要把:pagemode:"none"这句加上,具体的参数可参考下面的说明文档。

http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf

加上后,效果扛扛的。

至此,web打印的问题解决了。

linux web打印,曲折的 web 打印解决方法相关推荐

  1. java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法

    当前位置:我的异常网» J2EE » 急项目发布后java写的打印功能失效了-求解解决方法 急项目发布后java写的打印功能失效了-求解解决方法 www.myexceptions.net  网友分享于 ...

  2. 打印时总跟出一页计算机主的纸,打印机只打印一页却重复不停打印的原因之一和解决方法...

    打印机只打印一页却重复不停打印的原因之一和解决方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 打印机和电脑配套使用时,会出现各种各样问题,就比如有时候设定只打印一页纸,打印机却重复在打印,今天小编以w ...

  3. spark master web ui 端口8080被占用解决方法

    spark master web ui 端口8080被占用解决方法 Spark master web ui 默认端口为8080,当系统有其它程序也在使用该接口时,启动master时也不会报错,spar ...

  4. 打印机自动打印之前的页面的解决方法

    现象:电脑重新启动后,打印机自动打印之前的页面. 解决方法如下:(仅供参考) 1. 单击电脑左下角"开始"→"打印机和传真".在"打印机和传真&quo ...

  5. 计算机Excel如何去表格线条,电脑中excel打印没有表格线的解决方法

    excel是我们经常会用到的一款办公应用,功能十分强大.不过,很多用户表示自己在编辑excel的时候,是有线条的,可是在打印的时候却没有了,那么如何设置呢?下面,就随系统城小编一起看看电脑中excel ...

  6. 打印机可以打印不能扫描怎么弄_win10系统下打印机可以打印但不能扫描的解决方法...

    大家都知道打印机不仅可以打印文件,还可以扫描文件进行打印,然而有不少用户升级到win10系统之后,却发现打印机可以打印,但是不能扫描,碰到这样的问题该怎么办呢,接下来给大家讲解一下win10系统下打印 ...

  7. Win10一打印就蓝屏关机解决方法

    <Win10一打印就蓝屏关机解决方法> 方法1: 登陆官网cn.hprt.com,点击驱动下载,搜索您的打印机型号,重新安装一下打印机驱动,打印蓝屏是打印机的驱动和新更新的系统补丁导致的, ...

  8. 计算机word打不原因什么意思,电脑上Word无法进行打印的原因分析和解决方法

    我们在Word上编辑文档,开会时需要打印成纸质的,这时就需要使用到打印机了,但是有用户反映说,在电脑上的Word无法使用打印机进行打印,这是怎么回事,该怎么来解决?造成Word无法使用打印机进行打印的 ...

  9. win10打印机0x8007007e无法_win10无法打印网页:0x8007007e的解决方法听语音

    win10无法打印网页:0x8007007e的解决方法听语音 原创|浏览:37975|更新:2020-04-10 12:13|标签:电脑 打印 win10无法打印网页:0x8007007e的解决方法1 ...

  10. 办公软件之excel打印时打印区域与纸张不符解决方法

    在办公的同时 难免要遇到作一些表之类的 但是呢 也会常常遇到一些棘手的问题 那么我们接下来就解决一下这个办公软件之excel打印时打印区域与纸张不符解决方法 一:首先插入分页符 有助于我们排版的方便  ...

最新文章

  1. 一文盘点MWC 2019所有5G设备和研发进展
  2. mysql存储过程获取sqlstate message_text
  3. 【推荐】会开发和懂开发的区别
  4. Android——SQLite实现面向对象CRUD
  5. 启明云端分享| ESP8266\ESP32-C3\ESP32-C2三款芯片从核心系统、WIFI射频和基带、外围设备等都有哪些区别
  6. Linux学习之系统编程篇: 阻塞信号集、未决信号集、自定义信号集
  7. 数据结构与算法一篇帮助你吃下KMP算法
  8. 计算机基础及应用笔试,计算机基础及应用测试笔试题
  9. 互联网日报 | 6月4日 星期五 | 蚂蚁消费金融获批开业;腾讯云四个国际数据中心同步开服;滴滴App上线“老人打车”模式...
  10. Redis如何做内存优化?
  11. Vista曝致命漏洞 10秒钟可让系统崩溃
  12. 《你必须知道的.NET》抽奖温暖启动
  13. lzg_ad:在XP Professional上面实现EWF功能
  14. 潘丽云:魏尔斯特拉斯的复变函数思想分析(2009)(2011-01-14 22:34:30)
  15. catia怎么进入装配_catia装配详细教程
  16. JAVA 协程Quasar初探
  17. 入门学习MNIST手写数字识别
  18. html表格分行分列,excel表格内怎样设置分行和分列
  19. 错误 C4996 inet_addr: Use inet_pton() or InetPton() instead or defin
  20. c语言程序24转换12时间,C语言将24小时制转换为12小时制的方法

热门文章

  1. 移动手机版网页模板集合
  2. 【单目3D目标检测】项目实战-道路车辆/行人3D目标检测
  3. c#中delegate使用
  4. java防沉迷代码_unity 防沉迷PlayerId接入流程
  5. 港中文Adobe提出:开放式实体分割 Open-World Entity Segmentation
  6. 蓝桥杯试题 基础练习 十六进制转十进制
  7. PostgreSQL-psql命令详解
  8. 严蔚敏《数据结构》——链栈
  9. “无人超市”信用测试:有人扔10元抱走名贵烟酒
  10. PPT2013 动画应该这样玩-秦川-专题视频课程