package uk.co.mmscomputing.device.twain.pdfapplet;
import java.awt.Button;
import java.awt.GridLayout;
import java.applet.Applet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.*;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.IIOImage;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import uk.co.mmscomputing.device.scanner.Scanner;
import uk.co.mmscomputing.device.scanner.ScannerDevice;
import uk.co.mmscomputing.device.scanner.ScannerListener;
import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;
import uk.co.mmscomputing.device.scanner.ScannerIOException;
//import javax.imageio.ImageWriteParam;
//import uk.co.mmscomputing.imageio.pdf.*;
/*
You need to add the
META-INF/services/javax.imageio.spi.ImageWriterSpi
and more or less all of
uk/co/mmscomputing/io/
uk/co/mmscomputing/imageio/
to applet jar
*/
public class TwainPdfAppletExample extends Applet implements ActionListener, ScannerListener{
static TwainPdfAppletExample app;
Scanner scanner;
Button acquireButton,selectButton;
File dir;
// ImageWriter writer;
// boolean writeImage=false;
public TwainPdfAppletExample(){}
public void init(){
setLayout(new GridLayout(0,2));
selectButton = new Button("select");
add(selectButton);
selectButton.addActionListener(this);
acquireButton = new Button("acquire");
add(acquireButton);
acquireButton.addActionListener(this);
scanner=Scanner.getDevice();
scanner.addListener(this);
// writer = (ImageWriter)ImageIO.getImageWritersByFormatName("pdf").next();
// System.out.println(writer.getClass().getName());
// should be: uk.co.mmscomputing.imageio.pdf.PDFImageWriter
}
public void actionPerformed(ActionEvent evt){
try{
if(evt.getSource()==acquireButton){
try{
File home = new File(System.getProperty("user.home"));
dir = new File(home,"My Documents");
if(!dir.exists()){ dir = home;}
File file = new File(dir,"testIO.pdf");file.delete();
System.out.println(file.getCanonicalPath());
// ImageOutputStream ios = ImageIO.createImageOutputStream(file);
// writer.setOutput(ios);
// writer.prepareWriteSequence(null);
// writeImage=true;
}catch(Exception e){
// writeImage=false;
e.printStackTrace();
}
scanner.acquire();
}else if(evt.getSource()==selectButton){
scanner.select();
}
}catch(ScannerIOException se){
se.printStackTrace();
}
}
public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){
try{
if(type.equals(ScannerIOMetadata.ACQUIRED)){
BufferedImage image=metadata.getImage();
System.out.println("Have an image now!");
File file = new File(dir,"testIO.pdf");file.delete();
ImageIO.write(image, "pdf", file);
// if(writeImage){
// writer.writeToSequence(new IIOImage(image,null,null),null);
// }
}else if(type.equals(ScannerIOMetadata.STATECHANGE)){
System.out.println(metadata.getStateStr());
if(metadata.isFinished()){ // You will get here only if you close source properly!
// writer.endWriteSequence();
// ((ImageOutputStream)writer.getOutput()).close(); // Don't forget this!
}
}else if(type.equals(ScannerIOMetadata.EXCEPTION)){
metadata.getException().printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}
}
public void main(String title, String[] argv){
JFrame frame=new JFrame(title);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(this);
frame.setSize(500,200);
frame.setLocationRelativeTo(null);
init();
frame.setVisible(true);
// ImageIO.scanForPlugins();
start();
}
public static void main(String[] argv){
try{
TwainPdfAppletExample app=new TwainPdfAppletExample();
app.main(TwainPdfAppletExample.class.getName(), argv);
}catch(Exception e){
e.printStackTrace();
}
}
}