Смешивание ориентации страниц в wkhtmltopdf - программирование
Подтвердить что ты не робот

Смешивание ориентации страниц в wkhtmltopdf

Я использую wkhtmltopdf для создания PDF файла из одного файла HTML, отформатированного на отдельные страницы с помощью 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?

Если это невозможно, существует ли способ слить несколько PDF файлов с помощью wkhtmltopdf? (Я видел другие предложения другого программного обеспечения pdfmerge.) Я мог бы разделить исходный файл HTML на несколько файлов для каждой страницы, если это необходимо.

4b9b3361

Ответ 1

В случае, если кто-то ищет этот ответ в будущем, я завершу это своими решениями. Основываясь на отсутствии ответов, я думаю, что действительно невозможно создать PDF файл с несколькими ориентациями страниц, используя wkhtmltopdf.

  • Первым реализованным мной решением было создание единого PDF файла с использованием одного файла HTML и поворот содержимого ландшафтной страницы с использованием следующего 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 не будет загружаться слишком часто, и количество страниц было минимальным, поэтому дополнительное время не было значительным бременем.

Ответ 2

To @sacohe - привет от будущего! Да, все еще смотрю.

Если кто-то все еще ищет этот ответ в будущем, я оставляю ссылку на запрос функции: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1564

В это время он все еще открыт, но скорее всего будет исправлен рано или поздно.