将 wkhtmltopdf 与 Rails 一起使用时,从 S3 检索许多 SVG 图像时出现 UnknownNetworkError
UnknownNetworkError when retreiving many SVG images from S3 when using wkhtmltopdf with Rails
对于我正在进行的项目,我在 rails
应用程序中使用 pdfkit
/wkhtmltopdf
生成包含许多图像的 PDF 文档。 “许多”在这种情况下意味着 750+。图片资源比较小,每张4kb左右
代码的人为版本如下所示。
- (1..750).each do |i|
img src="https://bucket.s3.com/prefix/to/image-#{i}/image.jpeg"
这适用于一组 JPEG 图像(S3 允许大量读取)。我还有一组同名的 SVG 图像。我正在尝试使用 SVG 来减小图像资源的大小。
运行同样的PDF转换,我运行变成如下错误。
Exit with code 1 due to network error: UnknownNetworkError
[633b88d9-25e7-41a5-a6f6-325829cf2be8] (0.7ms) ROLLBACK ...
[633b88d9-25e7-41a5-a6f6-325829cf2be8] Command failed (exitstatus=1): /Users/harrylewis/.rbenv/versions/2.6.6/bin/wkhtmltopdf --quiet --page-size Letter --margin-top 0.5in --margin-right 0.5in --margin-bottom 0.5in --margin-left 0.5in --encoding UTF-8 --dpi 1000 --orientation Landscape --print-media-type --zoom 1.3 - report.pdf
[633b88d9-25e7-41a5-a6f6-325829cf2be8] method=GET path=/report format=json controller=ReportsController action=report status=500 error='PDFKit::ImproperWkhtmltopdfExitStatus: Command failed (exitstatus=1): /Users/harrylewis/.rbenv/versions/2.6.6/bin/wkhtmltopdf --quiet --page-size Letter --margin-top 0.5in --margin-right 0.5in --margin-bottom 0.5in --margin-left 0.5in --encoding UTF-8 --dpi 1000 --orientation Landscape --print-media-type --zoom 1.3 - document.pdf' duration=9034.00 view=0.00 db=8.59
[633b88d9-25e7-41a5-a6f6-325829cf2be8]
PDFKit::ImproperWkhtmltopdfExitStatus - Command failed (exitstatus=1): /Users/harrylewis/.rbenv/versions/2.6.6/bin/wkhtmltopdf --quiet --page-size Letter --margin-top 0.5in --margin-right 0.5in --margin-bottom 0.5in --margin-left 0.5in --encoding UTF-8 --dpi 1000 --orientation Landscape --print-media-type --zoom 1.3 - document.pdf
但是,我能够成功生成 PDF 运行,图像数量少于 600 张。
是否有人能够提供有关此处可能发生的情况的见解?
我尝试过的一些故障排除步骤。
- 通过在应用程序的网页上显示它们,确保我尝试访问的所有图像实际上都可以访问并存在。
一些版本信息。
pdfkit
- 0.8.4.2
rails
- 5.2.4.4
wkhtmltopdf
- 0.12.5 (with patched qt)
如果我能提供更多信息,请告诉我。
我设法弄清楚了这里的问题。
事实证明 wkhtmltopdf
版本 0.12.5
中存在一个已知错误,在 this GitHub thread.
上被提及和讨论
事实证明,该问题会影响所有图像资源,而不仅仅是 SVG 图像。我在尝试使用 SVG 图像时才注意到它的原因是因为 JPEG 图像错误是 ignored/silenced。当 运行 带有 --debug-javascript
标志的工具时,我能够进一步研究这种细微差别。
根据 GitHub 线程,此问题也存在于 wkhtmltopdf
的最新版本中,版本 0.12.6
。
解决方法
GitHub 线程中提到的一种变通方法(在我的案例中有效)是使用 HTTP 协议代替图像 URL 中的 HTTPS。这会引入一些安全问题,因此您可能会也可能不会这样做。
对于我正在进行的项目,我在 rails
应用程序中使用 pdfkit
/wkhtmltopdf
生成包含许多图像的 PDF 文档。 “许多”在这种情况下意味着 750+。图片资源比较小,每张4kb左右
代码的人为版本如下所示。
- (1..750).each do |i|
img src="https://bucket.s3.com/prefix/to/image-#{i}/image.jpeg"
这适用于一组 JPEG 图像(S3 允许大量读取)。我还有一组同名的 SVG 图像。我正在尝试使用 SVG 来减小图像资源的大小。
运行同样的PDF转换,我运行变成如下错误。
Exit with code 1 due to network error: UnknownNetworkError
[633b88d9-25e7-41a5-a6f6-325829cf2be8] (0.7ms) ROLLBACK ...
[633b88d9-25e7-41a5-a6f6-325829cf2be8] Command failed (exitstatus=1): /Users/harrylewis/.rbenv/versions/2.6.6/bin/wkhtmltopdf --quiet --page-size Letter --margin-top 0.5in --margin-right 0.5in --margin-bottom 0.5in --margin-left 0.5in --encoding UTF-8 --dpi 1000 --orientation Landscape --print-media-type --zoom 1.3 - report.pdf
[633b88d9-25e7-41a5-a6f6-325829cf2be8] method=GET path=/report format=json controller=ReportsController action=report status=500 error='PDFKit::ImproperWkhtmltopdfExitStatus: Command failed (exitstatus=1): /Users/harrylewis/.rbenv/versions/2.6.6/bin/wkhtmltopdf --quiet --page-size Letter --margin-top 0.5in --margin-right 0.5in --margin-bottom 0.5in --margin-left 0.5in --encoding UTF-8 --dpi 1000 --orientation Landscape --print-media-type --zoom 1.3 - document.pdf' duration=9034.00 view=0.00 db=8.59
[633b88d9-25e7-41a5-a6f6-325829cf2be8]
PDFKit::ImproperWkhtmltopdfExitStatus - Command failed (exitstatus=1): /Users/harrylewis/.rbenv/versions/2.6.6/bin/wkhtmltopdf --quiet --page-size Letter --margin-top 0.5in --margin-right 0.5in --margin-bottom 0.5in --margin-left 0.5in --encoding UTF-8 --dpi 1000 --orientation Landscape --print-media-type --zoom 1.3 - document.pdf
但是,我能够成功生成 PDF 运行,图像数量少于 600 张。
是否有人能够提供有关此处可能发生的情况的见解?
我尝试过的一些故障排除步骤。
- 通过在应用程序的网页上显示它们,确保我尝试访问的所有图像实际上都可以访问并存在。
一些版本信息。
pdfkit
-0.8.4.2
rails
-5.2.4.4
wkhtmltopdf
-0.12.5 (with patched qt)
如果我能提供更多信息,请告诉我。
我设法弄清楚了这里的问题。
事实证明 wkhtmltopdf
版本 0.12.5
中存在一个已知错误,在 this GitHub thread.
事实证明,该问题会影响所有图像资源,而不仅仅是 SVG 图像。我在尝试使用 SVG 图像时才注意到它的原因是因为 JPEG 图像错误是 ignored/silenced。当 运行 带有 --debug-javascript
标志的工具时,我能够进一步研究这种细微差别。
根据 GitHub 线程,此问题也存在于 wkhtmltopdf
的最新版本中,版本 0.12.6
。
解决方法
GitHub 线程中提到的一种变通方法(在我的案例中有效)是使用 HTTP 协议代替图像 URL 中的 HTTPS。这会引入一些安全问题,因此您可能会也可能不会这样做。