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

时间:2011-04-14 12:09:51

标签: java printing cross-platform

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

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

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

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

修改

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

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

1 个答案:

答案 0 :(得分:9)

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

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

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

甚至不会想到禁用你可能认为是打印到文件的驱动程序:注意索尼的DRM惨败,并注意你可能会被起诉非法篡改计算机。

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

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