Вот примерчик с использованием JPedal. Это их собственный пример, только слегка доработаннай, чтобы можно было документы напрямую из мссива байтов открывать. Например при считывании из базы данных.
| Код | import java.awt.BorderLayout; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL;
import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToolBar;
import org.jpedal.PdfDecoder;
/** * * <p>A 'barebones' example of implementing a PDF display panel - * The SimpleViewer example shows all the bells and whistles built into JPedalScope:<b>(All)</b> * <P> */ public class PDFViewer extends JPanel { /** * */ private static final long serialVersionUID = 1L;
private PdfDecoder pdfDecoder; private byte[] currentFile = null; private int currentPage=1; private final JLabel pageCounter1=new JLabel("Seite "); private JTextField pageCounter2=new JTextField(4); private JLabel pageCounter3=new JLabel("von"); JToolBar topBar = new JToolBar(); public PDFViewer(byte[] pdf) { setCursor(new Cursor(Cursor.WAIT_CURSOR)); currentFile = pdf; pdfDecoder = new PdfDecoder(); initializeViewer(); selectFile(); setCursor(Cursor.getDefaultCursor()); } private void selectFile() { try { //close the current pdf before opening another pdfDecoder.closePdfFile(); pdfDecoder.openPdfArray(currentFile); // these 2 lines opens page 1 at 100% scaling pdfDecoder.decodePage(currentPage); pdfDecoder.setPageParameters((float)1.5,1); //values scaling (1=100%). page number pdfDecoder.invalidate(); } catch(Exception e) { e.printStackTrace(); } //set page number display pageCounter2.setText(currentPage+""); pageCounter3.setText("von "+pdfDecoder.getPageCount()); repaint(); } private void initializeViewer() { this.setLayout(new BorderLayout()); Component[] itemsToAdd = initChangerPanel();//setup page display and changer topBar.setFloatable(false); topBar.add(Box.createGlue()); for(int i=0;i<itemsToAdd.length;i++) { topBar.add(itemsToAdd[i]); topBar.addSeparator(); } topBar.add(Box.createGlue()); this.add(topBar,BorderLayout.PAGE_START); JScrollPane display = initPDFDisplay();//setup scrollpane with pdf display inside this.add(display,BorderLayout.CENTER); }
/** * returns the scrollpane with pdfDecoder set as the viewport */ private JScrollPane initPDFDisplay() { JScrollPane currentScroll = new JScrollPane(); currentScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); currentScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); currentScroll.setViewportView(pdfDecoder); return currentScroll; }
/** * setup the page display and changer panel and return it */ private Component[] initChangerPanel() { Component[] list = new Component[5]; /**back icon*/ JButton back = new JButton("<<"); back.setPreferredSize(new Dimension(20, 20)); back.setMaximumSize(new Dimension(20, 20)); back.setBorderPainted(false); back.setToolTipText("Rewind one page"); list[0] = back; back.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(currentFile!=null && currentPage>1) { currentPage -= 1; try { pdfDecoder.decodePage(currentPage); pdfDecoder.invalidate(); repaint(); } catch (Exception e1) { System.err.println("back 1 page"); e1.printStackTrace(); } // set page number display pageCounter2.setText(currentPage+""); } } }); pageCounter2.setEditable(true); pageCounter2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { String value=(String) pageCounter2.getText().trim(); int newPage; //allow for bum values try { newPage=Integer.parseInt(value); if((newPage>pdfDecoder.getPageCount())|(newPage<1)) { return; } currentPage=newPage; try { pdfDecoder.decodePage(currentPage); pdfDecoder.invalidate(); repaint(); } catch(Exception e) { System.err.println("page number entered"); e.printStackTrace(); } } catch(Exception e) { JOptionPane.showMessageDialog(null,">"+value+ "< is Not a valid Value.\nPlease enter a number between 1 and "+pdfDecoder.getPageCount()); return; } } }); /**put page count in middle of forward and back*/ list[1] = pageCounter1; pageCounter1.setPreferredSize(new Dimension(50, 20)); pageCounter1.setMaximumSize(new Dimension(50, 20)); list[2] = pageCounter2; pageCounter2.setPreferredSize(new Dimension(50, 20)); pageCounter2.setMaximumSize(new Dimension(50, 20)); list[3] = pageCounter3; pageCounter3.setPreferredSize(new Dimension(50, 20)); pageCounter3.setMaximumSize(new Dimension(50, 20));
/**forward icon*/ JButton forward = new JButton(">>"); forward.setPreferredSize(new Dimension(20, 20)); forward.setMaximumSize(new Dimension(20, 20)); forward.setBorderPainted(false); forward.setToolTipText("forward 1 page"); list[4] = forward; forward.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(currentFile!=null && currentPage<pdfDecoder.getPageCount()) { currentPage += 1; try { pdfDecoder.decodePage(currentPage); pdfDecoder.invalidate(); repaint(); } catch (Exception e1) { System.err.println("forward 1 page"); e1.printStackTrace(); } // set page number display pageCounter2.setText(currentPage+""); } } }); return list; } }
|
|