
Originariamente inviata da
andbin
Puoi postare un pochino di codice (magari di più di quello postato all'inizio)? Da quello iniziale, vedo e capisco solo che stai usando il componente (pannello) di PDFBox per mostrare una pagina.
Questa è la classe che faccio riferimento:
codice:
/**Classe BookReader per lettura dei libri
* Implementa metodi astratti dichiarati in
* Classe lettura_Panel
*/
import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.Dimension;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import org.apache.pdfbox.PDFReader;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.exceptions.InvalidPasswordException;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdfviewer.PDFPagePanel;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.util.PDFImageWriter;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.pdfbox.util.PDFTextStripperByArea;
public class BookReader extends lettura_Panel{
JFrame f_main;
JFrame f_options;
int dim_book;
Book []b;
public BookReader(JFrame f_main, JFrame f_options, Book[] b, int dim_book) {
super(f_main, f_options, b, dim_book);
}
@Override
public void readerEpub(Book[] b, int selectedRow) {
Desktop d = Desktop.getDesktop();
File f = new File(b[table.getSelectedRow()].Percorso);
try {
d.open(f);
} catch (IOException e1) {
JOptionPane.showMessageDialog(f_options, "Percorso inserito non corretto");
return;
}
}
@Override
public void readerHtml(Book[] b, int selectedRow) {
File file = new File(b[table.getSelectedRow()].Percorso);
JEditorPane jEditorPane = new JEditorPane();
jEditorPane.setEditable(false);
jEditorPane.setContentType("text/html");
try {
jEditorPane.setPage(file.toURI().toURL());
} catch (IOException ex) {
JOptionPane.showMessageDialog(f_options, "Percorso inserito non corretto");
}
JScrollPane scrollPane = new JScrollPane(jEditorPane);
JFrame j = new JFrame("HTML Reader");
j.getContentPane().add(scrollPane, BorderLayout.CENTER);
j.setSize(new Dimension(500,600));
j.setLocationRelativeTo(null);
j.setVisible(true);
}
@Override
public void readerPdf(Book[] b, int selectedRow) {
File PDF_Path = new File(b[table.getSelectedRow()].Percorso);
PDDocument inputPDF = null;
try {
inputPDF = PDDocument.load(PDF_Path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<PDPage> allPages = inputPDF.getDocumentCatalog().getAllPages();
PDPage testPage = (PDPage)allPages.get(0);
JFrame testFrame = new JFrame();
PDFPagePanel pdfPanel;
try {
pdfPanel = new PDFPagePanel();
pdfPanel.setPage(testPage);
testFrame.add(pdfPanel);
testFrame.setBounds(40, 40, pdfPanel.getWidth(), pdfPanel.getHeight());
testFrame.setVisible(true);
inputPDF.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Questa è la classe che chiama quei metodi Reader:
codice:
/**Classe astratta lettura_Panel per la lettura dei libri presenti in biblioteca
* Libri in formato pdf e html saranno visualizzati tramite
* Visualizzatori che usufruiscono di librerie esterne,
* Mentre libri in formato epub, saranno visualizzati tramite
* Programmi presente nel pc
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
public abstract class lettura_Panel extends JPanel{
private static final long serialVersionUID = 1L;
JFrame f_main;
JFrame f_options;
Image libro;
MyTableModel dataModel;
JTable table;
int dimBook;
Book []b;
public lettura_Panel(JFrame f_main,JFrame f_options,final Book[] b,int dimBook){
setLayout(null);
this.b = b;
this.dimBook = dimBook;
Toolkit t = Toolkit.getDefaultToolkit();
libro = t.getImage("libri.jpg");
MediaTracker track = new MediaTracker(this);
track.addImage(libro , 1);
try {
track.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
Vector v = new Vector();
for(int z=0;z<dimBook;z++){
v.add(b[z]);
}
dataModel = new MyTableModel(v);
table = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(table);
scrollpane.setPreferredSize(new Dimension(800,350));
scrollpane.setBounds(0,0,700,450);
add(scrollpane);
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()>1){
if("epub".equals(b[table.getSelectedRow()].formato)){
readerEpub(b,table.getSelectedRow());
}
if("html".equals(b[table.getSelectedRow()].formato)){
readerHtml(b,table.getSelectedRow());
}
if("pdf".equals(b[table.getSelectedRow()].formato)){
readerPdf(b,table.getSelectedRow());
}
}
}
});
}
public void paintComponent(Graphics g){
super.paintComponent(g);
setOpaque(false);
g.drawImage(libro, 0, 0, null);
}
public abstract void readerEpub(Book[] b, int selectedRow);
public abstract void readerHtml(Book[] b, int selectedRow);
public abstract void readerPdf(Book[] b, int selectedRow);
}