将HTML转换为PDF

4

我希望你能帮助我翻译一下关于IT技术的内容,涉及将HTML转换为PDF并在Web APP中使用。请告知可用的工具,并提供其他相关工具。

目前我已经尝试了:

    html2ps htmlfilename > a.ps
    ps2pdf a.ps > a.pdf

但是上述方法不能转换图片并且忽略了CSS。我的开发环境是Linux(RHEL5)。

我还尝试过http://www.webupd8.org/2009/11/convert-html-to-pdf-linux.html,但是出现了以下错误:

  [root@localhost bin]# ./wkhtmltopdf www.example.com a.pdf
  ./wkhtmltopdf: error while loading shared libraries: libQtWebKit.so.4: cannot open shared object file: No such file or directory

4
wkhtmltopdf是你目前最好的选择。让它起作用。 - thirtydot
3个回答

5
您正在正确的道路上: wkhtmltopdf 是最简单的方法。请注意,存储库中的代码可能已过时(不确定此软件包的最新情况);您可能需要从源代码编译它,或获取静态链接版本(它很大,但已经包含了QT库和其他依赖项)。
此外,在您的情况下,您可能只缺少一个库 - 安装libqt4-webkit-dev 可能会解决问题。

0

两种易于实现且适合将HTML+CSS转换为PDF的方法是:

1)使用“Jspdf JavaScript”插件和“html2canvas插件”(Web应用程序)。

  • 插入jspdf插件的稳定版本。

    var script = document.createElement('script'); script.type = 'text/javascript'; script.src ='https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.min.js'; document.head.appendChild(script);

  • 插入html2canvas插件。

    var script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js'; document.head.appendChild(script);

  • 插入以下脚本:

    var html2obj = html2canvas($('your div class here')); var queue = html2obj.parse(); var canvas = html2obj.render(queue);
    var img = canvas.toDataURL("image/jpg"); console.log(img);
    var doc=new jsPDF("p", "mm", "a4"); var width = doc.internal.pageSize.width;
    var height = doc.internal.pageSize.height; doc.addImage(canvas, 'JPEG', 15, 35, 180, 240,'SLOW'); doc.save("save.pdf");

  • IE 11特殊情况。

    document.getElementById("your div here").style.backgroundColor = "#FFFFFF";

2) 使用wkhtmltopdf

  • 这里安装wkhtmltopdf

  • 我们可以直接在终端/命令行中使用wkhtmltopdf,但是在Java语言中,我们有一个包装器可以使用。

  • 使用wkhtmltopdf包装器的代码示例

    import com.github.jhonnymertz.wkhtmltopdf.wrapper.Pdf; import com.github.jhonnymertz.wkhtmltopdf.wrapper.page.PageType; import com.github.jhonnymertz.wkhtmltopdf.wrapper.params.Param; public class PofPortlet extends MVCPortlet {
    @Override public void render(RenderRequest request , RenderResponse response) throws PortletException , IOException
    { super.render(request, response); Pdf pdf = new Pdf();
    pdf.addPage("http://www.google.com", PageType.url); // 添加目录 pdf.addToc(); // "wkhtmltopdf" shell命令接受不同类型的选项,例如全局、页面、页眉和页脚以及目录。请参见“wkhtmltopdf -H”以获取完整说明。 // 所有选项都作为数组传递,例如: // 保存PDF try { pdf.saveAs("E:\\output.pdf"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

3) 其他工具包括phantom.js,itextpdf,grabz.it


-1

可能最简单的方法是启动任何现代浏览器,进入该网站,然后使用浏览器的“打印”功能打印为PDF(假设您的系统已安装PDF打印机)。不过我不知道这在您的情况下是否可行,而且这种方法无法在web应用程序内部使用。不过,您可以尝试一下。


2
但是这个答案的重点是什么?我已经明确提到我想要在我的Web应用程序中使用它。 - Rajeev
这实际上可能是一种有用的方式 - 如果你将其外包给机械土耳其人或类似的服务(在那里您可以自动提交琐碎的任务,并且有人在另一端执行该工作,如果我没记错的话)。每个屏幕截图可能需要几美分,而且很可能会有显着的延迟。 - Piskvor left the building
@rajeev - 耸肩 我在我的回答中提到它不会从Web应用程序中工作,并且这只是将HTML转换为PDF的另一种方式。话虽如此,可能有很多方法来设置一个脚本,简单地让Firefox打开一个网页并将其打印成PDF。 - eykanal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接