linux web打印,曲折的 web 打印解决方法

最近做一个项目,是关于报告之类的,涉及到报告打印这个功能,真是坑了个爹啊。在网上找了很多方法,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 默认不是预览模式,界面很多功能菜单,非常地丑。

a68175545c706c9d20479b046ebaba6a.png

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

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

加上后,效果扛扛的。

b8f95273ac1550e67dbfbd11551051ed.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国开源正在走向成熟!

作者 | 唐小引、陈利鑫、屠敏 出品 | CSDN(ID:CSDNnews) 2020 年 7 月 15 日,由中国开源软件推进联盟(COPU)主办,赛迪传媒、《软件和集成电路》杂志社联合承办,CSDN 独家直播的 2020…

哪些城市有PMP考试考点?PMP考试考场都在哪?

有不少伙伴对PMP的考试点存在一定的疑问,全国PMP考试具体考点位置是在哪呢? 根据过往常用考点,我们给大家汇总了2022年PMP考试全国考场地址,一起来看看吧! 表格信息来自基金会官网11月27日PMP报名通知,仅作…

杰华特科创板上市:市值227亿 华为英特尔联想是股东

雷递网 雷建平 12月23日 杰华特微电子股份有限公司(简称:“杰华特”,股票代码为:“688141” )今日在科创板上市,发行价为38.26元。 杰华特此次发行5808万股,发行价为38.26元,募资总额…

基于STM32的28步进电机模块使用笔记

1、本次笔记所使用的器件。 (1)STM32F103VET6(野火开发板) (2)DM420S(海嘉杰创) (3)28步进电机带丝杆滑台(海嘉杰创) (4&a…

开发语言为verilog.基于fpga的多功能信号函数发生器设计

开发语言为verilog.基于fpga的多功能信号函数发生器设计。 能够产生6种波形。 其中矩形波的占空比从10%到90%可调。 输出频率和幅值可调。 原始工程适配与北京杰创永恒科技的ep4ce40实验箱。 又移植到100t开发平台上。 所以有quartus和vivado两个工程。 有完整仿真代码。 第一个…

ChatGLM-6B LLM大模型使用;P-Tuning微调;prompt角色扮演

ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。 本机显卡只有6G(GTX 1660 Ti),所以刚好可以使用,用户可以在消费级的显卡上进行本地…

使用jatoolsPrinter实现套打

最近在工作中遇到了套打的需求,前前后后,花了不少时间,现在总结一下套打的实现方式。 一、设计思路 1、将待打印的文档扫描生成图片,作为网页的背景图片。 2、通过css将待打印的文字进行定位 3、使用jatoolsPrinter插件打印已定位好的网页信息。 二、设计实现 1、下载…

【编译原理】【C语言】实验一:手动构造词法分析器

C语言 实验环境:Visual Studio 2019 author:zoxiii 词法分析器 1、实验内容2、前期准备2.1 待分析的C语言子集的词法2.2 C语言子集的单词符号表示表2.3 C语言子集对应的状态转换图 3、分析过程3.1 词法分析子程序3.2 主程序3.3 源代码 4、测试5、遇到的问…

编译原理实验(1) 开发环境的安装与配置

flex词法分析器的安装与配置 版本:使用的Flex分析器版本为2.5.4。 下载并使用安装程序安装。 进行环境变量的设置: 此电脑–右键–属性–高级系统设置–环境变量 在系统变量中找到PATH,将flex安装后的bin目录加入PATH; 找到CLA…

Eclipse:使用Eclipse创建一个Java小练习项目

1、创建工程 就是说现在创建的工程是符合java的工程,而我们创建的是JAVAEE的工程,要不要使用java的透视图,这里选择 NO:https://blog.csdn.net/weixin_63610637/article/details/125099915?spm1001.2014.3001.5501http://这里选择yes的&…

反垃圾邮件网关工作原理-Coremail带你了解杰创智能如何使用邮件网关安全升级

杰创智能科技股份有限公司(以下简称杰创智能)成立于2008年,于2022年在深交所创业板挂牌上市。 公司采用广州、北京双总部运作模式,在全国范围内设立近30家分支机构,业务覆盖全国辐射全球。 随着杰创智能业务的飞速发展&#xff0…

零代码编程:用ChatGPT打造小宇宙播客下载软件2.0

之前用ChatGPT写了一个简单的小宇宙播客下载应用,但是实际使用一段时间后,发现有几个问题,比如:如果文件名中有一些特殊符号,下载不成功;有些m4a格式的也下载不成功;文件大下载的慢;…

零代码编程:用ChatGPT批量下载播客音频文件

国外有很多优质的播客podcast资源,且都是可以免费下载的。 比如,我们想下载ChatGPT相关的播客。可以先打开播客搜索网站:https://podnews.net/ 在搜索框里面输入:ChatGPT,上面是stories,往下拉一下&#x…

流量玩家必看,微信问一问轻松获取200+引流秘籍

最近,微信推出了全新的“问一问”功能,为流量玩家带来了巨大的流量红利。这一新的流量入口势必成为流量玩家们追逐的热门目标。 “问一问”可以被视为一个问答型平台,可以简单理解为“微信版的知乎”。熟悉在知乎上进行问答引流的人都知道&am…

DNSPod十问林洪祥:顶级带货主播,其实是数字人?

本期嘉宾 林洪祥 风平智能CEO 林洪祥,风平智能CEO。风平智能拥有全球领先的数字人AIGC预训练大模型技术,利用数字人AI知识大模型打造视频版ChatGPT,实现数字人名师、数字人医生、数字人保险客服、数字广告模特、数字人AI直播等,…

chatgpt赋能python:Python机器学习手册

Python机器学习手册 介绍 Python机器学习手册提供了从数据预处理到深度学习的全面指南。本手册适合有一定Python编程经验的工程师和数据科学家。 数据预处理 数据预处理是机器学习流程的重要一步,包括数据清洗、特征选择和数据转换等。Python提供了很多数据预处…

机器学习复习(下)

严正声明:本文的答案是ChatGPT的回答,仅供参考,不代表就是正确答案!!! 9.什么是泛化误差和经验误差,是不是越小越好?为什么? 泛化误差:在“未来”样本上的误差 经验误差&#xff…

【回答问题】ChatGPT上线了!请使用C++语言写一个谷歌 LaMDA模型?

【回答问题】ChatGPT上线了!请使用C++语言写一个谷歌 LaMDA模型? 很高兴为您服务!您可以使用以下 C 语言代码来实现 Google LaMDA 模型: 复制 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX

Edge解决默认Bing搜索跳转到国内版的问题

近期BingGPT申请通过以后&#xff0c;每次用PC端Edge去跳转的时候不管是否念Proxy咒都会进入国内版本Bing&#xff0c;排查得到默认Bing参数如下 因此&#xff0c;在edge://settings/searchEngines内添加搜索引擎&#xff0c;具体参数如下&#xff1a; 搜索引擎&#xff1a;必应…

微软Bing突然爆炸级更新!BingChat全面开放,下一代搜索要来啦!

夕小瑶科技说 分享 来源 | 量子位 作者 | 杨净 明敏 所有人都能上手微软Bing了&#xff01; 今天&#xff0c;微软突然官宣全面开放BingChat&#xff1a; 无需任何等待。只需注册一个账户&#xff0c;首页即可体验。 更关键的是&#xff0c;还有一大堆堪称“家底”的新功能来…