Автоматическая печать HTML2PDF

Есть ли простой способ заставить HTML2PDF автоматически открывать диалоговое окно печати при выводе pdf в браузер?

Я попытался установить javascript перед выводом - Конфликт заголовков, который я пробовал после вывода PDF - Никакого влияния, которое я пробовал в PDF, как предлагает TCPDF (я думал, что HTML2PDF был построен на этой библиотеке), но это не позволило бы из-за отсутствия поддержки JS в PDF .

Есть ли какие-либо другие способы, о которых люди знают, или мне придется что-то взломать с помощью iframe или windows и объявить печать с помощью этого метода?

Любая помощь приветствуется.


person Somk    schedule 09.05.2014    source источник


Ответы (3)


Печать зависит от того, как вы позволяете браузеру отображать PDF. Если вы позволяете браузеру отображать их «нормально» либо с помощью плагина (Adobe, FoxIT), либо с помощью собственного отображения PDF-файлов, вы мало что можете сделать, поскольку вы не можете использовать JavaScript для доступа к ним.

Вы можете использовать pdf.js, который отображает PDF-файл с помощью JavaScript на холсте, который вы можете распечатать. , см., например, Печать PDF с использованием pdf.js

person RoToRa    schedule 09.05.2014

Однажды я написал скрипт на pyton, который автоматически конвертирует HTML-документ и отправляет его на печать. Вот ссылка: https://gist.github.com/stopfaner/9b30b2f04aa47c5fb480 Если это полезно для ты, я буду счастлив

person Stopfan    schedule 22.04.2015

Что ж, должен быть способ, и хотя я еще не исследовал его более подробно, я надеюсь, что это вдохновит кого-то еще (я попробую, если найду время).

Как указано на этой странице 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