Как напечатать документ Word на Java, не открывая его?
У меня есть веб-приложение на основе J2EE, в котором при нажатии кнопки мне нужно создать файл слова из Java. Я хочу иметь возможность отправить команду печати в этот файл, чтобы файл печатался без необходимости открывать документ и делать это вручную.
Может ли кто-нибудь сказать мне, если это возможно, и если да, то как действовать?
Заранее спасибо.
5 ответов
Это легко создать файл. Взгляните на Apache POI, Java API для доступа к файлам формата Microsoft. На сайте множество примеров.
Что касается печати, я не знаю, возможно ли это. Я думаю, вам всегда нужно открывать его на стороне клиента, чтобы распечатать.
Вы должны создать ActiveX для загрузки содержимого документа и запустить команду печати. Нет другого способа открыть файл на клиентском компьютере и запустить команды.
РЕДАКТИРОВАТЬ: Если вы можете использовать HTML, вы можете просто сделать
<script>
function load() {
window.print();
window.close();
}
</script>
а также
<body onLoad="load()" ...>
во всплывающем окне, чтобы открыть документ и распечатать его. А затем закройте всплывающее окно.
Вы можете использовать простой код AutoIt всего из двух строк. И завершите свою работу, запустите этот файл кода в вашей программе.
http://www.autoitscript.com/site/autoit/
Понравился этот код:
$sRTFfilename = "C:\t\t.rtf" ;Change this path to one of your own
ShellExecute('"' & $sRTFfilename & '"', "", @ScriptDir, "print", @SW_HIDE)
;-)
Можно ли вместо этого сделать документ в HTML? Если бы вы могли сделать это, то могли бы позволить пользователям печатать через браузер довольно просто. Вам также может быть проще с PDF, по крайней мере, он будет более доступным на разных платформах.
Если вы вынуждены использовать MS Word, тогда вы будете очень ограничены в своих возможностях. Как отметил Леонель, я думаю, что ActiveX будет вашим единственным выбором, и даже тогда документ придется открывать, вы просто сможете запустить Word из браузера автоматически. Возможно, вы даже сможете внедрить экземпляр Word в IE через ActiveX, но я не уверен на 100% в этом.
Поскольку вы специально упоминаете Java как свою среду, вы можете принять во внимание OpenOffice или StarOffice - у них есть API, с которым намного проще общаться из Java, чем с ActiveX или Word с дистанционным управлением.
Он не более тяжелый, чем Word. Ссылки и документы должны быть легко найти.
Я работал в компании, где мы много использовали Remote-Control-Word и, наконец, перешли на StarOffice. Это было не для печати, а для преобразования документов (например, из Word в HTML), но должно быть достаточно похожим.
Конечно, я говорю о "старых версиях Word", но у нас обычно была проблема блокировки Word с каким-то произвольным диалогом, запрашивающим подтверждение того, что Word нашел - операция, которую наш сервер (работающий в фоновом режиме без контакта с рабочим столом), очевидно, явно не мог. Это стало намного лучше после перехода на StarOffice.