在网页上显示时禁用PDF菜单选项

时间:2011-09-08 12:29:50

标签: c# asp.net pdf

我正在网页上显示PDF。该网页是一个弹出窗口。代码是:

        string filePath = @"C:\TempPDF\Sample.PDF";

        bytes = rv.ServerReport.Render("PDF", null, out mimeType, out encoding, 
          out extension, out streamIds, out warnings);

        FileStream fileStream = new FileStream(filePath, FileMode.Create);

        fileStream.Write(bytes, 0, bytes.Length);

        fileStream.Close();

        File.Delete(filePath);

        Response.ClearContent();

        // write file to browser 
        Response.BinaryWrite(bytes);
       Response.Flush();

一切正常。  由于业务要求和欺诈原因,用户必须:

  • 仅打印一次(如果可能,窗口应自行关闭)
  • 不允许用户保存pdf

我到处搜索了,似乎你无法做任何事情,例如禁用“保存”按钮,但我想我会在这里看看有没有人遇到过此问题并设法找到解决方案? 谢谢!

1 个答案:

答案 0 :(得分:1)

坏消息

当您在浏览器中“查看”PDF时,您已将其“保存”到您的计算机上。如果您将此与网络上的其他内容(网页,图像等)进行比较,那么它实际上很有意义。因此,禁用“保存”将首先禁用“下载”,这不是您想要的。

印刷也是如此。你能将图像打印一次吗? (实际上是的,见下文。)另一个问题是,是否已打印某些内容是文档级问题,并且首先要由PDF查看器的实现者来实现。由于这不是PDF规范的一部分,因此没有任何兴趣。而且,“一次打印”意味着什么呢?我只能按一次打印按钮?我可以打印一次并选择500份吗?由于打印被卸载到打印驱动程序/ OS,因此这个“安全信息”也需要传递。打印完成后,无论如何我都可以扫描并重新打印。事实上,我可以打印到PDF / PostScript并获得原始的不安全版本。

在Adobe Acrobat中,有一些安全设置似乎是一个好主意,但它们也不会让你太过分。如果您在Acrobat中打开PDF并转到“高级”,“安全性”,“使用密码加密”,则至少可以使用密码禁用对PDF的更改。有趣的是,如果禁用更改,它实际上会禁用Adobe Reader / Acrobat中的“保存”按钮。相反,它迫使你保存为,但我看到很多人“认为”Save已被禁用。对于打印,不幸的是,你可以做很多事情来锁定它。

好消息

很抱歉在您的要求中挖出一堆漏洞。听起来非常像优惠券公司所做的,他们只希望你能打印一次。我会尝试模仿他们做的事情。或者甚至可能更好,谷歌日历曾经做过类似的事情(虽然似乎不再这样做了)。 Google过去常常向您展示文档的“打印预览”(只是JPG),当您点击打印时,它会将资源异步加载到隐藏容器中,使用IFRAME,AJAX或OBJECT,然后打印。 Here's a post that talks more about that。走这条路线,您可以使用常规编程逻辑在打印后禁用您自己的HTML打印按钮。当然,如果有人点击打印然后取消打印对话框,他们就不幸了。

您可以做的另一件事是将一些参数传递给PDF,以在显示PDF时禁用内置工具栏。具体来说,您可以发送somefile.pdf?toolbar=0See this document for more information。请注意,这些设置仅适用于Adobe Acrobat / Reader。 Chrome,Safari和其他浏览器都有自己的PDF渲染器。