首页 文章

在wkhtmltopdf中混合页面方向

提问于
浏览
14

我正在使用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源文件拆分为每个页面的多个文件 .

2 回答

  • 17

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

    • 我实现的第一个解决方案是使用一个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查看软件旋转页面是不切实际的 .

    • 所以,我的第二个解决方案是将每个页面作为单独的PDF文件从单个HTML文件创建,然后我使用Ghostscript将它们合并为一个文件 . 这完美地工作,但只是添加了一些额外的处理时间来创建所有文件并合并它们 . 在我的情况下,PDF不会经常下载,页面数量很少,因此额外的时间不是一个重要的负担 .
  • 0

    致@sacohe - 来自未来!是的,还在寻找 .

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

    此时它仍处于打开状态,但迟早可能会被修复 .

相关问题