Я ищу хороший стандартный способ сгенерировать "вывод" в моей программе RCP и распечатать его. Это должно работать так же, как и в Windows, Mac OS и Linux со стандартным диалоговым окном печати.

Мне известен проект Birt, но я не смог найти никаких подсказок о том, как реализовать его в программе RCP, как вызвать стандартный диалог печати и как передать отчет, созданный Birt, на принтер.

Рад всем подсказкам.

2
Raven 26 Мар 2010 в 10:05

2 ответа

Лучший ответ

Я считаю, что проект Birt использовал IText. (теперь ITextPDF)

Другое решение - интегрировать Apache Fop в ваш проект RCP . (см. Apache FOP).
Чтобы это работало, рекомендуется не реализовывать средство визуализации но реализовать пару IFDocumentHandler / IFPainter как часть нового промежуточного формата (если он был интегрирован в Fop, в чем я не уверен):

  • создать новый проект Java, выбрать имя пакета и подготовьте два класса, реализующих IFDocumentHandler (на уровне документа) и IFPainter (на уровне страницы).
    Эти интерфейсы находятся в пакете org.apache.fop.render.intermediate.
  • Чтобы зарегистрировать новую реализацию, вам необходимо определить тип MIME (см. Также MimeConstants.java) и создайте класс, расширяющий AbstractIFDocumentHandlerMaker, который служит фабричным классом.
  • Затем создайте текстовый файл с именем META-INF/services/org.apache.fop.render.intermediate.IFDocumentHandler, в котором вы напишите полное имя класса этого класса "производителя".
  • Одна вещь, которую мне, возможно, придется добавить (которая в настоящее время отсутствует), - это метод setIFDocumentHandlerOverride() в FOUserAgent, чтобы вы могли настроить вывод в окне SWT. Обычный API оптимизирован для создания файлов.

Небольшой пример содержит ошибка 23618 (исправленная семь лет спустя!) выполнения задания на печать, а FAQ по SWT содержит некоторые интересные элементы о принтере (по сравнению с дисплеем, DPI и обрезкой). Этот фрагмент SWT тоже довольно понятен. /> Однако ни один из этих примеров не вызывается с помощью команд, хотя вы можете легко определить один) после того, как вы настроили обработчик (то есть любой написанный вами класс, способный открывать диалоговое окно печати).

Примечание: при вызове диалогового окна печати помните, что только самые последние выпуски Eclipse Helios 3.6 (а именно 3.6M5 на конец января 2010 г.) может запоминать выбранные пользователем параметры для всех текстовых редакторов до тех пор, пока рабочая среда не будет отключена (что является:

  • Выбранный принтер
  • Печать в файл
  • Параметры принтера: это параметры конкретного принтера, такие как размер бумаги, ориентация порядка страниц и т. Д.)
2
Community 23 Май 2017 в 13:27
Спасибо, звучит как очень хороший ответ. Мне непонятна только ссылка на мою программу eclipse RCP и стандартный диалог печати. И как вывод "перемещается" на принтер (очередь).
 – 
Raven
26 Мар 2010 в 11:00
Еще раз спасибо, но похоже, что мы говорим о двух разных вещах. Я хотел понять, как вызывать и использовать стандартный диалог печати (используя команды, а не действия - поскольку действия должны использоваться больше ...), а затем как получить данные, передаваемые в очередь печати. Пока не нашел учебников по этому поводу.
 – 
Raven
27 Мар 2010 в 00:30
@Raven: правда, это была старая запись в FAQ, основанная на действиях, что "плохо";) Я обновил свой ответ, добавив некоторые элементы по теме, но без окончательных ответов.
 – 
VonC
27 Мар 2010 в 15:00

Вы можете рассмотреть возможность использования скрепок SWT. Это значительно упростило печать из моего приложения RCP.

http://code.google.com/p/swt-paperclips/

0
ksher 17 Июн 2010 в 21:29