// RFax
// Copyright (C)
//
// java4less@confluencia.net
// All rights reserved
//
// Adquisition , use and distribution of this code is subject to restriction:
// - You may modify the source code in order to adapt it to your needs.
// - Redistribution ofret this ( or a modified version) source code is prohibited. You may only redistribute compiled versions.
// - You may redistribute the compiled version as part of your application, not a new java component with the same purpose as this one.
// - You may not remove this notice from the source code
// - This notice disclaim all warranties of all material
//
package com.java4less.rfax;
import com.adobe.acrobat.PDFDocument;
import com.adobe.acrobat.*;
import com.adobe.acrobat.gui.*;
import com.adobe.acrobat.util.*;
import com.adobe.acrobat.sidecar.*;
import java.awt.Image;
import javax.swing.JPanel;
import java.awt.Graphics;
/**
* creates a fax using PDF as data source. The class uses the PDF JavaBean from Acrobat, please download it from: http://www.adobe.com/products/acrviewer/main.html
*
*
Example code for faxing:
*
*
try {
*
AcrobatFaxProducer pdf=new AcrobatFaxProducer();
*
pdf.setPDFFile("c:\\report.pdf");
*
FaxModem fm= new FaxModem();
*
pdf.pageImage=new java.awt.image.BufferedImage(800,1290,java.awt.image.BufferedImage.TYPE_INT_RGB);
*
*
FaxModem m=new FaxModem();
*
m.setPortName("COM1");
*
m.flowControl=m.FLOWCONTROL_XONXOFF;
*
m.faxClass=1;
*
m.AtFBOR=true;
*
m.open(p);
*
if (m.sendFax("11111111")) System.out.println("Success ***");
*
else System.out.println("FAILED");
*
m.close();
*
}
*
catch ( Exception e ) { e.printStackTrace();}
*
*
*
*
*/
public class AcrobatFaxProducer implements FaxProducer {
/**
* loaded PDFDocument
*/
protected PDFDocument pdfDocument;
/**
* PDF File
*/
private String pdfFile=null;
/**
* image
*/
public java.awt.Image pageImage=null;
int pageCount=0;
/**
* this is a dummy component required by acrobat reader
*/
private static java.awt.Frame dummyFrame=new java.awt.Frame();
public Image getFaxPage(int page) {
// no file set
if (pdfDocument==null) return null;
// no more pages
if (page>=pageCount) return null;
return createImage(page+1); // first page is 1, not 0
}
/**
* set PDF File, initialize everything
*/
public void setPDFFile(String file) throws Exception {
pdfDocument=new PDFDocument(new java.io.File(file));
pageCount =pdfDocument.getNumPages();
}
/**
* create page Image
*/
private Image createImage(int page) {
try {
dummyFrame.setVisible(true);
/* double a = 1;
double d = 1;
double b =0;
double c =0;
double x =0;
double y = 0;
pdfDocument.drawPage(page,dummyFrame.createImage(1000,1000),new com.adobe.acrobat.sidecar.AffineTransform(1,0,0,1,0,0),null,dummyFrame);
dummyFrame.setVisible(f);
*/
FloatPoint cropBoxSize = pdfDocument.getPageSize(page-1);
// Compute the appropriate current scale
int width = pageImage.getWidth(null);
int height =pageImage.getHeight(null);
float hScale = (float)((width ) / cropBoxSize.x);
float vScale = (float)((height) / cropBoxSize.y);
float scale = (float)Math.min(hScale, vScale);
// Compute the transform -- this is just the identity matrix scaled
// by the computed scale.
AffineTransform transform = new AffineTransform(scale, 0, 0, scale, 0, 0);
// Create the Image object and draw into it
int w = (int)(cropBoxSize.x * scale);
int h = (int)(cropBoxSize.y * scale);
Image osImage = dummyFrame.createImage(w, h);
System.out.println("before page "+(page-1));
pdfDocument.drawPage(page-1, osImage, transform, null, dummyFrame);
dummyFrame.setVisible(false);
Graphics g=pageImage.getGraphics();
g.setColor(java.awt.Color.white);
g.fillRect(0,0,width,height);
g.drawImage(osImage,0,0,null);
System.out.println("page "+(page-1));
/*
java.awt.image.BufferedImage image = new java.awt.image.BufferedImage( width,height,java.awt.image.BufferedImage.TYPE_INT_RGB );
java.awt.Graphics imgGraphics = image.createGraphics();
imgGraphics.drawImage(osImage,0,0,null);
// open file
java.io.File f=new java.io.File("c:\\j4l\\fax\\a.jpg");
f.delete();
java.io.FileOutputStream of=new java.io.FileOutputStream(f);
// encode buffered image to a jpeg
com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(of );
encoder.encode( image );
of.close();
*/
//pageImage=dummyFrame.createImage((int) cropBoxSize.x,(int) cropBoxSize.y);
//pdfDocument.drawPage(page,pageImage,new com.adobe.acrobat.sidecar.AffineTransform(1,0,0,1,0,0),null,dummyFrame);
} catch (Exception pdfe) {
pdfe.printStackTrace(System.err);
}
return pageImage;
}
}