Программно отключить «печать в файл» - PullRequest
8 голосов
/ 14 апреля 2011

У нас есть кроссплатформенное (Mac, Windows, Linux) приложение, написанное на Java, которое программно отправляет документ на принтер по умолчанию, не показывая диалоговое окно печати. ​​

На разных платформах возможнонастроить принтер для печати в файл.Например, в Windows можно установить XPS Document Writer в качестве принтера по умолчанию или изменить свойства принтера таким образом, чтобы он сохранял копию файла всех документов.

Возможно ли это обнаружить?Я открыт для любых предложений, но решение должно работать кроссплатформенно.Я предполагаю, что такие детали слишком низкого уровня (и зависят от платформы), поэтому решение Java, вероятно, неосуществимо, но было бы идеально, если это возможно.

Мы не обязательно ищем пуленепробиваемое решение,так что любые предложения будут полезны, независимо от того, насколько это странно!

Редактировать:

Я понимаю, что здесь есть целый ряд нетехнических проблем, которые могут спровоцировать многообсуждения (кто бы мог подумать?).Я хочу прояснить, что я не фанат DRM (как это было уподоблено) и не пытаюсь быть злым:).

Я ценю, что эти проблемы реальны, и когда делаю свои рекомендацииЯ сделаю это очень ясно.Однако мне нужно изучить техническое решение, прежде чем я смогу это сделать.

1 Ответ

9 голосов
/ 14 апреля 2011

номер

Вы могли бы сделать все виды странного зависимого от ОС обнаружения (использует ли оно somedriver.dll?) Или перехватывать имена («содержит ли оно« XPS »?»), Но в конце концов:

  • 1) это не ваше дело, как я печатаю свои документы,
  • 2) из-за задействованных абстракций практически невозможно определить, будет ли данный логический принтер печатать на физическом принтере или где-то еще;
  • 3) это не говоря уже о сетевых драйверах (что на \\joescomputer\someprinter? Трудно сказать: может быть принтер, может быть генератор PDF, может быть тетя Матильда; сеть добавляет еще один уровень абстракции между вашей программой и физическое оборудование)
  • 4) если мне действительно очень нужна не бумажная копия, я сделаю снимок экрана или даже реальную фотографию, или
  • 5) возьмите чертову бумажную распечатку с физического принтера и пропустите ее через сканер, ругаясь на вас за бесполезную работу с моим рабочим процессом.
  • Обратите также внимание на то, что 6) существуют средние и крупные решения для печати , которые предоставляют интерфейс «сетевого принтера», а затем позволяют пользователю многое делать с документом (что на тот момент существует только в виде файла спула где-нибудь на сервере): печатайте на любом из n принтеров, подключенных к системе, по электронной почте, факсу и т. д., поэтому вы не знаете заранее, будет ли документ физически печатать (или куда), даже если задание на печать покидает компьютер.

По сути, вы сражаетесь в битве DRM в несколько ином контексте (это не моральное суждение, а констатация факта: «Я хочу ограничить выбор, который имеют пользователи моего программного обеспечения»), это ядро ​​DRM, и вашего вопроса - независимо от моего мнения по этому вопросу); как вы, наверное, знаете, они беспорядочные и имеют неприятные побочные эффекты («что вы имеете в виду, я не могу печатать на своем физическом принтере, потому что он называется WinXPStation?!?» «мой антивирус говорит, что ваше программное обеспечение пытается связываться с мои драйверы печати, вы запускаете программы-шпионы?!? "), и их невозможно победить - всегда есть обходной путь.

Даже не думайте о том, что на самом деле отключите что-то, что вы можете думаете - это драйвер печати в файл: обратите внимание на фиаско DRM от Sony и обратите внимание, что на вас могут подать иск за незаконное вмешательство в работу компьютера.

На более прагматичной ноте, если ваше программное обеспечение отключает какую-то другую часть системы, а затем эта другая часть не работает, потому что она отключена , слово выйдет. «Я установил SomeSoftware от NigelSoft, и он сломал мой принтер» - это плохая репутация, которую трудно стереть - люди будут жаловаться, и, что бы ни происходило в Интернете, они могут остаться там навсегда (обратите внимание на различные подобные инциденты, которые вы Выясните, выполнив поиск "(производитель антивирусов) ломает Windows"). Обратите внимание, что поставщик, о котором идет речь, будет недоволен: «Ваше программное обеспечение # @ $ @ преднамеренно ломает мой замечательный специальный радужный принтер (tm), вы должны нам деньги, которые нам пришлось вернуть, и вот пара судебных исков против вас». ».

Другими словами, я чувствую, что за этим стоит какое-то нетехническое требование, которое, к сожалению, не решаемо чисто техническими средствами (и определенно не с помощью глубоких абстракций Java). Возможно, вам придется пойти легальным путем, например, добавить «вам не разрешено сохранять распечатки в электронном виде» и показать это огромными мигающими красными буквами в каждой точке, где запрашивается печать. Это будет так же неэффективно, как и техническое решение, но может быть достаточно для CYA (так как вы будете явно переносить решение на пользователя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...