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

Nig*_*gel 8 java printing cross-platform

我们有一个用Java编写的现有跨平台(Mac,Windows,Linux)应用程序,它以编程方式将文档发送到默认打印机而不显示打印对话框.

在不同平台上,可以设置打印机以打印到文件.例如,在Windows中,可以将XPS Document Writer设置为默认打印机,或者更改打印机上的属性,使其保留所有文档的文件副本.

有可能检测到这个吗?我对任何建议持开放态度,但解决方案必须跨平台工作.我假设这些细节太低(并且依赖于平台),因此Java解决方案可能不可行,但如果可能的话,这将是理想的.

我们不一定在寻找防弹解决方案,所以任何建议都会有所帮助,无论多么古怪!

编辑:

我意识到这里存在大量非技术问题,这可能引发很多讨论(谁曾想过它?).我想说清楚我不是DRM的粉丝(因为这已被比作)并且不想成为邪恶的:).

我很欣赏这些问题是真实的,在提出建议时我会非常清楚.但是,在我能够做到这一点之前,我必须调查技术解决方案.

Pis*_*3.0 10

没有.

你可以做各种奇怪的操作系统相关检测(是使用somedriver.dll?),还是名字嗅探("它包含'XPS'?")但最后:

  • 1)我打印文件的方式与您的业务无关,
  • 2)由于涉及抽象,实际上不可能检测给定的逻辑打印机是否实际打印到物理打印机或其他地方;
  • 3)这更不用说网络驱动程序了(是什么\\joescomputer\someprinter?很难说:可能是打印机,可能是PDF生成器,可能是Matilda阿姨;网络在程序和物理硬件之间增加了另一层抽象)
  • 4)如果我真的非常想要非纸质副本,我会截取屏幕截图甚至是实际照片,或者
  • 5)从物理打印机上取出该死的纸张打印输出并通过扫描仪送你,诅咒你没有任何理由弄乱我的工作流程.
  • 另请注意,6)有大中型打印解决方案,可以显示"网络打印机"界面,然后允许用户对文档执行许多操作(此时仅作为服务器上的假脱机文件存在)某处):在连接到系统,电子邮件,传真等任何n个打印机上打印- 所以你事先不知道文件是否会物理打印(或在哪里),即使打印作业离开计算机.

你本质上是在一个稍微不同的环境中与DRM战斗(这不是道德判断,而是事实陈述:"我想限制我的软件用户的选择"是DRM的核心,以及你的问题 - 无论我对此主题有何看法; 正如你可能知道的那样,这些都是凌乱的并且有令人不快的副作用("你是什么意思,我不能在我的物理打印机上打印,因为它被命名为WinXPStation?!?""我的防病毒软件说你的软件试图弄乱我的打印驱动程序,你是在推动间谍软件?!?"),它们是无法取胜的 - 总有一种解决方法.

甚至不要想到实际上禁用认为是打印到文件驱动程序的东西:注意索尼的DRM惨败,并注意你可能因非法篡改计算机而被起诉.

更务实的说明,如果你的软件禁用了系统的其他部分,然后由于它被禁用而其他部分无效,那么word就会消失."我安装了NigelSoft的SomeSoftware,它打破了我的打印机"并不是一个很好的声誉,并且难以抹去 - 人们会抱怨,而且,互联网上的任何内容都可能永远留在那里(注意各种类似的事件你通过搜索"(防病毒供应商)打破Windows"来发现.另请注意,有问题的供应商不会高兴:"你的#@ $ @软件故意破坏我的Wonderful Special Rainbow Printer(tm),你欠我们退款的钱,aaand这里有几个针对你的诉讼".

换句话说,我觉得这背后有一些非技术要求,不幸的是,它不能完全通过技术手段解决(绝对不能用Java的深层抽象).您可能需要走合法路线,例如包括"您不允许以电子方式保存打印输出",并在要求打印的每个点都以巨大的红色闪烁字母显示.这与技术解决方案同样无效,但对于CYA来说可能已经足够了(因为您将明确地将决定转移给用户).