Вероятно, это не самая захватывающая «игрушка», с которой можно играть в праздничные дни, но я хотел исследовать некоторые варианты использования, которые включают печать через серверные сервисы Java. По сути, в корпоративной среде вы можете столкнуться с требованиями, когда документы, которые вы получаете или генерируете, также должны быть распечатаны по тем или иным причинам. Честно говоря, мне никогда не приходилось иметь дело с печатью Apis на Java, и поэтому я начал с нуля.
Оказывается, что есть 2 подхода (напоминает мне о множестве реализаций Date …). Один из подходов восходит к 1990-м годам и называется Java 2 Print API и больше привязан к пользовательским интерфейсам (UI), запускающим процесс печати. В Java 1.4 был представлен Java Print Service API (JPS) ( JSR 6).), который служит супер-набором Java 2 Print Api.
JPS Api, безусловно, работоспособен, но у меня возникли серьезные проблемы. Для моего первоначального варианта использования я могу получить простые текстовые документы, например XML, которые я хочу отправить на определенный принтер в виде простого текста.
Мне не удалось заставить его работать на моем Mac с Mac OS X 10.6.8. Однако на моей Windows JVM это работало безупречно, и мои текстовые файлы были распечатаны без каких-либо жалоб. На моем Mac, однако, мое маленькое тестовое приложение Java завершается без ошибок, но моя очередь принтера сообщает:
Error: pstopdffilter/pstocupsraster failed with err number -31000
Поиск в Google тоже не сильно помог. Казалось, есть некоторые неподтвержденные свидетельства того, что другие люди могли также иметь проблемы с печатью текста, но я не смог найти определенные ответы (многим сведениям уже несколько лет). У меня есть вопрос, является ли это проблемой с:
- Мой принтер, который является братом HL-4070CDW
- Mac JVM (у меня есть: сборка 1.6.0_29-b11-402-10M3527 )
- CUPS
- что-то другое
Если кто-либо из читателей столкнулся с подобными проблемами или может пролить свет на эту проблему, пожалуйста, дайте мне знать (
СПАСИБО! ).
В поисках объяснений я наткнулся на следующую ветку на
stackoverflow.com :
http://stackoverflow.com/questions/1655297/print-to-specific-printer-ipp-uri-in-java . Там они упомянули следующие библиотеки CUPS:
- CUPS4J ( http://www.cups4j.org/ )
- jipsi ( http://sourceforge.net/projects/jipsi/ )
Jipsi, очевидно, изменил имена и перешел на код Google:
- JSPI ( http://code.google.com/p/jspi )
Поскольку мне нужно универсальное решение, которое работает не только на Mac с использованием CUPS, но и на Windows, я не экспериментировал ни с одной из перечисленных выше библиотек. Тем не менее я хотел упомянуть их.
Я также пробовал различные другие
DocFlavors и настройки, но безрезультатно. Что интересно, так это то, что печать файлов PDF работает нормально. Печать файлов изображений, таких как PNG или JPG, также не выполняется.
Вот тривиальное приложение, которое я использую:
Кроме того, я посмотрел на следующие текстовые редакторы на основе Java, чтобы увидеть, как они выполняют печать (что также хорошо работает на моем Mac):
- RTEXT ( http://rtext.fifesoft.com )
- jEdit ( http://www.jedit.org )
RTEXT использует DocFlavor:
DocFlavor.SERVICE_FORMATTED.PRINTABLE, который, в свою очередь, использует компонент, который реализует
интерфейс java.awt.print.Printable .
Я предполагаю, что в качестве следующего шага у меня есть два варианта … погрузиться в траншеи Java2D или повеселиться, генерируя PDF-файлы … И все, что я хотел, это напечатать какой-нибудь простой текст, который работает в операционных системах.
От http://hillert.blogspot.com/2011/12/java-print-service-frustrations.html