以编程方式禁用“打印到文件”

| 我们有一个用Java编写的现有跨平台(Mac,Windows,Linux)应用程序,该程序以编程方式将文档发送到默认打印机,而不会显示打印对话框。 在不同的平台上,可以设置打印机以打印到文件。例如,在Windows中,可以将XPS Document Writer设置为默认打印机,或更改打印机的属性,使其保留所有文档的文件副本。 有可能检测到这一点吗?我欢迎任何建议,但是该解决方案必须跨平台工作。我假设这样的细节太低了(并且依赖于平台),所以Java解决方案可能不可行,但如果可能的话是理想的。 我们不一定要寻找防弹解决方案,所以无论多么古怪,任何建议都将有所帮助! 编辑: 我意识到这里有很多非技术性的问题,这可能引起很多讨论(谁想到了?)。我想明确地说,我不是DRM的拥护者(正如人们所说的那样),并且不打算变得邪恶:)。 我感谢这些问题是真实存在的,在提出建议时,我会明确指出。但是,在执行此操作之前,我必须先研究技术解决方案。     
已邀请:
没有。 您可以进行各种与操作系统有关的怪异检测(是否使用
somedriver.dll
?),也可以进行名称嗅探(\“它是否包含\'XPS \'?\”),但最后: 1)我如何打印文件与您无关, 2)由于所涉及的抽象,几乎不可能检测给定的逻辑打印机是否将实际打印到物理打印机或其他地方; 3)更不用说网络驱动程序了(1英镑是多少?很难说:可能是打印机,可能是PDF生成器,可能是Matilda姑妈;网络在程序和物理硬件之间增加了另一层抽象) 4)如果我真的很想要非纸质副本,我会截取屏幕截图甚至是真实照片,或者 5)从物理打印机上取走那可恶的纸张打印输出,并通过扫描仪送入,无缘无故地指责您弄乱了我的工作流程。 还要注意6)有一些中型和大型打印解决方案,它们公开了“网络打印机”界面,然后允许用户对文档执行很多操作(当时,该文档仅作为后台打印文件存在)服务器):在连接到系统的n台打印机中的任何一台进行打印,通过电子邮件,传真或其他方式进行打印-因此您无法预先知道文档是否将进行物理打印(或在何处打印),甚至在进行打印作业时也是如此离开计算机。 您实际上是在略有不同的环境中进行DRM斗争(这不是道德判断,而是一种事实陈述:“我想限制软件用户拥有的选择”是DRM的核心,您的问题-不管我对这个问题有什么看法);如您所知,它们很凌乱并且具有令人不快的副作用(“这是什么意思,我无法在物理打印机上进行打印,因为它的名称是WinXPStation?!?”您的软件正试图弄乱我的打印驱动程序,您是否正在推动间谍软件?!?\“),并且它们无法取消-始终有一种解决方法。 甚至不用考虑实际禁用某些您可能认为是“文件到文件”驱动程序:请注意Sony的DRM惨败,并请注意您可能因非法篡改计算机而受到起诉。 更为务实的是,如果您的软件禁用了系统的其他部分,然后该其他部分由于被禁用而无法正常工作,那么您将一言不发。 “我安装了NigelSoft的SomeSoftware,它破坏了我的打印机”,这并不是一个很好的声誉,而且很难删除-人们会抱怨,而且,无论互联网上发生的任何事情都可能永远存在(请注意各种类似内容通过搜索\“(防病毒供应商)会破坏Windows \”发现的事件。还请注意,有问题的供应商会不满意:“您的#@ $ @软件故意破坏了我的Wonderful Special Rainbow打印机(tm),您欠我们的钱我们必须退款,所以这里有几个针对您的诉讼”。 换句话说,我觉得这背后有一些非技术性的要求,但不幸的是,这些要求不能仅通过技术手段来解决(而且绝对不能通过Java的深层抽象来解决)。您可能需要遵循合法的路线,例如添加“不允许您以电子方式保存打印输出”,并在要求打印的每个位置以红色闪烁的大字体显示此内容。这将与技术解决方案一样无效,但对于CYA来说可能就足够了(因为您将把决定显然转移给用户)。     

要回复问题请先登录注册