【问题标题】:Open Printer Dialog for PDF file Automatically自动打开 PDF 文件的打印机对话框
【发布时间】:2012-11-24 01:32:11
【问题描述】:

我知道有多种方法可以将 PDF 打印到与服务器位于同一网络的网络打印机,但这对我没有帮助,因为服务器是远程的。在我的情况下,用户单击“打印标签”的链接,然后生成并输出为他们格式化的 PDF 文件。我目前将文件输出“流式传输”到浏览器,以便 Adob​​e Reader 使用以下代码自动打开它:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-type: application/pdf");
header('Content-Disposition: attachment; filename="labels.pdf"');
readfile($ServerPathToFile);

我是否可以在此代码中添加其他内容来自动触发打印对话框打开,以便他们只需单击打印?在这种情况下,Google CloudPrint 不是一个选项,其他需要在用户端进行“特殊设置”的东西也不是一个选项......因为这将被各种用户使用。

【问题讨论】:

  • 你不会在 PHP 中这样做,因为 PHP 只作用于服务器机器。你想做的事情发生在客户端机器上,所以你会使用类似 Javascript 的window.print()
  • @Steve - 这不起作用,因为 PDF 在 Adob​​e Reader(或任何用户的默认 PDF 软件)中打开...而不是在 Web 浏览器窗口中...
  • 我完全知道 PDF 不会在浏览器窗口中打开。 “用户的默认PDF软件”安装在用户的计算机上。如果要打印,则必须通过用户的计算机访问打印对话框,这不能也不应该使用 PHP 来完成。如果您访问的所有网站都可以开始在您的计算机上运行东西怎么办?
  • @Steve - 这里的目标只是让 PDF 提示用户打印对话框。我正在寻找一种在提供文件时(通过服务器从服务器...而不是客户端通过 PHP 完成)设置某种标志以指示软件应该打印的方法。正如其他人已经建议的那样,它可以用 JavaScript 来完成......但如果有办法在原始文件输出中完成它而不是构建额外的 HTML......那显然是一个更优雅的解决方案。我正在寻找一个额外的标题,如果可能的话,我可以通过(在 PHP 中)。请尽量让您的帖子保持主题性和建设性。

标签: php pdf printing


【解决方案1】:

您可以将 PDF 输出到同一域上的子窗口 (<iframe>),然后在该窗口上调用 window.print()

<p>Don't forget to print your document!</p>
<iframe src="/path/to/your/pdfgenerator.php" id="mypdf"></iframe>

<script>
function printIframe(id) {
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    iframe.focus();
    ifWin.printPage();
    return false;
}
</script>

在 iframe 页面中,添加以下内容:

function printPage() {
    print();
}

【讨论】:

  • @Steve - 我回滚了你的编辑。 &lt;script&gt; 标签的默认类型属性是“text/javascript”...无需显式设置它——它只会让事情变得混乱。 javascript.crockford.com/script.html
  • 如果这是我最好/唯一的选择,这看起来肯定会起作用。我真的希望在发送文件输出时可以在我的标头中的 PHP 中设置一个额外的标志,告诉默认应用程序(在本例中为 Adob​​e Reader)我的预期用途是打印。也许没有这样的选择......但它确实看起来很有用。如果没有人有其他想法,我会使用类似你的建议的东西。谢谢!
  • 据我所知没有这样的标题。
  • @dtbarne "function printPage() { print(); }" - 这是否在 pdfgenerator.php 页面中?还是进入 iframe 所在的页面??
  • 函数 printPage () 在 iframe 页面 pdfgenerator.php 中的什么位置?你能告诉我吗?
【解决方案2】:

我刚刚完成了一个项目,该项目将标签从浏览器打印到网络上的 dymo 标签打印机。您必须使用 javascript 执行此操作。我使用了 Dymo 的 SDK,并创建了我自己的自定义界面,以便在用户在信息亭注册后自动打印姓名标签。然后,名牌就在主检票站等着他们。

我使用的srcipt只需要安装在服务器上,网络中的所有其他人都可以打印到网络打印机。

【讨论】:

  • 听起来很有趣...但在这种情况下,“用户”将是分布在全国各地的各种人,每个人都有不同的网络设置和打印机...所以 PDF 打印到任何本地可访问的打印机可用是我最好的选择。就是说...我已经考虑过您在我正在从事的另一个项目中提到的内容...似乎它可能很有用。我不认为您可以在这里分享您的代码并发布链接?
  • @ROY Finley,您介意分享您的代码吗?我有一个类似的项目,但我想使用斑马打印机并打印带有二维码的徽章。我在数据库中有用户数据,我用 tcpdf_min 布局了一个 pdf(徽章大小),在此致谢
猜你喜欢
  • 2014-06-22
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多