在 wkhtmltopdf 中混合页面方向

2022-08-31 01:00:38

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


答案 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不会下载太频繁,页面数量很少,因此额外的时间不是一个沉重的负担。


答案 2

@sacohe - 来自未来的你好!是的,还在看。

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

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


推荐