Я использую 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 на несколько файлов для каждой страницы, если это необходимо.
В случае, если кто-то ищет этот ответ в будущем, я завершу это своими решениями. Основываясь на отсутствии ответов, я думаю, что действительно невозможно создать 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 не будет загружаться слишком часто, и количество страниц было минимальным, поэтому дополнительное время не было значительным бременем.
To @sacohe – привет от будущего! Да, все еще смотрю.
Если кто-то все еще ищет этот ответ в будущем, я оставляю ссылку на запрос функции: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1564
В это время он все еще открыт, но скорее всего будет исправлен рано или поздно.