16

我正在使用 wkhtmltopdf 从单个 HTML 文件生成 PDF,使用page-break-before: always. 例如:

<div class="cover">
    Cover Page
</div>
<div class="page">
    Page 1
</div>
<div class="page">
    Page 2
</div>

使用 CSS:

.page {
    page-break-before: always;
}

现在,我编写了 wkhtmltopdf 命令,用于在信纸大小的页面上纵向打印 PDF。我需要其中一个页面处于横向,其余页面处于纵向(以便在屏幕上查看 PDF 时,所有内容都将正确定向)。

有没有办法在单个 PDF 中混合方向?

如果这是不可能的,有没有办法使用 wkhtmltopdf 合并多个 PDF?(我已经看到了不同 pdfmerge 软件的其他建议。)如有必要,我可以将我的 HTML 源文件拆分为每个页面的多个文件。

4

2 回答 2

22

如果将来有人在寻找这个答案,我会用我的解决方案来完成这个。由于缺乏答案,我想确实没有办法使用 wkhtmltopdf 创建具有多个页面方向的 PDF。

  1. 我实现的第一个解决方案是使用一个 HTML 文件创建单个 PDF,并使用以下 CSS 旋转横向页面的内容:

    width: 1275px; 
    height: 1650px; 
    
    -webkit-transform: translateY(1650px) rotate(270deg); /* Chrome, Safari 3.1+ */ 
    -moz-transform: translateY(1650px) rotate(270deg); /* Firefox 3.5+ */ 
    -o-transform: translateY(1650px) rotate(270deg); /* Opera 10.5-12.0 */ 
    -ms-transform: translateY(1650px) rotate(270deg); /* IE 9 */ 
    transform: translateY(1650px) rotate(270deg); /* IE 10+, Firefox 16.0+, Opera 12.1+ */ 
    filter: progid:DXImageTransform.Microsoft.Matrix(M11=6.123031769111886e-17, M12=1, M21=-1, M22=6.123031769111886e-17, SizingMethod='auto expand'); /* IE 6-7 */ 
    -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=6.123031769111886e-17, M12=1, M21=-1, M22=6.123031769111886e-17, SizingMethod='auto expand')"; /* IE 8 */ 
    
    -webkit-transform-origin: 0% 0%; 
    -moz-transform-origin: 0% 0%; 
    -o-transform-origin: 0% 0%; 
    -ms-transform-origin: 0% 0%; 
    transform-origin: 0% 0%; 
    

    (要编写类似的兼容 CSS3 转换,请查看这个伟大的网站来计算所有 IE 矩阵值:http ://www.useragentman.com/IETransformsTranslator/ )

    如果您的用户只在 PDF 生成后打印它,这将是一个不错的解决方案。由于我的用户需要在屏幕上查看 PDF,因此他们必须使用他们的 PDF 查看软件来旋转页面是不切实际的。

  2. 因此,我的第二个解决方案是将每个页面从单个 HTML 文件创建为单独的 PDF,然后我使用Ghostscript将它们合并到一个文件中。这工作得很好,但只是增加了一些额外的处理时间来创建所有文件并合并它们。就我而言,PDF 不会经常下载,而且页数很少,所以额外的时间并不是一个很大的负担。

于 2012-11-20T03:38:19.303 回答
0

致@sacohe——来自未来的你好!是的,还在寻找。

如果将来有人仍在寻找此答案,我将留下功能请求的链接:https ://github.com/wkhtmltopdf/wkhtmltopdf/issues/1564

目前它仍然是开放的,但可能迟早会修复。

于 2017-03-23T20:15:36.270 回答