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打印的问题解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FastReport.NET Web打印是一款基于FastReport.NET报表引擎的网页打印解决方案。它提供了一个简单而强大的工具,允许开发人员直接在Web应用程序中生成和打印报表。 FastReport.NET Web打印有以下几个主要特点: 1. 强大的报表设计工具:FastReport.NET提供了一个直观、易于使用的报表设计器,开发人员可以通过拖放方式添加数据和控件,自定义报表样式和布局,轻松设计出符合需求的报表。 2. 多种数据源支持:FastReport.NET Web打印支持多种数据源,包括数据库、XML文件、JSON数据等,可以方便地从不同来源获取数据进行报表生成。 3. 支持多种输出格式:FastReport.NET Web打印支持多种输出格式,包括PDF、Excel、Word、图片等,用户可以将报表输出为多种常见的文件格式,方便保存和分享。 4. 可定制的报表模板:开发人员可以根据需求创建自定义的报表模板,包括添加公司Logo、设置页眉页脚、调整字体颜色、样式等,实现报表的个性化定制。 5. 跨平台支持:FastReport.NET Web打印可以在各种操作系统和浏览器上运行,包括Windows、Linux、Mac等,兼容主流的浏览器,如Chrome、Firefox、IE等。 6. 安全性保障:FastReport.NET Web打印提供了安全的报表导出和打印功能,可以通过权限控制、加密处理等手段来保障报表数据的安全性。 总之,FastReport.NET Web打印是一种高效、灵活、易用的网页打印解决方案,可以帮助开发人员快速生成和打印各种类型的报表,提升工作效率,满足不同用户需求。 ### 回答2: FastReport.Net是一款优秀的报表生成工具,它不仅可以在桌面应用程序中生成报表,还可以在web应用程序中进行报表打印。 FastReport.Net Web打印功能允许我们在web浏览器中直接打印报表,而无需将报表导出为PDF或其他格式再进行打印。这样可以大大简化打印流程,节省时间和工作量。 要使用FastReport.Net进行Web打印,我们需要在web应用程序中引入FastReport.Net的相关库文件,并创建报表模板。报表模板的设计可以通过FastReport.Net提供的可视化设计器完成,也可以通过代码进行动态生成。 在Web应用程序中,我们可以通过浏览器中的打印按钮或者自定义的打印按钮来触发打印操作。当用户点击打印按钮时,FastReport.Net会将报表模板加载,并根据数据源中的数据生成报表内容。 FastReport.Net提供了丰富的打印选项,包括打印份数、纸张类型、页眉页脚、页码等。我们可以根据需要自定义这些选项,以满足打印要求。 同时,FastReport.Net还支持导出报表为PDF、Excel、Word等格式,以满足不同的使用需求。导出的报表可以方便地保存、打印或分享给其他人。 总之,FastReport.Net的Web打印功能使得在web应用程序中生成和打印报表变得简单高效。它的强大功能和简便操作为我们提供了一个便捷而强大的报表打印解决方案。 ### 回答3: FastReport.Net是一个用于创建报表的.NET框架。它具有强大的报表设计工具和丰富的功能,可以帮助开发人员快速而轻松地创建各种报表。 FastReport.Net支持Web打印的功能,可以将报表轻松地集成到Web应用程序中。用户只需要通过Web浏览器访问应用程序,就可以查看和打印报表。这为用户提供了方便和灵活的报表访问方式。 使用FastReport.Net进行Web打印非常简单。开发人员只需设计好报表并将其与Web应用程序集成,然后将报表保存为指定的格式,如PDF或HTML。当用户在Web应用程序中请求打印报表时,应用程序会动态地生成报表文件,并将其提供给用户进行打印。 通过FastReport.Net的Web打印功能,用户可以方便地打印报表,无需额外安装任何软件或工具。报表可以在任何设备上打印,包括计算机、平板电脑和手机等。 此外,FastReport.Net还提供了自定义打印设置和打印预览功能,用户可以根据自己的需求设置打印样式,并在打印之前预览报表的内容。这为用户提供了更加个性化和精确的报表打印体验。 总而言之,FastReport.Net的Web打印功能为用户提供了方便、灵活和个性化的报表打印方式。无论是开发者还是最终用户,都能够从中受益并轻松地实现报表的访问和打印

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值