Что ж, должен быть способ, и хотя я еще не исследовал его более подробно, я надеюсь, что это вдохновит кого-то еще (я попробую, если найду время).
Как указано на этой странице http://www.fpdf.org/en/script/script36.php, можно внедрить некоторый javascript (чтобы открыть диалоговое окно печати). Теперь это расширение для FPDF, а не для библиотеки HTML2PDF.
Может быть, есть или будет написано расширение HTML2PDF, но я подозреваю, что будет проще сделать это на простом PHP после создания документа.
Как описано здесь, это должно быть прямо:
возьмите существующий PDF-файл, откройте его в текстовом редакторе, найдите /Catalog и вставьте шаблон после ссылки /Pages и введите свой код
(источник: http://bililite.com/blog/2012/06/06/adding-javascript-to-pdf-files/)
Я обновлю, если у меня будет больше информации или подтверждение концепции (с использованием HTML2PDF).
Изменить
Я только что проверил эту концепцию, и она отлично работает. Как и в примерах, вставьте этот скрипт сразу после /Catalog и новой строки.
/Names << % the Javascript entry
/JavaScript <<
/Names [
(EmbeddedJS)
<<
/S /JavaScript
/JS (
print(true);
)
>>
]
>>
>> % end of the javascript entry
Однако будьте осторожны, это будет работать только в Adobe Reader или Acrobat Pro и может не работать в других программах чтения PDF (например, приложение предварительного просмотра в OSX не работало, но встроенная программа чтения в Chrome работала нормально)
РЕДАКТИРОВАТЬ 2. Доказательство концепции с использованием библиотеки HTML2PDF
$printCommand = <<<EOF
/Type /Catalog
/Names <<
/JavaScript <<
/Names [
(EmbeddedJS)
<<
/S /JavaScript
/JS (
print(true);
)
>>
]
>>
>>
EOF;
// Using the output method like this, you will get
// the raw ouput back to manipulate
$bin = $html2pdf->Output('', true);
// When the /Names block shows up somewhere later in
// in PDF code, it will override your script and will do nothing.
// This is just for proof of concept, you want to use regex here
if (strpos($bin, '/Names << >>') === false) {
$bin = str_replace('/Type /Catalog', $printCommand, $bin);
} else {
$printCommand = str_replace('/Type /Catalog', '', $printCommand);
$bin = str_replace('/Names << >>', $printCommand, $bin);
}
// Since we don't use the output function from HTML2PDF,
// you have to set the headers manually
header('Content-Type: application/pdf');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: public');
header('Expires: Sat, 29 Jun 1985 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Disposition: inline; filename="your-pdf-title";');
echo $bin;
exit;
person
NxWebster
schedule
15.04.2015