1

I have a frame and there are several components on it. How do I paint this JFrame using iText?

I write some code as follow(but does not work):

public void PrintFrameToPDF(Component c, File file) {
    try {
        Document d = new Document();
        PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream(file));
        d.open();

        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate template = cb.createTemplate(c.getWidth(), c.getHeight());
        Graphics2D g2d = template.createGraphics(c.getWidth(), c.getHeight());
        c.paintAll(g2d);
        c.addNotify();
        c.validate();
        g2d.dispose();

        d.close();
    } catch (Exception e) {
        //
    }
}
Nick Ren
  • 65
  • 3
  • 10

1 Answers1

1

First createTemplate uses its own units:

createTemplate(PageSize.A4.getHeight(), PageSize.A4.getWidth());

You could use:

g2d.translate(48.0, 48.0);

And delete addNotify and validate. Especially as you called getHeight, validate makes no sense. After g2d.dispose do:

cb.addTemplate(template, 0, 0);
Joop Eggen
  • 107,315
  • 7
  • 83
  • 138