Am 19.07.2016 um 14:34 schrieb Gstöttner Siegfried:
Hi!

I am pretty new to java and currently working on an application for printing 
serial letters in JavaFX. I would like to give the user an overview of the 
result in a simple pdf-viewer. Like that one shown in an example prior to 
ver2.0. Could anybody tell me how to implement this with the actual libry? 
Examples missing or i could not find them. Are there any experiences with usage 
of Java FX8 Swingnode class to display such a viewer? Thank you very much.

You could look at PDFDebugger source code. Alternatively, here's some code modified from the code in https://issues.apache.org/jira/browse/PDFBOX-3359 . However this does not contain paging, and it isn't with java FX.


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.File;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.rendering.PDFRenderer;

public class PDFBox3359PanelTestEnhanced
{

    private static JPanel getTestPanel()
    {
        final PDDocument doc;
        try
        {
            doc = PDDocument.load(new File("....", "XXX.pdf"));
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
        final PDFRenderer renderer = new PDFRenderer(doc);
        JPanel panel = new JPanel()
        {
            int i;

            @Override
            protected void paintComponent(Graphics g)
            {
                try
                {
                    g.setColor(Color.red);
                    g.fillRect(0, 0, getWidth(), getHeight());
                    PDPage page = doc.getPage(0);
                    PDRectangle cropBox = page.getCropBox();
                    boolean rot = false;
if (page.getRotation() == 90 || page.getRotation() == 270)
                    {
                        rot = true;
                    }

// https://stackoverflow.com/questions/1106339/resize-image-to-fit-in-bounding-box float imgWidth = rot ? cropBox.getHeight() : cropBox.getWidth(); float imgHeight = rot ? cropBox.getWidth() : cropBox.getHeight();
                    float xf = getWidth() / imgWidth;
                    float yf = getHeight() / imgHeight;
                    float scale = Math.min(xf, yf);
                    if (yf < xf)
                    {
g.translate((int) ((getWidth() - imgWidth * yf) / 2), 0);
                    }
                    else
                    {
g.translate(0, (int) ((getHeight() - imgHeight * xf) / 2));
                    }
renderer.renderPageToGraphics(0, (Graphics2D) g, scale);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        };
        return panel;
    }

    public static void main(String[] args) throws Exception
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.add(getTestPanel());
                frame.pack();
                frame.setSize(600, 400);
                Dimension paneSize = frame.getSize();
                Dimension screenSize = frame.getToolkit().getScreenSize();
frame.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);
                frame.setTitle("Test");
                frame.setVisible(true);
            }
        });
    }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to