请教一个关于 wkhtmltopdf 实现 html 转 pdf 的小问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一个关于 wkhtmltopdf 实现 html 转 pdf 的小问题相关的知识,希望对你有一定的参考价值。

参考技术A wkhtmltopdf 很好用,但也有些不尽人意。就是当一个html页面很长我需要在指定的地方分页那怎么办呢? wkhtmltopdf 开发者在开发的时候并不是没有考虑到这一点,
wkhtmltopdf 有个很好的方法,就是在那个div的样式后添加一个:page-break-inside:avoid;就ok了。
参考技术B 是这样,题主想把雪球上的文章按html格式转成pdf,看到了有个很方便的pdfkit
结果是这样,pdf是转出来了,但有点格式上的错误

>>> import pdfkit
>>> pdfkit.from_url('http://xueqiu.com/9320604669/53827976', 'out.pdf')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\site-packages\pdfkit\api.py", line 24, in from_url
return r.to_pdf(output_path)
File "C:\Python34\lib\site-packages\pdfkit\pdfkit.py", line 109, in to_pdf
if 'cannot connect to X server' in stderr.decode('utf-8'):
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 2362: inval
id start byte

直接用wkhtmltopdf试试

D:\>wkhtmltopdf http://xueqiu.com/9320604669/53827976 out.pdf
Loading pages (1/6)
QWin32PrintEngine::initialize: OpenPrinter failed (RPC ????????á?)%
QWin32PrintEngine::initialize: OpenPrinter failed (RPC ????????á?)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
Exit with code 1 due to network error: UnknownContentError本回答被提问者采纳
参考技术C osx 下面也遇到同样报错,不过pdf倒是生成出来了,同问

wkhtmltopdf 内部链接

【中文标题】wkhtmltopdf 内部链接【英文标题】:wkhtmltopdf internal links 【发布时间】:2013-12-13 01:41:23 【问题描述】:

我正在使用 wkhtmltopdf 从我的 html 模板生成报告,我正在尝试为输出 PDF 生成索引。

问题是我想实现与microsoft word的索引类似的功能。

为此,我需要在文档之间使用多个内部链接,因此当单击 PDF 的索引时,它会转到第 10 页。

关于如何实现这一点的任何线索?

我在 Windows 中使用 wkhtmltopdf 版本 0.11.0 rc2,但迟早我必须将其移至 linux,因此我需要操作系统之间的兼容解决方案。

非常感谢。

【问题讨论】:

【参考方案1】:

我自己找到了解决方案,但我还没有检查与 Linux 的兼容性。

为了实现你在html中添加的内部链接:

链接目标:

 <a name="name_of_target">Content</a>

链接到目标:

 <a href="#name_of_target">Link Text</a>

转换成pdf后效果很好。

【讨论】:

是的,这是在 HTML 中创建内部链接的经典方法。在 wkhtmltopdf 中,请记住,如果您编辑 PDF(例如添加/删除页面),链接可能会损坏。 我已经注意到了,因为我稍后要添加首页。所以为了解决这个问题,我在开始时添加了一个空页面,稍后用首页替换它,这样做我得到的链接在修改后仍然有效。 在 wkhtmltopdf 中还有一个选项可以从单独的 HTML 文件中进行覆盖,使用 cover /path/to/cover.html 选项。我使用它,但它确实限制了使用,因为 wkhtmltopdf 并不能很好地处理复杂的布局。【参考方案2】:

我对 wkhtmltopdf 也有同样的问题

wkhtmltopdf 0.12.2.1 (with patched qt)

debian 9 随软件包一起安装。

wkhtmltox-0.12.2.1_linux-jessie-amd64.deb

我使用命令选项启用了内部链接

--enable-internal-links

我使用了目标:

 <a name="name_of_target"><div><img src="image.png">Content</div></a>

还有链接

 <a href="#name_of_target">Link Text</a>

但仍然无法正常工作,文档中的其他链接运行良好。 然后我用跨度替换了 div 并且它起作用了。

 <a name="name_of_target"><span><img src="image.png">Content</span></a>

该问题与 div 元素的 显示块 规则有关。当我将 display block 规则添加到 span 时,链接不再起作用。

【讨论】:

【参考方案3】:

这可能很棘手。例如。不可见(空)链接不能作为目标。此外,结构似乎很重要,并非所有有效的 html5 布局都有效。例如。我发现虽然这有效:

<h2><a name="name_of_target">Target</a></h2>

这不是:

<a name="name_of_target"><h2>Target</h2></a>

尽管两者都是完全有效的(在 html5 中)。 (我使用的是 0.12.6 版本。)

【讨论】:

以上是关于请教一个关于 wkhtmltopdf 实现 html 转 pdf 的小问题的主要内容,如果未能解决你的问题,请参考以下文章

wkhtmltopdf 内部链接

Java操作wkhtmltopdf实现Html转PDF

请教一个php数组循环的问题,知道的大神指导一下!

请教关于drawRect的调用问题

请教一个关于tracker server的问题拜托各位了 3Q

请教关于nginx配置404错误页面