问题标签 [wkhtmltopdf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
63521 浏览

html - 使用 wkhtmltopdf 从 HTML 生成 Google Web 字体和 PDF

我正在使用wkhtmltopdf将 HTML 文件转换为 PDF 格式;它提供了令人惊讶的好结果,完全按照 WebKit 的方式呈现 PDF。

我正在使用Google Web Fonts让用户可以自定义他们编辑的文档的外观,让他们可以在几种字体之间进行选择。它也可以在浏览器中完美运行。

问题是,在使用 wkhtmltopdf 将此类 HTML 文件转换为 PDF 时,我无法使用 Google 字体。我读到其他人也有同样的问题

谁能帮我解决这个问题?

编辑:直接在 CSS 中声明 @font-face 也不起作用。

0 投票
2 回答
3707 浏览

c# - 如何正确使用 WkHTMLToSharp 将 HTML 文件转换为 PDF?

我需要将一堆 HTML 文件(大约 30 个)转换为 PDF。如果我可以创建目录和链接页面会很棒,但现在我很乐意转换单个文件:)

我已经尝试了几种解决方案,最成功的是 EO.PDF,但它在每一页上都放了一个讨厌的水印,它无法处理超过几兆的文件,我的一些是 10 兆以上。

我已经阅读了很多关于 wkhtmltopdf 的好东西,并且我找到了它的包装器 WkHTMLToSharp。我找不到任何文档,所以我拼凑了以下代码,这是抛出异常。我将不胜感激任何帮助解决这个问题。

我注意到导致异常的行。(非常无用的)例外是:

- 代码 -

在解决了缺少 DLL 的问题后,我发现那段代码实际上转换了 HTML 字符串,而不是文件。我可以使用它,但更喜欢使用 HTML 文件。

此外,PDF 文件中没有显示任何图像。它们都是 JPG(我知道 GIFS 存在问题)。

0 投票
4 回答
3935 浏览

c# - 如何在 C# 中使用带有图像的 WkHTMLToSharp / wkhtmltopdf 将 HTML 文件转换为 PDF

我正在动态生成 HTML 文件,我想从最终文件创建一个 PDF。我正在使用以下内容生成 HTML 文件:

完成后,我想调用以下函数来生成 PDF 文件:

我发现 .Convert 函数会将 HTML 代码转换为 PDF,而不是文件。其次,当我直接传入 HTML 代码时,图像不会出现在 PDF 中。我知道 .GIF 文件存在问题,但这些都是 .JPG 文件。

我已经阅读了很多关于 wkhtmltopdf 有多好的文章,并且编写 WkHTMLToSharp 的人在 SO 上发布了他的项目,但我对缺乏文档感到失望。

我希望能够传入要转换的文件,更改边距(我知道这是可能的,我只需要找出正确的设置),让它正确转换图像,最重要的是,不要分解我的项目跨多个页面(支持“page-break-inside:avoid”或类似的东西)。

我很想看看其他人是如何使用它的!

0 投票
0 回答
967 浏览

c++ - 在 wkhtmltopdf/QPrinter 中使用 PDF 核心字体

简而言之的问题:

  1. 生成pdf时是否可以强制wkhtmltopdf使用Type1字体(PDF核心字体)?
  2. 或者:生成pdf时是否可以强制Qt QPdfEngine使用Type1字体(PDF核心字体)?

问题的详细描述。

我开发了一个 webapp 来使用 wkhtmltopdf 和 tcpdf 对一个非常大的数据库进行 pdf 导出。(900 多个)页面使用 wkhtmltopdf “打印”,然后使用 tcpdf 和 fpdi “粘合在一起”。

不幸的是,wkhtmltopdf 似乎总是嵌入它用来呈现 pdf 的字体。这是非常不受欢迎的行为,因为这是多余的并且会使文档膨胀。此外,该文档需要在 Acrobat Pro 中可编辑。显然 Acrobat Pro 似乎被嵌入的字体淹没了。它会在保存文档时尝试替换它们,并在 Windows 机器上大约 45 分钟后挂起(在 Mac 机器上,保存文档需要非常长的时间)。

那么:是否有可能告诉 wkhtmltopdf 不要嵌入字体并改用 Type1 Fonts (Helvetica)?

我找不到任何开关来做到这一点,所以我假设修补 wkhtmltopdf 可以通过使用来解决问题:printer->setUseEmbeddedFonts(false)

不幸的是,这并没有改变任何东西。

我的下一个想法是修补 Qt-PDF-Printer。查看 QPrinter-Class 和 QPrintEngine 我没有找到 pdf 引擎使用 Type1 字体而不是嵌入 TTF-Fonts(或使用任何字体)的任何地方。

有什么想法和/或指示吗?

0 投票
2 回答
13997 浏览

php - 通过php执行命令行?

我如何通过 php 执行这两个命令行:

wkhtmltopdf www.google.com gg.pdf

&

oofice -headless -nologo -pt cup-pdf my.doc

他们都返回一个pdf文件并下载到我的主目录中。

我想知道如何通过 php 从我的 html 页面执行这些命令。

谢谢。

0 投票
1 回答
1273 浏览

ruby-on-rails - wkhtmltopdf 无法正确使用字体

我使用绝对 URI 来引用字体文件,但出现此错误:

对调试没有任何用处。我无法在本地安装字体,因为我在共享主机上(这意味着我无法避免使用@font-face)。调试时,html页面渲染得很好;生成 PDF 时,出现错误。如果我尝试使用 base64 编码直接嵌入字体,则不会应用该字体(默认为另一种字体)。

进一步测试:

只有在应用@font-face 规则时,它才会无缘无故地失败。如果我将样式媒体设置为“打印”,则没有错误 - 但也没有字体。当我将它设置为“全部”并且字体是 a) 正确引用或 b) 直接通过 base64 编码输入时 - 它失败了。

0 投票
0 回答
635 浏览

css - linux web 主机上的 TTF 字体看起来不同

我试图让我的 Rails 应用程序将“Gabriola.ttf”识别为系统安装的字体,这样我就可以使用 wkhtmltopdf 生成 PDF 而不必使用 @font-face(因为它在打印时在 webkit 中不起作用) . 这是我到目前为止所做的:

1) 将我的“Gabriola.ttf”字体文件从我的 Windows 7 字体目录复制到我的网络主机上的 ~/.fonts。
2) 运行 fonts.dir
3) 运行 fonts.scale
4) 运行 fc-cache -f -v

此时,当我发出“fc-list : family |sort”时,字体系列“Gabriola”正在被识别。问题是当我生成 PDF 时,字体看起来一点也不像 Gabriola。我已经通过发布 CSS 后备字体测试了它是否只是默认为不同的字体,但它保持不变。文件有问题,还是什么?我也尝试将 .ttf 转换为 .pfa 但结果是一样的。

0 投票
1 回答
1168 浏览

fonts - 获取 wkhtmltopdf 识别用户字体文件夹

我想我的问题在这里找到了……我在我的 ~/.fonts 目录中安装了一些非标准字体并运行“mkfontdir”和“mkfontscale”。当我用“fc-list”列出字体时,字体就会出现。问题仍然是 wkhtmltopdf 无法识别它们。可以识别其他系统字体,例如“Courier 10 Pitch”……只是不是我的用户目录中的字体。那么有没有办法让 wkhtmltopdf(或就此而言,webkit)识别我文件夹中的字体?我必须通过 ssh 做些什么,或者我可以在 ruby​​ 中设置一个选项吗?

0 投票
0 回答
333 浏览

duplex - wkhtmltopdf 双面打印

有人知道双面打印的方法。所以我有问题,因为我有很多陈述的摘要文件。我必须双面打印,问题在于打印它,因为有时语句有奇数页,最后一页打印在第一页下一个语句上。

有什么想法的人。谢谢!

0 投票
2 回答
3258 浏览

php - PHP中长命令的exec()问题

我在我的服务器上使用 wkhtmltopdf 将 HTML 文档传输到 PDF。当我使用短 URL 时,它工作得很好:

当我使用长命令时会出现问题,例如:

请注意,当我直接从 Putty 运行这个长命令时,它可以完美运行。

问题是当我使用 exec(或 shell_exec() 或 system() 或 passthru())时,页面会一直加载,而我的网络服务器不再响应。我必须自己从 Putty 关闭进程(ps -x 然后杀死 PID)。

请注意,如果我删除 ?phpsid= 它工作得很好,这就是为什么我说问题只发生在长命令。如果我删除 ?phpsid=d8dbfbb91c0748d91426441e67aaf2b6 并将其替换为 ?anything=ImAAmAVeryLongStringThatDoNothing 它也不起作用。

我在 CentOS 5 上使用 WHM/cPanel。提前感谢您的帮助!

编辑:

我试过 urlencode(),没用。
我尝试了 escapeshellarg(),命令正确传递但不起作用。
我尝试使用短参数,命令正确传递但不起作用。

编辑2:

使用 exec()、system() 或 passthru() 时是否有字符串长度限制?

编辑3:

最后,感谢Wrikken,问题是我在 URL 中传递了 session_id(),然后我在 exec() 中重新使用了它。我不得不添加 session_write_close(); 在我的 exec() 之前,PHP 会解锁当前会话以使其可被 exec() 中的脚本更改为红色。有关更多信息,请参阅下面的评论。