Hi,
digging through some things I implemented this tiny class to view some
of the images inside of a pdf file.
Best regards,
Carsten
package com.lowagie.tools;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import com.lowagie.text.pdf.*;
public class ViewXRefImages
extends JFrame {
JPanel jPanel1 = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JLabel jLabel1 = new JLabel();
int picturenumber = 1;
private void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout1);
jPanel1.setLayout(borderLayout2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setText("images");
jPanel2.setLayout(cardLayout1);
jPanel3.setLayout(borderLayout3);
jSpinner1.addChangeListener(new
ViewXRefImages_jSpinner1_propertyChangeAdapter(this));
jPanel2.setBorder(BorderFactory.createEtchedBorder());
this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel1.add(jPanel2, java.awt.BorderLayout.CENTER);
jPanel3.add(jSpinner1, java.awt.BorderLayout.CENTER);
jPanel3.add(jLabel1, java.awt.BorderLayout.NORTH);
jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);
}
public ViewXRefImages() throws HeadlessException {
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public ViewXRefImages(String filename) {
this();
PdfReader reader = null;
try {
reader = new PdfReader(filename);
for (int i = 0; i < reader.getXrefSize(); i++) {
PdfObject pdfobj = reader.getPdfObject(i);
if (pdfobj != null) {
System.out.println("[" + i + "] " + pdfobj.toString());
if (pdfobj.isStream()) {
PdfStream pdfdict = (PdfStream) pdfobj;
System.out.println("str:" +
pdfdict.getKeys());
System.out.println("filter:" +
pdfdict.get(PdfName.FILTER));
System.out.println("length:" +
pdfdict.get(PdfName.LENGTH));
PdfObject pdfsubtype = pdfdict.get(PdfName.SUBTYPE);
if (pdfsubtype == null) {
continue;
}
System.out.println("subtype:" +
pdfsubtype);
if (!pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
continue;
}
System.out.println("height:" +
pdfdict.get(PdfName.HEIGHT));
System.out.println("width:" +
pdfdict.get(PdfName.WIDTH));
System.out.println("bitspercomponent:" +
pdfdict.get(PdfName.BITSPERCOMPONENT));
byte[] barr = PdfReader.getStreamBytesRaw( (PRStream) pdfdict);
InputStream is = new ByteArrayInputStream(barr);
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
int aByte;
while ( (aByte = is.read()) >= 0) {
bout.write(aByte);
}
java.awt.Image im = Toolkit.getDefaultToolkit().createImage(barr);
javax.swing.ImageIcon ii = new javax.swing.ImageIcon(im);
JLabel jLabel1 = new JLabel();
jLabel1.setIcon(ii);
jPanel2.add(jLabel1, "" + picturenumber++);
}
catch (Exception ex1) {
}
}
}
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
JPanel jPanel2 = new JPanel();
BorderLayout borderLayout2 = new BorderLayout();
CardLayout cardLayout1 = new CardLayout();
JPanel jPanel3 = new JPanel();
JSpinner jSpinner1 = new JSpinner();
BorderLayout borderLayout3 = new BorderLayout();
SpinnerModel spinnerModel1 = jSpinner1.getModel();
public static void main(String[] args) {
ViewXRefImages frame = new ViewXRefImages(args[0]);
frame.pack();
com.lowagie.tools.Toolbox.centerFrame(frame);
frame.setVisible(true);
}
public void jSpinner1_propertyChange(ChangeEvent evt) {
int blatt = Integer.parseInt(jSpinner1.getNextValue().toString());
System.out.println("new:" + blatt);
this.cardLayout1.show(jPanel2, "" + blatt);
jPanel2.repaint();
}
}
class ViewXRefImages_jSpinner1_propertyChangeAdapter
implements javax.swing.event.ChangeListener {
private ViewXRefImages adaptee;
ViewXRefImages_jSpinner1_propertyChangeAdapter(ViewXRefImages adaptee) {
this.adaptee = adaptee;
}
public void stateChanged(ChangeEvent e) {
adaptee.jSpinner1_propertyChange(e);
}
}