11

Can a Java Applet able to print out text/html easily to standard printer driver(s) (with all common platforms Win/Mac/Linux)?

Does it need to be signed?

jfs
  • 16,758
  • 13
  • 62
  • 88
Tom
  • 6,725
  • 24
  • 95
  • 159

2 Answers2

11

To print you will either need to use Signed Applets or if an unsigned applet tries to print, the user will be prompted to ask whether to allow permission.

Here is some sample code for printing HTML using 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;
    }
}

Then to send it to printer:

HTMLPrinter target = new HTMLPrinter(editorPane);
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(target);
try{
    printJob.printDialog();
    printJob.print();
}catch(Exception e){
    e.printStackTrace();
}
grom
  • 15,842
  • 19
  • 64
  • 67
  • 1
    As Neil COffey's answer, you do not need to sign. – Tom Hawtin - tackline Jan 13 '09 at 13:15
  • Thanks for great code! However, one issue with my testing data: testPanel.setText("

    This is a test print

    blaa blaa "); The output on paper has HTML tags visible, so its not formatting e.g. header, it just outputs H1 tags.
    – Tom Mar 16 '09 at 11:27
  • Tom you have to have it use the HTMLEditorKit. Try testPanel.setContentType("text/html") before setting html content with setText – grom Mar 17 '09 at 09:47
  • what are all the necessary imports to make this run? – Derek P. Apr 01 '10 at 04:06
5

In order to print, the security manager needs to allow it to access the printer. This means either signing the applet or, at least with recent versions of Sun's Java plugin, if an unsigned applet tries to print, the user will be prompted to ask whether to allow permission.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
Neil Coffey
  • 21,615
  • 7
  • 62
  • 83