Меню Рубрики

Java print pdf windows

Печать документов на принтере в Java

6. Современные методы печати

Библиотека классов java.awt.print описаная выше достаточно удобна для печати как одностраничных, так и многостраничных документов, однако у нее имеется неочевидный при первом рассмотрении недостаток: внешний вид страниц необходимо формировать с помощью самостоятельно созданных классов и методов. Такой подход вполне допустим если приложение разрабатываемое программистом должно формировать бланки или отчеты заранее определенного вида, но такой подход становится неудобным в случае создания универсальной программы печати документов различных форматов, например текстовых файлов, HTML-страниц, PDF-документов и т. п.
Еще один на первый взгляд не заметный недостаток печати при помощи Java 1.2 API — оконные диалоги, возникающие при печати не являются истинно платформенно независимыми. В различных операционных системах диалоговые окна настроек принтера и настроек страницы будут иметь различный внешний вид.
К недостаткам вышеописанных классов можно также отнести отсутствие возможности обрабатывать события связанные с принтером, что могло бы быть полезным при печати длинных документов, когда важно проследить не прервалась ли работа принтера и не изменились ли его настройки, и не очень высокую производительность печати, так как принтер печатает подготовленное изображение, т. е. работает в графическом режиме, в то время, как у многих принтеров существуют текстовые режимы печати, существенно более производительные, чем графический режим.
Описаные выше проблемы на сегодняшний день решаются с помощью дополнительных классов и методов для печати появившихся в Java 1.4 API. Все дополнительные к Java 1.2 API классы для печати сгруппированы в пакете javax.print и его подпакетах.

Принципиальное отличие нового API заключается в том, что при печати учитывается медиа тип содержимого документа, задаваемый при помощи стандартных, определенных в RFC-документах 2045 и 2046, MIME-типов (Multipurpose Internet Mail Extensions Types). Существует достаточно много MIME-типов форматирования данных, «понимаемых» Java 1.4 API, например: «text/plain» — текстовые ASCII документы, «text/html» — документы формата HTML, «application/pdf» — документы формата PDF, «application/postscript» — документы формата PostScript, «image/gif» и «image/jpeg» — соответствующие графические форматы, и т. д. Помимо возможности печатать предварительно отформатированные документы, сохранилась также возможность печати документов формируемых в пользовательских Java-классах, реализующих интерфейс java.awt.print.Printable . Таким источникам данных для печати соответствует MIME-тип «application/x-java-jvm-local-objectref». Для обозначения данных такого типа в англоязычной литературе используют термин «service formatted print data«, а для данных стандартных MIME-типов, извлекаемых из некоторого источника, где они уже находились в предварительно отформатированном виде используют термин «client formatted print data«.

Практически для осуществления печати документа, с помощью Java 1.4 API, необходимо выполнить следующую последовательность действий:

  1. Получить список доступных системе принтеров
  2. Создать объект для дальнейшего взаимодействия с принтером
  3. Описать тип форматирования (MIME-тип) печатаемых данных
  4. Задать свойства печати (количество и формат листов и т. п.)
  5. Установить связь с источником данных
  6. Распечатать данные

6.2 Получение списка принтеров

В качестве объекта идентифицирующего системный принтер выступает объект реализующий интерфейс javax.print.PrintService . Получение ссылки на этот объект производится с помощью специальных «поисковых» методов класса PrintServiceLookup :

    public static PrintService lookupDefaultPrintService() — отыскивает принтер по умолчанию, в случае если такой принтер отсутствует, возвращает null

  • public static PrintService[] lookupPrintServices(DocFlavor flavor,AttributeSet attributes) — отыскивает все доступные операционной системе принтеры, удовлетворяющие заданым требованиям (например способных печатать документы формата A3). Если в качестве аргументов указать значения null , то вернется массив из всех принтеров доступных ОС пользователя
  • Пример кода, выполняющего описанное действие:
    6.3 Создание объекта для взаимодействия с принтером

    Источник

    Silent Printing of PDF From Within Java

    We are looking into silent printing of PDF documents from within Java. The printing will be invoked from the desktop and not through a browser so we cannot use JavaScript. PDF Renderer is an operational solution but their rendering quality is not acceptable. iText does not seem to be pluggable with the Java print service. There are some commercial Java libraries, jPDFPrint by Qoppa, JPedal, and ICEpdf which we have not tried out yet.

    Does anybody have any experience with PDF silent printing from Java?

    7 Answers 7

    Apache PDFBox. It is currently in incubation, but the PDF printing functionality has been around before that. Internally, it uses the Java Print Services to create a print job, and it also supports silent printing.

    Do note that it requires Fontbox as well, and the current (upcoming 0.8.0 release) has included graceful fallback for documents with Type 0 fonts. Type 1 fonts are printed correctly; however in 0.7.3, attempts to print documents with Type 0 fonts will result in an exception being thrown.

    Maybe I’m misunderstanding, but why not just use the Print Service API directly? The following works for me (assumes you have the PDF document as a byte array):

    Have a look at www.pdflib.com. Its comercial but PDFlib Lite is available for free for open source projects. It has bindings for java.

    You will need the commercial version of IcePdf if you want full font support.

    I have experience with making Acrobat (Reader or Full) do the printing, but it’s anything but silent (it is unattended, though — just depends on how ‘silent’ the silent requirement is). If there’s interest, I can shoot you the native code that makes the required DDE calls.

    iText is intended for creating PDF files (per a post I saw from the author), and thus probably isn’t what you want.

    I’ve used Qoppa’s jPDFPrint quite successfully for exactly this purpose, but it’s not cheap. If you can afford it, it’s the most robust solution I’ve found thus far. I’ve also been very impressed with the level of support; they even generated some custom sample code for me.

    I tried PDFBox, but found that it doesn’t support the «Shrink to printable area» page scaling that you get with Acrobat. Not everyone will care about this feature, but it’s essential for me.

    Источник

    Преобразование PDF-документов в Java

    Введение

    В этой статье мы расскажем о программном преобразовании PDF- файлов в Java. Опишем, как сохранять PDF-файлы в PNG или JPEG, Microsoft Word, экспортировать в HTML. А также как извлекать из них текст, используя библиотеки Java с открытым исходным кодом.

    Ссылки на Maven

    Первая библиотека, которую мы рассмотрим, Pdf2Dom . Начнём с добавления зависимостей Maven в наш проект:

    Мы будем использовать первую зависимость для загрузки выбранного PDF-файла. Вторая зависимость отвечает непосредственно за преобразование. Актуальные версии библиотек доступны по следующим ссылкам: pdfbox-tools и pdf2dom .

    Кроме этого мы будем использовать iText для извлечения текста из PDF-файла и POI для создания документа в формате .docx.

    Рассмотрим зависимости Maven, которые нужно добавить в проект:

    Актуальная версия iText доступна здесь , а Apache POI здесь .

    Преобразования из PDF в HTML

    Для работы с файлами HTML используйте Pdf2Dom . Это парсер PDF, преобразующий документы в представление HTML DOM.

    Чтобы преобразовать PDF в HTML, применяется библиотека XMLWorker, входящая в состав iText .

    PDF в HTML

    Рассмотрим простое преобразование из PDF в HTML:

    В приведенном выше примере мы загрузили PDF-файл, используя API от PDFBox. После этого мы применили парсер для разбора файла и вывода результата с помощью java.io.Writer.

    Обратите внимание, что преобразование PDF в HTML не является на 100% точным. Результат зависят от сложности и структуры конкретного PDF-файла.

    HTML в PDF

    Теперь рассмотрим преобразование HTML в PDF:

    При преобразовании HTML в PDF нужно убедиться, что все теги правильно открываются и закрываются. Иначе PDF-документ не будет создан.

    Преобразование PDF в изображение

    Есть много способов преобразовать PDF-файл в изображение. Одно из наиболее популярных решений – библиотека с открытым исходным кодом Apache PDFBox . Для преобразования изображения в PDF-документ мы снова используем iText .

    PDF в изображение

    Для конвертации используем зависимость pdfbox-tools, упомянутую в предыдущих разделах. Рассмотрим следующий пример:

    В приведенном примере PDFRenderer применяется, чтобы отрисовать PDF как BufferedImage. При этом каждая страница PDF- файла должна быть отрисована отдельно.

    Также мы используем ImageIOUtil из Apache PDFBox Tools для записи изображения в файл с указанным расширением. Поддерживаемые форматы: jpeg, jpg, gif, tiff или png.

    Apache PDFBox – это продвинутый инструмент. Он позволяет создавать PDF-файлы с нуля, заполнять формы внутри PDF-файла, подписывать и шифровать его содержимое.

    Изображение в PDF

    Рассмотрим следующий пример:

    Расширения выходного файла могут быть следующими: jpeg, jpg, gif, tiff или png.

    Преобразования PDF в текст

    Чтобы извлечь текст из PDF-файла, нам снова понадобится Apache PDFBox . Для преобразования текста в PDF мы будем использовать iText .

    PDF в текст

    Мы создадим метод generateTxtFromPDF(…) и разделим его код на три функциональных части: загрузка PDF, извлечение текста и создание итогового файла.

    Начнём с загрузки PDF:

    Чтобы прочитать PDF-файл, используем PDFParser с флагом r (read). А также метод parser.parse(), который разберёт файл в поток и создаст из него объект COSDocument.

    Часть кода, отвечающая за извлечение текста:

    Сначала мы сохраняем объект COSDocument в переменную cosDoc. Затем он будет использован для создания PDDocument, который является представлением PDF-документа в памяти. После этого используем PDFTextStripper, чтобы вернуть документ с текстом. В конце вызываем метод close(), чтобы закрыть все использованные потоки.

    В последней части метода мы сохраним текст в созданный файл с помощью класса PrintWriter:

    Текст в PDF

    Преобразование текстовых файлов в PDF – операция с подвохом. Чтобы сохранить форматирование исходного файла, необходимо применить дополнительные правила.

    В следующем примере мы определяем размер страницы PDF-файла, версию и выходной файл:

    Затем задаем шрифт, а также символ для разделения параграфов:

    После этого добавляем параграфы в созданный PDF-файл:

    Преобразования PDF в Docx

    Чтобы создать файл Microsoft Word из PDF-файла, понадобятся две библиотеки с открытым исходным кодом: iText – для извлечения текста из PDF- файла, POI – для создания документа в формате .docx.

    Рассмотрим код, предназначенный для загрузки PDF-файла:

    После загрузки PDF-файла необходимо прочитать и отрисовать каждую страницу отдельно, а затем записать результат в файл:

    Коммерческие библиотеки для преобразования PDF в X

    В предыдущих разделах статьи мы рассмотрели библиотеки с открытым исходным кодом. Кроме них существуют и платные решения:

    • jPDFImages – позволяет создавать изображения из страниц PDF-документа и экспортировать их в изображения JPEG, TIFF или PNG.
    • JPEDAL – мощная библиотека, используемая в SDK для печати, просмотра и преобразования файлов.
    • pdfcrowd – библиотека, предназначенная для преобразования из Web/HTML в PDF и из PDF в Web/HTML.

    Заключение

    В этой статье мы обсудили пути преобразование PDF-файлов в различные форматы. Полный код примеров, приведенных в данной публикации, доступен на GitHub .

    Данная публикация представляет собой перевод статьи « PDF Conversions in Java » , подготовленной дружной командой проекта Интернет-технологии.ру

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Java library path windows
  • Java latest windows xp
  • Java installer windows offline installer
  • Java encoding windows 1251
  • Java console application windows