【问题标题】:Mixing page orientations in wkhtmltopdf在 wkhtmltopdf 中混合页面方向
【发布时间】:2012-10-10 15:08:31
【问题描述】:

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

【问题讨论】:

    标签: php html pdf wkhtmltopdf


    【解决方案1】:

    如果将来有人在寻找这个答案,我会用我的解决方案来完成这个。基于缺乏答案,我想确实没有办法使用 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 不会经常下载,而且页数很少,因此额外的时间并不是一个很大的负担。

    【讨论】:

    • 感谢分享您的解决方案!
    • 我将来自 sacohe 的 -webkit-transform 建议与 @media print {} 选择器结合起来,使旋转仅在打印视图期间发生。您需要将“打印媒体类型”标志传递给 WkHtmlToPdf 构造函数以使其工作。
    • css转换的问题是内容跨越多个页面,页眉和页脚仍然以正常布局显示,而不是横向。
    • 如上所述,wkhtmltopdf 无法做到这一点,但商业库 princexml.com 或其托管合作伙伴 docraptor.com 支持此行为。不幸的是,并非所有浏览器(和基于浏览器的库)都完全支持 CSS3 Paged Media。
    • princexml.com 是付费解决方案吗?
    【解决方案2】:

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

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

    目前它仍处于打开状态,但可能迟早会修复。

    【讨论】:

    • 仍未合并:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多