Может ли Java-апплет использовать принтер?

Может ли Java-апплет легко распечатать текст / html для стандартных драйверов принтера (со всеми распространенными платформами Win / Mac / Linux)?

Это нужно подписывать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
0
19 142
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для печати вам нужно будет либо использовать Подписанные апплеты, либо, если неподписанный апплет попытается напечатать, пользователю будет предложено спросить, разрешить ли разрешение.

Вот пример кода для печати HTML с помощью JEditorPane:

public class HTMLPrinter implements Printable{
    private final JEditorPane printPane;

    public HTMLPrinter(JEditorPane editorPane){
        printPane = editorPane;
    }

    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex){
        if (pageIndex >= 1) return Printable.NO_SUCH_PAGE;

        Graphics2D g2d = (Graphics2D)graphics;
        g2d.setClip(0, 0, (int)pageFormat.getImageableWidth(), (int)pageFormat.getImageableHeight());
        g2d.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY());

        RepaintManager rm = RepaintManager.currentManager(printPane);
        boolean doubleBuffer = rm.isDoubleBufferingEnabled();
        rm.setDoubleBufferingEnabled(false);

        printPane.setSize((int)pageFormat.getImageableWidth(), 1);
        printPane.print(g2d);

        rm.setDoubleBufferingEnabled(doubleBuffer);

        return Printable.PAGE_EXISTS;
    }
}

Затем, чтобы отправить его на принтер:

HTMLPrinter target = new HTMLPrinter(editorPane);
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(target);
try{
    printJob.printDialog();
    printJob.print();
}catch(Exception e){
    e.printStackTrace();
}

Как ответил Нил Коффи, вам не нужно подписывать.

Tom Hawtin - tackline 13.01.2009 16:15

Спасибо за отличный код! Однако есть одна проблема с моими данными тестирования: testPanel.setText ("<html> <h1> Это тестовая печать </h1> blaa blaa </html>"); Вывод на бумаге имеет видимые HTML-теги, поэтому его форматирование не выполняется, например. заголовок, он просто выводит теги H1.

Tom 16.03.2009 14:27

Том, вы должны использовать HTMLEditorKit. Попробуйте testPanel.setContentType ("text / html") перед настройкой содержимого html с помощью setText.

grom 17.03.2009 12:47

каковы все необходимые импортные данные для выполнения этого запуска?

Derek P. 01.04.2010 08:06

Для печати диспетчер безопасности должен разрешить ему доступ к принтеру. Это означает либо подпись апплета, либо, по крайней мере, последние версии подключаемого модуля Sun Java, если неподписанный апплет попытается напечатать, пользователю будет предложено, чтобы спросить, разрешить ли разрешение.

Wew! Ненавижу, если случайный сайт начнет печатать спам на моих листах ... :-)

PhiLho 13.01.2009 15:15

PhiLho: Есть диалоговое окно. JavaScript может делать то же самое.

Tom Hawtin - tackline 13.01.2009 16:14

Нил Коффи: Последние версии? Он был там уже десять лет.

Tom Hawtin - tackline 13.01.2009 16:15

Том - спасибо за исправление - это действительно так долго ...? Вы внезапно заставили меня почувствовать себя очень старым !! :-)

Neil Coffey 13.01.2009 20:58

Даже более новые версии JRE могут развертывать апплет с помощью JWS и использовать javax.jnlp.PrintService. По ощущениям это похоже на «приглашение / печать» ненадежного апплета.

Andrew Thompson 01.08.2012 03:12

Другие вопросы по теме