如何自动执行HTML到PDF的转换?

时间:2008-10-06 22:34:54

标签: linux perl pdf

我一直在使用htmldoc,但我遇到了一些相当严重的限制。我需要最终解决方案才能在Linux机器上运行。我将从Perl应用程序调用此库/实用程序/应用程序,因此任何Perl接口都是奖励。

16 个答案:

答案 0 :(得分:61)

很抱歉发现这篇旧帖子,但它在我搜索最好的HTML / PDF转换工具时首先出现。 在Linux上wkhtmltopdf非常好(考虑到CSS等)和GPL。

答案 1 :(得分:17)

WeasyPrint可生成带有可选文本和超链接的精美PDF。

wkhtmltopdf

如果您改用wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ... ,请尝试以下选项:

player = AVPlayer(URL: url!)

        layer.player = self.player

        layer.frame = CGRectMake(self.videoView.frame.origin.x, self.videoView.frame.origin.y, self.videoView.frame.width, self.videoView.frame.height)

        print(self.videoView.frame.origin.x) //67
        print(self.videoView.frame.origin.y) //37

        layer.backgroundColor = UIColor.clearColor().CGColor
        layer.videoGravity = AVLayerVideoGravityResizeAspectFill

        self.videoView.layer.addSublayer(layer)

        player.play()

答案 2 :(得分:9)

更新2019-05

谢天谢地,整个过程被TheCodingMachine打包成码头图像:https://github.com/thecodingmachine/gotenberg

这使得在生产环境中基于铬的pdf生成的维护和使用非常顺利且无需使用。

自Chrome 59以来,有一种新的无头模式。由于所有其他解决方案真的很难与更新(或不再那么新)的CSS功能如flexbox,这在我的情况下是产生正确PDF输出的唯一解决方案。 / p>

要从本地html文件创建pdf,只需使用以下命令: chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html

对于Mac OS替代chrome /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

到目前为止我注意到的唯一缺点是(目前)你无法通过stdin传递html,但是创建一个临时文件并不是一个问题。

有关详细信息,请参阅https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom

更新:事实证明,chrome人员很可能会为此任务提供某种节点模块,最终会弃用无头模式(https://bugs.chromium.org/p/chromium/issues/detail?id=719921)。

最好的选择是使用木偶操纵者使用基于节点的方法  https://developers.google.com/web/updates/2017/04/headless-chrome#node下记录的模块,并通过Page.printToPDF命令打印页面,该命令也可以进行一些额外的配置。

当然,您也可以从节点以外的任何其他环境(即PHP脚本)连接到调试控制台websocket。

答案 3 :(得分:8)

PrinceXML是我见过的最好的(它解析常规HTML以及XML / XHTML)。它是如何最好的?我认为Well, it passes the acid2 test非常令人印象深刻

然而,这是非常昂贵的

答案 4 :(得分:7)

我为你做了一些谷歌搜索,并提出了两个选项。可能还有更多,我的谷歌策略是尝试“webkit命令行pdf”和“gecko命令行pdf”,基本上寻找在命令行渲染器中嵌入两个流行的开源渲染引擎的命令行程序。这是我发现的:

Firefox command-line printer - 输出到pdf和png

wkpdf - 虽然这是针对mac的,但它可能非常便携。

答案 5 :(得分:3)

我不会声称这是“最佳”解决方案,但它是我使用的“解决方案”。

HTML输入 - > HTML 2 PS - > PS 2 PDF - > PDF输出

答案 6 :(得分:1)

这将是完全矫枉过正,但您可以下载并安装mirth。它是一个消息路由引擎,但它能够将html转换为pdf,因此您可以将其设置为在文件夹中拾取html文件,转换为pdf,并将pdf放在相同或其他文件夹中。就像我说的那样,矫枉过正,有点学习曲线,但它是免费的,而且java如果你愿意的话你可以在linux上运行它。而你所有的perl应用程序都必须将html放到一个文件中。

答案 7 :(得分:1)

您应该查看http://phantomjs.org/

转换可以通过小脚本rasterize.js完成,然后发出

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf

答案 8 :(得分:1)

您可以安装免费的Calibre,并使用其拥有的ebook-convert命令行实用程序将许多html文档转换为单个epub或pdf。

https://manual.calibre-ebook.com/generated/en/ebook-convert.html

想法来了from here

我还没有使用过它,但是this npm module像下面的bash脚本一样包装了这个过程,但是可能更好;-)

对于我来说,在我的Mac上,我使用以下bash脚本将本地html网站转换为PDF:

convert_html_to_pdf.sh

function show_help()
{
  ME=$(basename $0)
  IT=$(cat <<EOF

  Converts an html file to pdf, epub, mobi or more if you look!

  usage: input.html output.{pdf|epub|mobi}

  e.g. 

  $ME index.html output.pdf 

  Note: Requires Calibre be installed. more info here: https://ebooks.stackexchange.com/a/6285
EOF
  )
  echo "$IT"
  exit
}

if [ "$1" == "help" ]
then
  show_help
fi
if [ "$1" == "--help" ]
then
  show_help
fi

/Applications/calibre.app/Contents/MacOS/ebook-convert $1 $2 --max-levels=1

答案 9 :(得分:1)

此处尚未解决的另一种解决方案是使用API​​。

它们的优点是您可以外部化作业所需的资源,并具有实现最新功能的最新服务(无需更新代码或安装错误修正)。

例如,使用PDFShift,您可以在以下位置通过一个POST请求执行该操作:

  

POST https://api.pdfshift.io/v2/convert/

并传递"source"(URL或原始HTML代码),您将获得二进制的PDF。 (免责声明:我在PDFShift工作)。

这是Python中的代码示例:

import requests

response = requests.post(
    'https://api.pdfshift.io/v2/convert/',
    auth=('user_api_key', ''),
    json={"source": "https://en.wikipedia.org/wiki/PDF", "landscape": False, "use_print": False}
)

response.raise_for_status()

with open('wikipedia.pdf', 'wb') as f:
    f.write(response.content)

您的PDF将位于./wikipedia.pdf

答案 10 :(得分:0)

我发现Electroshot支持现代CSS功能,尤其是布局。这是在wkhtmltopdf苦苦挣扎后在not supporting things like CSS3中显示其年龄之后进行的。

从Electroshot的功能描述:

  

Electroshot使用Electron,它提供了最新的Chrome稳定版本(而不是几年前的版本);这意味着页面就像在浏览器中一样呈现...

我已经能够使用Bootstrap 4设计页面,然后使用Electroshot呈现非常类似于HTML / CSS的PDF。

答案 11 :(得分:0)

这是无头Chrome的一个易于安装的好版本:

https://www.npmjs.com/package/chrome-headless-render-pdf

与“标准”无头镀铬不同,这不会显示恼人的自动生成的页眉和页脚!

或者有unoconv(在后台使用LibreOffice)可以从html制作pdf:

unoconv -f pdf mypage.html

您可以通过软件包管理器将其安装在大多数Linux版本上,例如apt-get install unoconv

对于简单文件而言,这很好而且很容易。如果您需要JavaScript的CSS支持,请使用无头Chrome。

答案 12 :(得分:0)

我已经开始整理tool,以简化常见操作的界面。

您可以像这样将HTML转换为PDF:

$ npm install @lancejpollard/act -g
$ act convert tmp/index.html -o tmp/index.pdf -w 2000px -h 3000px

这将为HTML文件创建一个新的PDF。

如果没有其他内容,请查看源代码,了解如何编写自己的脚本以使用JavaScript进行操作。

答案 13 :(得分:0)

在使用 Calibre 附带的 ebook-convert 命令行工具时,我经常得到很好的结果。

ebook-convert <input.html> <output.pdf>

检查 manual 中的众多调整选项。例如,可以根据 H1/H2/... 标题(或任何使用 XPath 表达式的内容,基本上)自动生成目录。

请注意:Calibre 专注于数字文档,我不知道 ebook-convert 对非常复杂的 HTML 的效果如何。不过值得一试。 :-)

答案 14 :(得分:-1)

您可能想要查看Peernet的“文档转换服务”(http://www.peernet.com/conversion-software/batch-document-converter/)。它在Windows桌面或Windows Server计算机上作为服务运行。它在Web浏览器中打开HTML文档,然后通过打印驱动程序打印它们以创建PDF文档,以便生成的PDF文档看起来就像从浏览器中打印HTML文档一样。

答案 15 :(得分:-1)

wkhtmltopdf 和 wkhtmltoimage 是开源 (LGPLv3) 命令行工具,可使用 Qt WebKit 渲染引擎将 HTML 渲染为 PDF 和各种图像格式。这些完全“无头”运行,不需要显示或显示服务。

如何使用?

  1. 下载预编译的二进制文件或从源代码构建 https://wkhtmltopdf.org/downloads.html

    https://github.com/wkhtmltopdf/wkhtmltopdf

  2. 创建要转换为 PDF(或图像)的 HTML 文档

  3. 通过该工具运行您的 HTML 文档。

用法:wkhtmltopdf input.html output_name.pdf

相关问题