首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML2PDF自动打印

HTML2PDF自动打印
EN

Stack Overflow用户
提问于 2014-05-09 16:13:47
回答 3查看 9.8K关注 0票数 2

有没有简单的方法可以让HTML2PDF在输出pdf到浏览器时自动打开打印对话框窗口?

我尝试在输出PDF之后设置输出报头冲突之前的javascript -没有像TCPDF建议的那样在PDF中尝试影响(我以为HTML2PDF是建立在这个库上的),但它不允许这样做,因为在PDF中没有JS支持。

有没有其他方法让人们知道,或者我必须用iframe或windows破解一些东西,然后通过这个方法声明print?

感谢您的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-09 18:23:06

打印取决于您让浏览器显示PDF的方式。如果您让浏览器“正常”显示它们,无论是插件(Adobe、FoxIT)还是其原生显示的PDF,那么您可以做的并不多,因为您不能使用JavaScript访问这些内容。

您可以使用pdf.js,它使用JavaScript在您可以打印的画布上呈现PDF,例如Printing PDF using pdf.js

票数 2
EN

Stack Overflow用户

发布于 2015-04-22 18:36:19

有一次,我在pyton上编写了转换HTML文档的脚本,并将其发送给自动打印。这里的链接是:https://gist.github.com/stopfaner/9b30b2f04aa47c5fb480如果它对你有用,我会很高兴

票数 2
EN

Stack Overflow用户

发布于 2015-04-15 18:48:06

好吧,应该有一种方法,尽管我没有更深入地探索它,但我希望这能启发其他人(如果我有时间的话,我会尝试一下)。

正如本页面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后面插入此脚本并换行。

代码语言:javascript
复制
/Names << % the Javascript entry
  /JavaScript <<
    /Names [
      (EmbeddedJS)
      <<
        /S /JavaScript
        /JS (
          print(true);
        )
      >>
    ]
  >>
>> % end of the javascript entry

但请注意,这只适用于Adobe Reader或Acrobat Pro,而不适用于其他PDF阅读器(如OSX中的预览应用程序不起作用,但Chrome中的内置阅读器运行良好)

EDIT 2-使用HTML2PDF库进行概念验证

代码语言:javascript
复制
$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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23559677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档