servlets - 禁用 Adob​​e PDF 阅读器中的保存按钮并隐藏 IE 窗口中的菜单栏

标签 servlets pdf itext

我正在尝试通过 servlet 渲染 PDF,使用 Itext 获取 PDF 文件。
需要禁用 adobe pdf reader 菜单栏中的保存、打印选项,而其他选项(如滚动、查找)应该存在,此外还需要禁用呈现它的浏览器窗口的文件菜单。

我使用下面的代码禁用了打印和文件菜单

stamper.setEncryption(null,null,
                 PdfWriter.HideWindowUI, PdfWriter.STRENGTH40BITS); 

stamper.setViewerPreferences(PdfWriter.HideToolbar);

问题是

  1. 禁用 Adob​​e PDF 阅读器菜单栏中的保存按钮(使用 **Adobe Reader 9**)。

最佳答案

我们需要区分两个不同的方面:打印和保存。

您可以加密文件并设置不允许打印的权限。但是:如果您仅使用所有者密码加密文档,则很容易解密该文档并删除限制。使用所有者密码加密文档仅在心理层面起作用:例如:您表明文档的原始制作者不希望打印该文档。

如果您想避免最终用户保存 PDF 文档,那么您的要求是不可能的。避免最终用户没有 PDF 副本的唯一方法是不向他发送 PDF。如果磁盘上没有实际字节,则无法在 Adob​​e Reader 中打开 PDF。即使您禁用保存(例如在 Web 应用程序的上下文中),您也总会在临时文件中的某个位置找到 PDF,并且人们可以根据需要多次复制该文件。

在您的代码片段中,您尝试隐藏工具栏(查看器首选项),但这没有意义。是否会尊重此查看器偏好完全取决于 PDF 查看器。例如:在 Adob​​e Reader X 及更高版本中,当您将鼠标悬停在文档上时,会出现一个特殊的小部件。该小部件允许用户保存文档。

即使使用 Adob​​e Reader 9,隐藏工具栏也是不够的:如果用户选择适当的菜单项或点击适当的“热键”,工具栏就会出现,他们可以愉快地单击“保存”按钮。此外,他们也可以右键单击并选择“保存”。

简而言之,您问了错误的问题。

您需要做的不是阻止保存,而是控制 PDF 的实际使用,这就是 DRM(数字版权管理)的用武之地。然而,DRM 通常非常昂贵,它需要自定义 PDF 查看器,并且超出了iText 的范围。

关于servlets - 禁用 Adob​​e PDF 阅读器中的保存按钮并隐藏 IE 窗口中的菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22880444/

相关文章:

xml - 站点地图 XML 和 PDF

java - iText PDF writer 有没有办法动态检查 PDF 大小?

c# - 如何使用 C# 从 HTML 转换为 PDF?

java - 如何创建 ServletContext 的模拟属性?

java - 在JSP中使用JPA,无法检索@ManyToOne映射实体的属性

tomcat - 有没有办法在 J2EE 服务器启动时做一些事情?我正在使用汤姆猫

typescript - Foreach 数组以在 TypeScript 中显示值

java - 验证签名请求 : signature_invalid

image - 如何使用重构文本嵌入完整的 pdf?

c# - iTextSharp 如何将页面从横向旋转/切换为纵向