Example usage for com.itextpdf.text.pdf PdfTemplate createGraphics

List of usage examples for com.itextpdf.text.pdf PdfTemplate createGraphics

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf PdfTemplate createGraphics.

Prototype

public java.awt.Graphics2D createGraphics(final float width, final float height) 

Source Link

Document

Gets a Graphics2D to write on.

Usage

From source file:com.centurylink.mdw.pdf.PdfExportHelper.java

License:Apache License

private void printGraph(DocWriter writer, ProcessCanvas canvas, Process process, Rectangle pageSize,
        Chapter chapter) throws Exception {
    Dimension graphsize = getGraphSize(process);
    // we create a template and a Graphics2D object that corresponds with it
    int w;//from  w  ww .  j  a  va 2  s  . co m
    int h;
    float scale;
    if ((float) graphsize.width < pageSize.getWidth() * 0.8
            && (float) graphsize.height < pageSize.getHeight() * 0.8) {
        w = graphsize.width + 36;
        h = graphsize.height + 36;
        scale = -1f;
    } else {
        scale = pageSize.getWidth() * 0.8f / (float) graphsize.width;
        if (scale > pageSize.getHeight() * 0.8f / (float) graphsize.height)
            scale = pageSize.getHeight() * 0.8f / (float) graphsize.height;
        w = (int) (graphsize.width * scale) + 36;
        h = (int) (graphsize.height * scale) + 36;
    }
    Image img;
    canvas.setBackground(Color.white);
    PdfContentByte cb = ((PdfWriter) writer).getDirectContent();
    PdfTemplate tp = cb.createTemplate(w, h);
    Graphics2D g2 = tp.createGraphics(w, h);
    if (scale > 0)
        g2.scale(scale, scale);
    tp.setWidth(w);
    tp.setHeight(h);
    canvas.paintComponent(g2);
    g2.dispose();
    img = new ImgTemplate(tp);
    chapter.add(img);
}

From source file:com.github.luischavez.levsym.modulos.funcion.PDF.java

License:Open Source License

public void CreateTablePDF(JTable tabla) {
    boolean shapes = false;
    Document document = new Document();
    Calendar c = Calendar.getInstance();
    String date = Integer.toString(c.get(Calendar.DAY_OF_MONTH)) + "-" + Integer.toString(c.get(Calendar.MONTH))
            + "-" + Integer.toString(c.get(Calendar.YEAR)) + " " + Integer.toString(c.get(Calendar.HOUR_OF_DAY))
            + "-" + Integer.toString(c.get(Calendar.MINUTE)) + "-" + Integer.toString(c.get(Calendar.SECOND));
    File Dir = new File(System.getProperty("user.dir") + "/Reportes/");
    if (!Dir.exists()) {
        Dir.mkdirs();/*from   ww w .  j av  a  2 s. com*/
    }
    try {
        PdfWriter writer;
        if (shapes) {
            writer = PdfWriter.getInstance(document,
                    new FileOutputStream(System.getProperty("user.dir") + "/Reportes/Tabla " + date + ".pdf"));
        } else {
            writer = PdfWriter.getInstance(document,
                    new FileOutputStream(System.getProperty("user.dir") + "/Reportes/Tabla " + date + ".pdf"));
        }

        document.open();
        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate tp = cb.createTemplate(500, 500);
        Graphics2D g2;
        if (shapes) {
            g2 = tp.createGraphicsShapes(500, 500);
        } else {
            g2 = tp.createGraphics(500, 500);
        }

        g2.dispose();
        cb.addTemplate(tp, 30, 300);
    } catch (Exception e) {
        Log.SaveLog(e.toString());
    }
    document.close();
}

From source file:com.rapidminer.gui.actions.ExportPdfAction.java

License:Open Source License

/**
 * Creates a pdf showing the given {@link Component} via {@link PdfTemplate} usage.
 * @param component//from   w ww  .java 2 s. c om
 * @param document
 * @param cb
 * @throws DocumentException
 */
private void createPdfViaTemplate(Component component, Document document, PdfContentByte cb)
        throws DocumentException {
    PdfTemplate tp = cb.createTemplate(500, PageSize.A4.getHeight() / 2);
    Graphics2D g2 = tp.createGraphics(500, PageSize.A4.getHeight() / 2);

    // special handling for charts as we only want to export the chart but not the control panel
    // chart cannot be scaled to size of component because otherwise we would break the chart aspect-ratio
    if (component.getClass().isAssignableFrom(JPanel.class)) {
        JPanel panel = (JPanel) component;
        if (panel.getLayout().getClass().isAssignableFrom(CardLayout.class)) {
            for (final Component comp : panel.getComponents()) {
                // iterate over all card components and see if there is a chart which would require special handling
                // if not we don't do anything in this loop and do the standard behavior at the bottom of the method
                if (comp.isVisible() && ChartConfigurationPanel.class.isAssignableFrom(comp.getClass())) {
                    final ChartConfigurationPanel chartConfigPanel = (ChartConfigurationPanel) comp;

                    // create new LinkAndBrushChartPanel with double buffering set to false to get vector graphic export
                    // The real chart has to use double buffering for a) performance and b) zoom rectangle drawing
                    LinkAndBrushChartPanel newLaBPanel = new LinkAndBrushChartPanel(
                            chartConfigPanel.getPlotEngine().getChartPanel().getChart(),
                            chartConfigPanel.getPlotEngine().getChartPanel().getWidth(),
                            chartConfigPanel.getPlotEngine().getChartPanel().getHeight(),
                            chartConfigPanel.getPlotEngine().getChartPanel().getMinimumDrawWidth(),
                            chartConfigPanel.getPlotEngine().getChartPanel().getMinimumDrawHeight(), false,
                            false);
                    newLaBPanel.setSize(chartConfigPanel.getPlotEngine().getChartPanel().getSize());
                    newLaBPanel
                            .setOverlayList(chartConfigPanel.getPlotEngine().getChartPanel().getOverlayList());
                    AffineTransform at = new AffineTransform();
                    double factor = 500d / chartConfigPanel.getPlotEngine().getChartPanel().getWidth();
                    at.scale(factor, factor);
                    g2.transform(at);
                    newLaBPanel.print(g2);
                    g2.dispose();
                    document.add(new Paragraph(componentName));
                    document.add(Image.getInstance(tp));

                    return;
                } else if (comp.isVisible() && PlotterPanel.class.isAssignableFrom(comp.getClass())) {
                    // special case for PlotterPanel as the Panel itself is wider than the plotter
                    // not having a special case here results in the exported image being too wide (empty space to the left)
                    final PlotterPanel plotterPanel = (PlotterPanel) comp;

                    AffineTransform at = new AffineTransform();
                    double factor = 500d / plotterPanel.getPlotterComponent().getWidth();
                    at.scale(factor, factor);
                    g2.transform(at);
                    plotterPanel.print(g2);
                    g2.dispose();
                    document.add(new Paragraph(componentName));
                    document.add(Image.getInstance(tp));

                    return;
                }
            }
        }
    }

    AffineTransform at = new AffineTransform();
    double factor = 500d / component.getWidth();
    at.scale(factor, factor);
    g2.transform(at);
    component.print(g2);
    g2.dispose();
    document.add(new Paragraph(componentName));
    document.add(Image.getInstance(tp));
}

From source file:com.rapidminer.gui.actions.ExportPdfAction.java

License:Open Source License

/**
 * Creates a pdf showing the given {@link PlotterTemplate} via {@link PdfTemplate} usage.
 * @param template//from  w  w w  .j  a  va2s .c o m
 * @param document
 * @param cb
 * @throws DocumentException
 */
private void createPdfViaTemplate(PlotterTemplate template, Document document, PdfContentByte cb)
        throws DocumentException {
    PdfTemplate tp = cb.createTemplate(500, PageSize.A4.getHeight() / 2);
    Graphics2D g2 = tp.createGraphics(500, PageSize.A4.getHeight() / 2);
    AffineTransform at = new AffineTransform();
    double factor = 500d / template.getPlotEngine().getChartPanel().getWidth();
    at.scale(factor, factor);
    g2.transform(at);
    template.getPlotEngine().getChartPanel().print(g2);
    g2.dispose();
    document.add(new Paragraph(componentName));
    document.add(Image.getInstance(tp));
}

From source file:figtree.application.FigTreePDF.java

License:Open Source License

static public void createGraphic(int width, int height, String treeFileName, String graphicFileName) {

    try {/*  w  w w  .  ja v  a2  s .c  om*/
        BufferedReader bufferedReader = new BufferedReader(new FileReader(treeFileName));
        String line = bufferedReader.readLine();
        while (line != null && line.length() == 0) {
            line = bufferedReader.readLine();
        }

        bufferedReader.close();

        boolean isNexus = (line != null && line.toUpperCase().contains("#NEXUS"));

        Reader reader = new FileReader(treeFileName);

        Map<String, Object> settings = new HashMap<String, Object>();

        ExtendedTreeViewer treeViewer = new ExtendedTreeViewer();
        ControlPalette controlPalette = new BasicControlPalette(200,
                BasicControlPalette.DisplayMode.ONLY_ONE_OPEN);
        FigTreePanel figTreePanel = new FigTreePanel(null, treeViewer, controlPalette);

        // First of all, fully populate the settings map so that
        // all the settings have defaults
        controlPalette.getSettings(settings);

        List<Tree> trees = new ArrayList<Tree>();

        if (isNexus) {
            FigTreeNexusImporter importer = new FigTreeNexusImporter(reader);
            trees.add(importer.importNextTree());

            // Try to find a figtree block and if found, parse the settings
            while (true) {
                try {
                    importer.findNextBlock();
                    if (importer.getNextBlockName().equalsIgnoreCase("FIGTREE")) {
                        importer.parseFigTreeBlock(settings);
                    }
                } catch (EOFException ex) {
                    break;
                }
            }
        } else {
            NewickImporter importer = new NewickImporter(reader, true);
            trees.add(importer.importNextTree());
        }

        if (trees.size() == 0) {
            throw new ImportException("This file contained no trees.");
        }

        treeViewer.setTrees(trees);

        controlPalette.setSettings(settings);

        treeViewer.getContentPane().setSize(width, height);

        OutputStream stream;
        if (graphicFileName != null) {
            stream = new FileOutputStream(graphicFileName);
        } else {
            stream = System.out;
        }

        Document document = new Document();
        document.setPageSize(new com.itextpdf.text.Rectangle(width, height));
        try {
            PdfWriter writer = PdfWriter.getInstance(document, stream);
            document.open();
            PdfContentByte cb = writer.getDirectContent();
            PdfTemplate tp = cb.createTemplate(width, height);
            Graphics2D g2 = tp.createGraphics(width, height);
            tp.setWidth(width);
            tp.setHeight(height);
            treeViewer.getContentPane().print(g2);
            g2.dispose();
            tp.sanityCheck(); // all the g2 content is written to tp, not cb
            cb.addTemplate(tp, 0, 0);
            cb.sanityCheck();
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
        document.close();

    } catch (ImportException ie) {
        throw new RuntimeException("Error writing graphic file: " + ie);
    } catch (IOException ioe) {
        throw new RuntimeException("Error writing graphic file: " + ioe);
    }

}

From source file:matheos.texte.OngletTexte.java

License:Open Source License

public void export2Pdf(final File f) {
    final Formatter formatter = editeur.getFormatter();
    new Thread(new Runnable() {
        @Override/*from w  w  w .  j  a va 2 s . c o m*/
        public void run() {
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(f);
                Document document = new Document();
                Book book = formatter.createBook();

                try {
                    PdfWriter writer = PdfWriter.getInstance(document, fos);
                    document.open();
                    PdfContentByte canvas = writer.getDirectContent();
                    for (int i = 0; i < book.getNumberOfPages(); i++) {
                        document.newPage();
                        PageFormat page = book.getPageFormat(i);
                        PdfTemplate templ = canvas.createTemplate((float) page.getWidth(),
                                (float) page.getHeight());
                        Graphics2D g2 = templ.createGraphics((float) page.getWidth(), (float) page.getHeight());
                        try {
                            book.getPrintable(i).print(g2, book.getPageFormat(i), i);
                        } catch (PrinterException ex) {
                            Logger.getLogger(OngletTexte.class.getName()).log(Level.SEVERE, null, ex);
                        }
                        canvas.addTemplate(templ, 0, 0);
                        g2.dispose();
                    }
                } catch (DocumentException ex) {
                    Logger.getLogger(OngletTexte.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    document.close();
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(OngletTexte.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                if (fos != null) {
                    try {
                        fos.flush();
                        fos.close();
                    } catch (IOException ex) {
                        Logger.getLogger(OngletTexte.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }
    }).start();
}

From source file:org.fhaes.neofhchart.PDFExportOptionsDialog.java

License:Open Source License

/**
 * Performs the export operation using the currentChart as the source.
 * /*from w  w  w .ja v a2  s  . co m*/
 * @return true if the operation completed successfully, false otherwise
 */
private boolean doExportToPDF() {

    boolean completedSuccessfully = false;

    if (currentChart != null) {
        log.debug("Exporting to PDF...");
        Document document = null;

        if (cboPaperSize.getSelectedItem() instanceof Rectangle) {
            Rectangle rect = (Rectangle) cboPaperSize.getSelectedItem();

            if (radLandscape.isSelected()) {
                rect = rect.rotate();
            }

            document = new Document(rect, 10, 10, 10, 10);
        } else {
            Rectangle rect = new Rectangle(currentChart.getTotalWidth(), currentChart.getTotalHeight());
            document = new Document(rect, 10, 10, 10, 10);
        }

        try {
            currentChart.setVisibilityOfNoExportElements(false);

            PdfWriter writer = PdfWriter.getInstance(document,
                    new FileOutputStream(outputFile.getAbsolutePath()));
            document.open();

            int width = (int) document.getPageSize().getWidth();
            int height = (int) document.getPageSize().getHeight();

            PdfContentByte cb = writer.getDirectContent();
            PdfTemplate template = cb.createTemplate(width, height);

            @SuppressWarnings("deprecation")
            Graphics2D g2 = template.createGraphics(width, height);

            PrintTranscoder prm = new PrintTranscoder();
            TranscoderInput ti = new TranscoderInput(currentChart.getSVGDocument());
            prm.transcode(ti, null);

            PageFormat pg = new PageFormat();
            Paper pp = new Paper();
            pp.setSize(width, height);
            pp.setImageableArea(0, 0, width, height);
            pg.setPaper(pp);
            prm.print(g2, pg, 0);
            g2.dispose();

            ImgTemplate img = new ImgTemplate(template);
            document.add(img);

            completedSuccessfully = true;
        } catch (DocumentException e) {
            System.err.println(e);
        } catch (IOException e) {
            System.err.println(e);
        } finally {
            currentChart.setVisibilityOfNoExportElements(true);
        }

        document.close();
    }

    return completedSuccessfully;
}

From source file:org.orbisgis.core_export.GeoSpatialPDF.java

License:Open Source License

/**
 * Process all layers in the layermodel and build the corresponding pdf tree
 * layer//w  w  w  .  j a v  a 2  s .  c o  m
 *
 * @param layer
 */
private void processSubLayer(ILayer layer, MapTransform mt, PdfWriter writer, PdfContentByte cb,
        ProgressMonitor pm, PdfLayer mainLayer) {
    if (layer.acceptsChilds() && layer.getLayerCount() > 0) {
        PdfLayer groupLayer = new PdfLayer(layer.getName(), writer);
        //To manage group of layers
        for (ILayer subLayer : layer.getChildren()) {
            processSubLayer(subLayer, mt, writer, cb, pm, groupLayer);
        }

    } else {
        if (layer.isVisible() && layer.getEnvelope().intersects(mt.getAdjustedExtent())) {
            PdfLayer mapLayer = new PdfLayer(layer.getName(), writer);
            if (mainLayer != null) {
                mainLayer.addChild(mapLayer);
            }
            PdfTemplate layerTemplate = cb.createTemplate(width, height);
            Graphics2D g2dLayer = layerTemplate.createGraphics(width, height);
            cb.beginLayer(mapLayer);
            PdfRenderer renderer2 = new PdfRenderer(layerTemplate, width, height);
            renderer2.draw(mt, g2dLayer, (int) width, (int) height, layer, pm);
            cb.addTemplate(layerTemplate, 0, 0);
            g2dLayer.dispose();
            cb.endLayer();
        }
    }
}

From source file:org.orbisgis.mapcomposer.controller.utils.exportThreads.ExportPDFThread.java

License:Open Source License

@Override
public void run() {
    try {//  ww w  .j av  a 2s.  c o  m
        Document pdfDocument = null;
        //Find the Document GE to create the BufferedImage where all the GE will be drawn
        for (GraphicalElement ge : geIsVectorMap.keySet()) {
            if (ge instanceof org.orbisgis.mapcomposer.model.graphicalelement.element.Document) {
                pdfDocument = new Document(new Rectangle(ge.getWidth(), ge.getHeight()));
                height = ge.getHeight();
            }
        }
        //If no Document was created, throw an exception
        if (pdfDocument == null) {
            throw new IllegalArgumentException(i18n.tr(
                    "Error on export : The list of GraphicalElement to export does not contain any Document GE."));
        }
        //Open the document
        PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(path));
        writer.setUserProperties(true);
        writer.setRgbTransparencyBlending(true);
        writer.setTagged();
        pdfDocument.open();

        PdfContentByte cb = writer.getDirectContent();

        progressBar.setIndeterminate(true);
        progressBar.setStringPainted(true);
        progressBar.setString(i18n.tr("Exporting the document ..."));

        int geCount = 0;
        int numberOfGe[] = new int[geManager.getRegisteredGEClasses().size()];
        for (int i = 0; i < numberOfGe.length; i++) {
            numberOfGe[i] = 0;
        }
        //Draw each GraphicalElement in the BufferedImage
        for (GraphicalElement ge : geStack) {
            if ((ge instanceof org.orbisgis.mapcomposer.model.graphicalelement.element.Document))
                continue;

            double rad = Math.toRadians(ge.getRotation());
            double newHeight = Math.abs(sin(rad) * ge.getWidth()) + Math.abs(cos(rad) * ge.getHeight());
            double newWidth = Math.abs(sin(rad) * ge.getHeight()) + Math.abs(cos(rad) * ge.getWidth());

            int maxWidth = Math.max((int) newWidth, ge.getWidth());
            int maxHeight = Math.max((int) newHeight, ge.getHeight());

            String layerName = ge.getGEName()
                    + numberOfGe[geManager.getRegisteredGEClasses().indexOf(ge.getClass())];

            if (geIsVectorMap.get(ge)) {
                PdfTemplate pdfTemplate = cb.createTemplate(maxWidth, maxHeight);
                Graphics2D g2dTemplate = pdfTemplate.createGraphics(maxWidth, maxHeight);
                PdfLayer layer = new PdfLayer(layerName, writer);
                cb.beginLayer(layer);
                ((RendererVector) geManager.getRenderer(ge.getClass())).drawGE(g2dTemplate, ge);
                cb.addTemplate(pdfTemplate, ge.getX() + (ge.getWidth() - maxWidth) / 2,
                        -ge.getY() + height - ge.getHeight() + (ge.getHeight() - maxHeight) / 2);
                g2dTemplate.dispose();
                cb.endLayer();
            }

            else {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                BufferedImage bi = ((RendererRaster) geManager.getRenderer(ge.getClass())).createGEImage(ge,
                        null);
                ImageIO.write(bi, "png", baos);
                Image image = Image.getInstance(baos.toByteArray());
                image.setAbsolutePosition(ge.getX() + (ge.getWidth() - maxWidth) / 2,
                        -ge.getY() + height - ge.getHeight() + (ge.getHeight() - maxHeight) / 2);

                PdfTemplate pdfTemplate = cb.createTemplate(maxWidth, maxHeight);
                Graphics2D g2dTemplate = pdfTemplate.createGraphics(maxWidth, maxHeight);
                PdfLayer layer = new PdfLayer(layerName, writer);
                cb.beginLayer(layer);
                g2dTemplate.drawImage(bi, 0, 0, null);
                cb.addTemplate(pdfTemplate, ge.getX() + (ge.getWidth() - maxWidth) / 2,
                        -ge.getY() + height - ge.getHeight() + (ge.getHeight() - maxHeight) / 2);
                g2dTemplate.dispose();
                cb.endLayer();
            }
            numberOfGe[geManager.getRegisteredGEClasses().indexOf(ge.getClass())]++;

            progressBar.setIndeterminate(false);
            progressBar.setValue((geCount * 100) / geIsVectorMap.keySet().size());
            progressBar.revalidate();
            geCount++;
        }

        pdfDocument.close();
        //Wait a bit before erasing the progress bar
        progressBar.setValue(progressBar.getMaximum());
        progressBar.setString(i18n.tr("Document successfully exported."));
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            LoggerFactory.getLogger(ExportPDFThread.class).error(e.getMessage());
        }
        progressBar.setValue(0);
        progressBar.setStringPainted(false);

    } catch (IllegalArgumentException | IOException | DocumentException ex) {
        LoggerFactory.getLogger(ExportPDFThread.class).error(ex.getMessage());
    }
}

From source file:ptolemy.vergil.basic.export.itextpdf.ExportPDFAction.java

License:Open Source License

/** Export PDF to a file.
 *  This uses the iText library at http://itextpdf.com/.
 *
 *  <p>If {@link ptolemy.gui.PtGUIUtilities#useFileDialog()} returns true
 *  then a java.awt.FileDialog is used, otherwise a javax.swing.JFileChooser
 *  is used.</p>//ww w  . j a v a2  s .c  om
 */
private void _exportPDF() {
    Dimension size = _frame.getContentSize();
    Rectangle pageSize = null;
    try {
        pageSize = new Rectangle(size.width, size.height);
    } catch (Throwable ex) {
        // This exception will occur if the iText library is not installed.
        MessageHandler.error("iText library is not installed. See http://itextpdf.com/."
                + "  You must have iText.jar in your classpath.  Sometimes, "
                + "iText.jar may be found in $PTII/vendors/itext/iText.jar.", ex);
        return;
    }
    Document document = new Document(pageSize);
    JFileChooserBugFix jFileChooserBugFix = new JFileChooserBugFix();
    Color background = null;
    PtFileChooser ptFileChooser = null;
    try {
        background = jFileChooserBugFix.saveBackground();

        ptFileChooser = new PtFileChooser(_frame, "Specify a pdf file to be written.",
                JFileChooser.SAVE_DIALOG);

        LinkedList extensions = new LinkedList();
        extensions.add("pdf");
        ptFileChooser.addChoosableFileFilter(new ExtensionFilenameFilter(extensions));

        BasicGraphFrame basicGraphFrame = null;
        if (_frame instanceof BasicGraphFrame) {
            basicGraphFrame = (BasicGraphFrame) _frame;
            ptFileChooser.setCurrentDirectory(basicGraphFrame.getLastDirectory());
            ptFileChooser.setSelectedFile(new File(basicGraphFrame.getModel().getName() + ".pdf"));
        }
        int returnVal = ptFileChooser.showDialog(_frame, "Export PDF");

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            if (basicGraphFrame != null) {
                basicGraphFrame.setLastDirectory(ptFileChooser.getCurrentDirectory());
            }
            File pdfFile = ptFileChooser.getSelectedFile().getCanonicalFile();

            if (pdfFile.getName().indexOf(".") == -1) {
                // If the user has not given the file an extension, add it
                pdfFile = new File(pdfFile.getAbsolutePath() + ".pdf");
            }

            // The Mac OS X FileDialog will ask if we want to save before this point.
            if (pdfFile.exists() && !PtGUIUtilities.useFileDialog()) {
                if (!MessageHandler.yesNoQuestion("Overwrite " + pdfFile.getName() + "?")) {
                    return;
                }
            }

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
            // To ensure Latex compatibility, use earlier PDF version.
            writer.setPdfVersion(PdfWriter.VERSION_1_3);
            document.open();
            PdfContentByte contentByte = writer.getDirectContent();

            PdfTemplate template = contentByte.createTemplate(size.width, size.height);
            Graphics2D graphics = template.createGraphics(size.width, size.height);
            template.setWidth(size.width);
            template.setHeight(size.height);

            Paper paper = new Paper();
            paper.setSize(size.width, size.height);
            paper.setImageableArea(0.0, 0.0, size.width, size.height);
            PageFormat format = new PageFormat();
            format.setPaper(paper);
            ((Printable) _frame).print(graphics, format, 0);
            graphics.dispose();
            contentByte.addTemplate(template, 0, 0);

            // Open the PDF file.
            // FIXME: _read is protected in BasicGraphFrame
            //_read(pdfFile.toURI().toURL());
            // Open the image pdfFile.
            if (basicGraphFrame == null) {
                MessageHandler.message("PDF file exported to " + pdfFile.getName());
                /* Remove the following. The extra click is annoying...
                } else {
                if (MessageHandler.yesNoQuestion("Open \""
                        + pdfFile.getCanonicalPath() + "\" in a browser?")) {
                    Configuration configuration = basicGraphFrame
                            .getConfiguration();
                    try {
                        URL imageURL = new URL(pdfFile.toURI().toURL()
                                .toString()
                                + "#in_browser");
                        configuration.openModel(imageURL, imageURL,
                                imageURL.toExternalForm(),
                                BrowserEffigy.staticFactory);
                    } catch (Throwable throwable) {
                        MessageHandler.error(
                                "Failed to open \"" + pdfFile.getName()
                                        + "\".", throwable);
                    }
                }
                 */
            }
        }
    } catch (Exception e) {
        MessageHandler.error("Export to PDF failed", e);
    } finally {
        try {
            document.close();
        } finally {
            jFileChooserBugFix.restoreBackground(background);
        }
    }
}