【发布时间】:2009-10-31 00:10:28
【问题描述】:
如何使用 .net 以编程方式制作 PDF 不可打印?
【问题讨论】:
-
您当前使用什么库或方法(如果有)来生成或访问 PDF?如果可能的话,解决方案会有所不同,具体取决于库。
-
Jason,我们使用 Adobe Pro 转换 MS Word 文档。
如何使用 .net 以编程方式制作 PDF 不可打印?
【问题讨论】:
简短的回答。你不能。您可以尝试设置一个 DRM 参数来阻止打印,但这一切都取决于客户端用于呈现 PDF 的软件以及它是否尊重 DRM。
此外,假设您能够查看 PDF,则没有什么可以阻止用户对 PDF 中显示的内容进行屏幕截图。
【讨论】:
当然可以阻止打印!当然,您不能阻止截屏,但您绝对可以阻止临时用户在 Adobe Reader 中打印 PDF。我知道在我们的 ActiveReports 产品中,当我们导出 PDF 时,您可以指定各种安全选项来确定查看 PDF 的用户是否可以打印。开发者可以指定管理员密码,只允许部分用户打印,同时阻止没有密码的用户打印。
您可以在 ActiveReports 的PdfSecurity enumeration documentation 中了解更多相关信息。代码示例在文档here 中。按照该页面上的一些链接查看更多信息。
如果您想加载现有的 PDF 并进行修改,通常人们建议 iTextSharp。虽然我没有使用它,但其他人强烈推荐它,我认为它适用于这种读取+修改场景。我设法找到了一个示例,说明如何使用 iTextSharp 启用/禁用“AllowPrint”和其他权限here。
【讨论】:
听起来您是在真的在 Active Directory 中寻找阻止用户打印的组策略对象,也许?
更新
除了阻止具有给定扩展名或超过特定大小的附件的另一个 GPO 之外,是什么阻止了上述用户通过电子邮件将 PDF 发送给自己并在家打印?
【讨论】:
根据完整的要求详细信息,您有许多选项,但最简单的方法确实是在文档上设置密码加密。正如上面提到的一些人,您可以设置所有者密码和用户密码来加密文档。所有者密码基本上允许管理员级别的访问并完全打开文档以进行所有操作。用户密码打开文档,但访问权限仅限于您在加密时指定的内容,例如,如果您关闭打印权限,则提供用户密码的人将无法打印 PDF。
我们提供的解决方案支持 .NET,并且可以轻松加密和解密 PDF。如果您有兴趣看一下,这里是 API 文档的链接:
http://www.pdfonline.com/easypdf/epsdk_manual/index.htm?page=reference%2Fpdfprocessorsdk%2Fpdfprocessor%2Fm_encrypt.htm
这个想法是调用上面的 Encrypt() 函数并传递 PRC_SEC_PRINT_PERM_NONE 的 PrintingPerm 参数。您还可以根据需要设置其他访问权限,如修改、复制/粘贴等。
希望这会有所帮助。
【讨论】: