我该如何使用Perl将HTML转换为PDF?

13

我需要使用Perl将一些HTML报告转换为PDF。哪些CPAN模块最适合此工作?


这取决于您是否需要支持CSS。大多数解决方案仅支持非常基本的HTML 3.0或更低版本,几乎不支持CSS。 - sventechie
2
尝试使用wkhtmltopdf - http://code.google.com/p/wkhtmltopdf 它是一个控制台 HTML -> PDF 转换器,同时支持 CSS 样式。 - Vit D
6个回答

7

这个在Windows上可用吗?在Windows上运行Perl。 - user2829
是的,它也可以在Windows上运行。参考:CPAN测试者 - Alan Haggai Alavi
1
没有CSS供您使用!注意事项:[...] 这意味着任何使用外部或内联CSS进行设计和布局的HTML,包括但不限于:图像、背景、颜色、字体等,都将不会转换为PDF。 - Pablo Bianchi

3

HTML::HTMLDoc使用底层的htmldoc C库来实现这一功能。而且它运行速度也相当快。


1
截至2011年9月,仅开发(beta)版本1.9支持部分HTML 4.0和CSS。然而它似乎设计得很好,并且有良好的文档记录。 - sventechie

3

PDF::WebKit

我可以使用 PDF::WebKit 在 Perl 中将 HTML 转换为 PDF,它又使用 wkhtmltopdf。从 apt show wkhtmltopdf 可以得到:

命令行实用程序,使用 WebKit 将 HTML 转换为 PDF 或图像 wkhtmltopdf 是一个命令行程序,它允许您从 URL、本地 HTML 文件或 stdin 创建 PDF 或图像。它生成一个类似于使用 WebKit 引擎呈现的 PDF 或图像。

该程序需要 X11 服务器才能运行。

因此,在服务器上,这个解决方案似乎是不可接受的。也许可以考虑使用 Python 构建的 WeasyPrintathenapdf?或者 Pandoc

最新版本是无头的(不需要X服务器)。
安装:
sudo cpanm install PDF::WebKit
sudo apt install xfonts-75dpi
sudo apt install wkhtmltopdf

使用官方网站提供的 .deb 文件获取最新版本。

html2pdf.pl

#!/usr/bin/perl
use PDF::WebKit;
my $kit = PDF::WebKit->new('/tmp/index.html');
my $file = $kit->to_file('/tmp/my.pdf');

样例,index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <title>My Title</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
  <p class="text-primary">.text-primary</p>
  <p class="text-secondary">.text-secondary</p>
  <p class="text-success">.text-success</p>
  <p class="text-danger">.text-danger</p>
  <p class="text-warning">.text-warning</p>
</body>
</html>

screenshot


1

我曾经使用PDF::API2成功地创建了PDF报告。


2
PDF::API2非常强大,但它需要像素级地址来进行布局 - 这对于轻松格式化文本并不好。 - sventechie

1

1

PinceXML

这并不是用Perl来回答你的问题,但据我所知,这是目前最好的HTML转PDF转换器。


我也听说过它的好处。它可以使用Perl进行文档编写(http://www.princexml.com/doc/6.0/perl/),但归根结底就是“使用STDIN / SDOUT”。 - Quentin
PrinceXML似乎很好地支持CSS(其中一位作者参与了原始CSS规范的起草),但是商业使用成本相当高昂。他们还提供了一个CSS示例文件,用于对HTML/XML文档进行分页和格式化书籍。 - sventechie
我在Expected Behavior工作,我们拥有一个名为DocRaptor的HTML转PDF API,它使用Prince作为PDF的渲染引擎。我们的服务是获得Prince质量而无需进行服务器端安装的好方法。http://docraptor.com - illbzo1
1
我们公司已经使用PrinceXML有一段时间了,它真的非常棒。当然,它不是免费或便宜的,但比自己构建要便宜得多。 - Mauritz Hansen

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