Java 以编程方式禁用';打印到文件';

Java 以编程方式禁用';打印到文件';,java,printing,cross-platform,Java,Printing,Cross Platform,我们有一个用Java编写的现有跨平台(Mac、Windows、Linux)应用程序,可以通过编程将文档发送到默认打印机,而不显示打印对话框 在不同的平台上,可以设置打印机以打印到文件。例如,在Windows中,可以将XPS Document Writer设置为默认打印机,或更改打印机的属性,使其保留所有文档的文件副本 有可能检测到这一点吗?我愿意接受任何建议,但解决方案必须跨平台工作。我假设这些细节的层次太低(并且依赖于平台),所以Java解决方案可能不可行,但如果可能的话,它将是理想的 我们不

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

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

有可能检测到这一点吗?我愿意接受任何建议,但解决方案必须跨平台工作。我假设这些细节的层次太低(并且依赖于平台),所以Java解决方案可能不可行,但如果可能的话,它将是理想的

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

编辑:

我意识到这里有很多非技术性的问题,可能会引发很多讨论(谁会想到呢?)。我想清楚地表明,我不是DRM的粉丝(正如人们所比喻的那样),也不想成为邪恶的人:)

我理解这些问题是真实存在的,在提出建议时,我会非常清楚地说明这一点。但是,我必须先研究技术解决方案,然后才能执行此操作。

否。

您可以执行各种奇怪的依赖于操作系统的检测(是否使用
somedriver.dll
?)或名称嗅探(“它是否包含“XPS”?”),但最终:

  • 1) 我怎么打印文件不关你的事
  • 2) 由于涉及抽象,实际上不可能检测给定的逻辑打印机是否将实际打印到物理打印机或其他地方
  • 3) 这还不算网络驱动程序(什么是
    \\joescomputer\someprinter
    ?很难说:可能是打印机,可能是PDF生成器,可能是Matilda阿姨;网络在程序和物理硬件之间增加了另一层抽象)
  • 4) 如果我真的想要一份非纸质的拷贝,我会拍一张截图,甚至是一张真实的照片,或者
  • 5) 把那该死的打印出来的纸从物理打印机上拿出来,通过扫描仪,骂你无缘无故地干扰了我的工作流程
  • 还请注意,6)有一些中大型打印机,它们公开“网络打印机”接口,然后允许用户对文档执行许多操作(此时文档仅作为spool文件存在于某个服务器上):在连接到系统的n台打印机、电子邮件、传真、,不管怎样——因此,即使打印作业离开计算机,您也不知道文档是否会实际打印(或打印在哪里)
你基本上是在一个稍微不同的环境中打一场数字版权管理之战(这不是一个道德判断,而是一个事实陈述:“我想限制我的软件用户的选择”是数字版权管理的核心,也是你的问题——不管我对这个问题有什么意见);正如你可能知道的,这些都是混乱的,并且有令人不快的副作用(“你是什么意思,我不能在我的物理打印机上打印,因为它名为WinXPStation?!?”“我的防病毒软件说你的软件正试图干扰我的打印驱动程序,你在推间谍软件吗?!?”),它们是不可能赢的-总是有解决办法的

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

更实用的一点是,如果您的软件禁用了系统的某些其他部分,而另一部分由于禁用而无法工作,word将被释放。“我安装了NigelSoft的某个软件,它损坏了我的打印机”这不是一个好名声,很难抹去——人们会抱怨,而且,互联网上发生的任何事情都可能永远存在(请注意,通过搜索(防病毒供应商)会发现各种类似事件会破坏Windows)。还要注意的是,有问题的供应商会不太高兴:“你的#@$@软件故意破坏了我的奇妙的特殊彩虹打印机(tm),你欠我们的钱,我们不得不退款,这里有几起针对你的诉讼。”


换句话说,我觉得这背后有一些非技术性的需求,不幸的是,这些需求不能完全通过技术手段来解决(当然也不能通过Java的深层抽象来解决)。您可能需要遵循法律途径,例如在要求打印的每一点上添加“您不允许以电子方式保存打印输出”,并以巨大的红色闪烁字母显示。这将与技术解决方案一样无效,但可能对CYA来说已经足够了(因为您将明确地将决定权转移给用户)。

谢谢。如果你能列出这些“奇怪的依赖操作系统的检测”机制,我将非常感激:)。虽然我完全同意你的观点,但我对如何做到这一点感兴趣。例如,我见过一些Windows特定的应用程序可以成功地做到这一点。尽管这些毫无疑问不是傻瓜式的,但它确实表明实现(无论多么有限)是可能的。+1表示“我如何打印文档与您无关”。不错的帖子。确实是+1。这是一个客户要求您更改internet和操作系统基本原则的示例。这根本不是技术问题。当然,我赞同你的观点,即基本业务需求可能最好用非技术解决方案来满足。但是在这个阶段,我仍然希望调查所有可用的选项,包括技术选项。@Nigel:嗅探打印机驱动程序就是其中之一(枚举硬件,查看打印机下列出的内容,查看它使用的驱动程序);但这1)要求您维护“打印到文件”解决方案的黑名单(有很多,您需要保持