Java 以编程方式禁用';打印到文件';
我们有一个用Java编写的现有跨平台(Mac、Windows、Linux)应用程序,可以通过编程将文档发送到默认打印机,而不显示打印对话框 在不同的平台上,可以设置打印机以打印到文件。例如,在Windows中,可以将XPS Document Writer设置为默认打印机,或更改打印机的属性,使其保留所有文档的文件副本 有可能检测到这一点吗?我愿意接受任何建议,但解决方案必须跨平台工作。我假设这些细节的层次太低(并且依赖于平台),所以Java解决方案可能不可行,但如果可能的话,它将是理想的 我们不一定要寻找防弹的解决方案,所以任何建议都会很有帮助,无论多么古怪 编辑: 我意识到这里有很多非技术性的问题,可能会引发很多讨论(谁会想到呢?)。我想清楚地表明,我不是DRM的粉丝(正如人们所比喻的那样),也不想成为邪恶的人:) 我理解这些问题是真实存在的,在提出建议时,我会非常清楚地说明这一点。但是,我必须先研究技术解决方案,然后才能执行此操作。否。 您可以执行各种奇怪的依赖于操作系统的检测(是否使用Java 以编程方式禁用';打印到文件';,java,printing,cross-platform,Java,Printing,Cross Platform,我们有一个用Java编写的现有跨平台(Mac、Windows、Linux)应用程序,可以通过编程将文档发送到默认打印机,而不显示打印对话框 在不同的平台上,可以设置打印机以打印到文件。例如,在Windows中,可以将XPS Document Writer设置为默认打印机,或更改打印机的属性,使其保留所有文档的文件副本 有可能检测到这一点吗?我愿意接受任何建议,但解决方案必须跨平台工作。我假设这些细节的层次太低(并且依赖于平台),所以Java解决方案可能不可行,但如果可能的话,它将是理想的 我们不
somedriver.dll
?)或名称嗅探(“它是否包含“XPS”?”),但最终:
- 1) 我怎么打印文件不关你的事
- 2) 由于涉及抽象,实际上不可能检测给定的逻辑打印机是否将实际打印到物理打印机或其他地方李>
- 3) 这还不算网络驱动程序(什么是
?很难说:可能是打印机,可能是PDF生成器,可能是Matilda阿姨;网络在程序和物理硬件之间增加了另一层抽象)\\joescomputer\someprinter
- 4) 如果我真的想要一份非纸质的拷贝,我会拍一张截图,甚至是一张真实的照片,或者
- 5) 把那该死的打印出来的纸从物理打印机上拿出来,通过扫描仪,骂你无缘无故地干扰了我的工作流程李>
- 还请注意,6)有一些中大型打印机,它们公开“网络打印机”接口,然后允许用户对文档执行许多操作(此时文档仅作为spool文件存在于某个服务器上):在连接到系统的n台打印机、电子邮件、传真、,不管怎样——因此,即使打印作业离开计算机,您也不知道文档是否会实际打印(或打印在哪里)
换句话说,我觉得这背后有一些非技术性的需求,不幸的是,这些需求不能完全通过技术手段来解决(当然也不能通过Java的深层抽象来解决)。您可能需要遵循法律途径,例如在要求打印的每一点上添加“您不允许以电子方式保存打印输出”,并以巨大的红色闪烁字母显示。这将与技术解决方案一样无效,但可能对CYA来说已经足够了(因为您将明确地将决定权转移给用户)。谢谢。如果你能列出这些“奇怪的依赖操作系统的检测”机制,我将非常感激:)。虽然我完全同意你的观点,但我对如何做到这一点感兴趣。例如,我见过一些Windows特定的应用程序可以成功地做到这一点。尽管这些毫无疑问不是傻瓜式的,但它确实表明实现(无论多么有限)是可能的。+1表示“我如何打印文档与您无关”。不错的帖子。确实是+1。这是一个客户要求您更改internet和操作系统基本原则的示例。这根本不是技术问题。当然,我赞同你的观点,即基本业务需求可能最好用非技术解决方案来满足。但是在这个阶段,我仍然希望调查所有可用的选项,包括技术选项。@Nigel:嗅探打印机驱动程序就是其中之一(枚举硬件,查看打印机下列出的内容,查看它使用的驱动程序);但这1)要求您维护“打印到文件”解决方案的黑名单(有很多,您需要保持