我正在尝试通过servlet呈现PDF,使用Itext获取PDF文件 需要在adobe pdf阅读器菜单栏中禁用保存,打印选项,而其他选项如滚动,查找应该在那里,此外需要禁用浏览器窗口的文件菜单。
我已使用以下代码
禁用了打印和文件菜单stamper.setEncryption(null,null,
PdfWriter.HideWindowUI, PdfWriter.STRENGTH40BITS);
stamper.setViewerPreferences(PdfWriter.HideToolbar);
问题是
答案 0 :(得分:3)
我们需要区分两个不同的方面:打印和保存。
您可以加密文件并以不允许打印的方式设置权限。但是:如果您只使用所有者密码加密文档,则可以非常轻松地解密文档并删除限制。使用所有者密码加密文档仅适用于心理级别:例如:您指示文档的原始制作者不希望打印文档。
如果您想避免最终用户保存PDF文档,您会问一些不可能的事情。避免最终用户没有PDF副本的唯一方法是不向他发送PDF。无法在Adobe Reader中打开PDF,而不会在磁盘上显示实际字节数。即使您要禁用保存(例如在Web应用程序的上下文中),您也总是在临时文件中的某处找到PDF,并且人们可以根据需要多次复制该文件。
在您的代码段中,您尝试隐藏工具栏(查看器首选项),但这没有意义。是否完全尊重此查看器首选项取决于PDF查看器。例如:在Adobe Reader X及更高版本中,当您将鼠标悬停在文档上时,会出现一个特殊的小部件。此小部件允许用户保存文档。
即使使用Adobe Reader 9,隐藏工具栏也不够:如果用户选择了相应的菜单项或点击了相应的热键",工具栏就会出现,他们可以愉快地点击保存按钮。此外,他们可以右键单击并选择" Save"同样。
简而言之,你提出了错误的问题。
您需要做的不是阻止保存但是控制PDF的实际使用以及DRM(数字版权管理)的用途。但是,DRM通常非常昂贵,需要自定义PDF查看器和它超出了iText的范围。