forked from Coded/SIPRP
git-svn-id: https://svn.coded.pt/svn/SIPRP@1000 bb69d46d-e84e-40c8-a05a-06db0d633741
parent
0f7443cac1
commit
1885d78608
@ -1,190 +0,0 @@
|
||||
/*
|
||||
* PDFCreator.java
|
||||
*
|
||||
* Created on 19 de Abril de 2006, 18:20
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package siprp.fop;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.sax.SAXResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.apache.avalon.framework.logger.ConsoleLogger;
|
||||
import org.apache.fop.apps.Driver;
|
||||
import org.apache.fop.apps.Options;
|
||||
import org.apache.fop.viewer.SecureResourceBundle;
|
||||
import org.apache.fop.viewer.Translator;
|
||||
|
||||
import com.evolute.utils.fop.FOPCreator;
|
||||
|
||||
/**
|
||||
* PDFCreator creates PDF's using FO.
|
||||
*
|
||||
* @author Frederico Palma
|
||||
* @version %I%, %G%
|
||||
*/
|
||||
public class PDFCreator
|
||||
{
|
||||
private final Translator translator = new SecureResourceBundle( null );
|
||||
|
||||
private static final Object LOCK = new Object();
|
||||
|
||||
private static PDFCreator pdfCreator;
|
||||
|
||||
private static String userConfig;
|
||||
|
||||
public static PDFCreator getPDFCreator()
|
||||
{
|
||||
synchronized( LOCK )
|
||||
{
|
||||
if( pdfCreator == null )
|
||||
{
|
||||
pdfCreator = new PDFCreator();
|
||||
}
|
||||
}
|
||||
return pdfCreator;
|
||||
}
|
||||
|
||||
public static void setUserConfig(String string)
|
||||
{
|
||||
PDFCreator.userConfig = string;
|
||||
}
|
||||
|
||||
public static void main( String arg[] )
|
||||
throws Exception
|
||||
{
|
||||
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
final FOPCreator creator = FOPCreator.getFOPCreator();
|
||||
System.out.println( "Creating FO" );
|
||||
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.setDialogTitle( "Select XML data file:" );
|
||||
int returnVal = chooser.showOpenDialog( null );
|
||||
String dataFile = null;
|
||||
if( returnVal == JFileChooser.APPROVE_OPTION )
|
||||
{
|
||||
dataFile = chooser.getSelectedFile().getAbsolutePath();
|
||||
}
|
||||
chooser.setDialogTitle( "Select XSL-FO template file:" );
|
||||
returnVal = chooser.showOpenDialog( null );
|
||||
String templateFile = null;
|
||||
if( returnVal == JFileChooser.APPROVE_OPTION )
|
||||
{
|
||||
templateFile = chooser.getSelectedFile().getAbsolutePath();
|
||||
System.out.println( chooser.getSelectedFile().getAbsolutePath() );
|
||||
}
|
||||
|
||||
final String DATA = dataFile;
|
||||
final String TEMPLATE = templateFile;
|
||||
creator.createFOfromXML( new FileInputStream( DATA ),
|
||||
new FileInputStream( TEMPLATE ), baos );
|
||||
// Thread t = new Thread() {
|
||||
// public void run()
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// creator.createFOfromXML( new FileInputStream( DATA ),
|
||||
// new FileInputStream( TEMPLATE ), baos );
|
||||
// System.out.println( "FO created" );
|
||||
// }
|
||||
// catch( Exception ex )
|
||||
// {
|
||||
// ex.printStackTrace();
|
||||
// }
|
||||
// } };
|
||||
// t.start();
|
||||
// Thread.currentThread().sleep( 2 );
|
||||
System.out.println( "Starting to print" );
|
||||
// options.put( FOP_DUPLEX_TYPE, javax.print.attribute.standard.Sides.TUMBLE );
|
||||
byte pdf[] = PDFCreator.getPDFCreator().createPdfFromFo( baos.toByteArray() );
|
||||
// new FOPPrinter().printFO( new FileInputStream( "c:\\simplecol.fo" ), true, false );
|
||||
File pdfFile = new File( "/home/fpalma/acss/teste.pdf" );
|
||||
File foFile = new File( "/home/fpalma/Desktop/teste.fo" );
|
||||
pdfFile.createNewFile();
|
||||
foFile.createNewFile();
|
||||
FileOutputStream fos = new FileOutputStream( pdfFile );
|
||||
FileOutputStream fofos = new FileOutputStream( foFile );
|
||||
fos.write( pdf );
|
||||
fofos.write( baos.toByteArray() );
|
||||
fos.close();
|
||||
fofos.close();
|
||||
System.out.println( "DONE" );
|
||||
}
|
||||
|
||||
/** Creates a new instance of PDFCreator */
|
||||
private PDFCreator()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates PDF content as an array of bytes, given FO content as an array of bytes.
|
||||
*
|
||||
* @param fo the byte[] with the FO content to convert
|
||||
* @return the PDF content
|
||||
* @throws Exception if the conversion fails
|
||||
*
|
||||
*/
|
||||
public byte[]createPdfFromFo( byte []fo )
|
||||
throws Exception
|
||||
{
|
||||
|
||||
InputStream inputStreamConf = ClassLoader.getSystemClassLoader().getResourceAsStream("siprp/fop/fop.xml");
|
||||
InputStream inputStreamDTD = ClassLoader.getSystemClassLoader().getResourceAsStream("siprp/fop/config.dtd");
|
||||
|
||||
/*************************/
|
||||
|
||||
File f = File.createTempFile("fop", "conf");
|
||||
f.deleteOnExit();
|
||||
writeFile(inputStreamConf, f);
|
||||
|
||||
System.out.println(f.getParentFile());
|
||||
|
||||
/*************************/
|
||||
File dtd = new File(f.getParentFile(), "config.dtd");
|
||||
writeFile(inputStreamDTD, dtd);
|
||||
|
||||
new Options(f);
|
||||
|
||||
ByteArrayOutputStream pdf = new ByteArrayOutputStream();
|
||||
TransformerFactory factory = TransformerFactory.newInstance();
|
||||
Transformer transformer = factory.newTransformer();
|
||||
Source src = new StreamSource( new ByteArrayInputStream( fo ) );
|
||||
Driver driver = new Driver();
|
||||
driver.setLogger( new ConsoleLogger( ConsoleLogger.LEVEL_INFO ) );
|
||||
driver.setRenderer( Driver.RENDER_PDF );
|
||||
driver.setOutputStream( pdf );
|
||||
Result res = new SAXResult( driver.getContentHandler() );
|
||||
transformer.transform( src, res );
|
||||
return pdf.toByteArray();
|
||||
|
||||
}
|
||||
|
||||
private void writeFile(InputStream inputStreamConf, File f)
|
||||
throws FileNotFoundException, IOException {
|
||||
OutputStream out = new FileOutputStream(f);
|
||||
byte buf[] = new byte[1024];
|
||||
int len;
|
||||
while ((len = inputStreamConf.read(buf)) > 0)
|
||||
out.write(buf, 0, len);
|
||||
out.close();
|
||||
inputStreamConf.close();
|
||||
}
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
<!ELEMENT configuration (entry*, fonts?)>
|
||||
<!ELEMENT entry (key,(value | list))>
|
||||
<!ATTLIST entry
|
||||
role CDATA #IMPLIED
|
||||
>
|
||||
<!ELEMENT key (#PCDATA)>
|
||||
<!ELEMENT value (#PCDATA)>
|
||||
<!ELEMENT list (value+ | subentry+)>
|
||||
<!ELEMENT subentry (key,value+)>
|
||||
<!ELEMENT fonts (font*)>
|
||||
<!ELEMENT font (font-triplet+)>
|
||||
<!ATTLIST font
|
||||
metrics-file CDATA #REQUIRED
|
||||
kerning CDATA #IMPLIED
|
||||
embed-file CDATA #REQUIRED
|
||||
>
|
||||
<!ELEMENT font-triplet EMPTY>
|
||||
<!ATTLIST font-triplet
|
||||
name CDATA #REQUIRED
|
||||
style CDATA #REQUIRED
|
||||
weight CDATA #REQUIRED
|
||||
>
|
||||
@ -1,89 +0,0 @@
|
||||
<!DOCTYPE configuration SYSTEM "config.dtd">
|
||||
<!--
|
||||
this file contains templates which allow an user easy
|
||||
configuration of Fop. Actually normally you don't need this configuration
|
||||
file, but if you need to change configuration, you should
|
||||
always use this file and *not* config.xml.
|
||||
Usage: java org.apache.fop.apps.Fop -c userconfig.xml -fo fo-file -pdf pdf-file
|
||||
-->
|
||||
|
||||
|
||||
<configuration>
|
||||
|
||||
<!-- NOT IMPLEMENTED
|
||||
basedir: normally the base directory is the directory where the fo file is
|
||||
located. if you want to specify your own, uncomment this entry
|
||||
-->
|
||||
<!--
|
||||
<entry>
|
||||
<key>baseDir</key>
|
||||
<value></value>
|
||||
</entry>
|
||||
-->
|
||||
|
||||
<!--
|
||||
************************************************************************
|
||||
HYPHENATION
|
||||
************************************************************************
|
||||
-->
|
||||
|
||||
<!--
|
||||
hyphenation directory
|
||||
if you want to specify your own directory with hyphenation pattern
|
||||
then uncomment the next entry and add the directory name
|
||||
-->
|
||||
|
||||
<!--
|
||||
<entry>
|
||||
<key>hyphenation-dir</key>
|
||||
<value>/java/xml-fop/hyph</value>
|
||||
</entry>
|
||||
-->
|
||||
|
||||
<!--
|
||||
************************************************************************
|
||||
Add fonts here
|
||||
************************************************************************
|
||||
-->
|
||||
|
||||
<fonts>
|
||||
<!-- example -->
|
||||
<!--
|
||||
<font metrics-file="arial.xml" kerning="yes" embed-file="arial.ttf">
|
||||
<font-triplet name="Arial" style="normal" weight="normal"/>
|
||||
<font-triplet name="ArialMT" style="normal" weight="normal"/>
|
||||
</font>
|
||||
<font metrics-file="arialb.xml" kerning="yes" embed-file="arialb.ttf">
|
||||
<font-triplet name="Arial" style="normal" weight="bold"/>
|
||||
<font-triplet name="ArialMT" style="normal" weight="bold"/>
|
||||
</font>
|
||||
<font metrics-file="ariali.xml" kerning="yes" embed-file="ariali.ttf">
|
||||
<font-triplet name="Arial" style="italic" weight="normal"/>
|
||||
<font-triplet name="ArialMT" style="italic" weight="normal"/>
|
||||
</font>
|
||||
<font metrics-file="arialbi.xml" kerning="yes" embed-file="arialbi.ttf">
|
||||
<font-triplet name="Arial" style="italic" weight="bold"/>
|
||||
<font-triplet name="ArialMT" style="italic" weight="bold"/>
|
||||
</font>
|
||||
-->
|
||||
<!-- Example Japanese fonts
|
||||
<font metrics-file="msgothic.xml" embed-file="D:\winnt\font\msgothic.ttc" kerning="yes">
|
||||
<font-triplet name="Gothic" style="normal" weight="normal"/>
|
||||
<font-triplet name="Gothic" style="normal" weight="bold"/>
|
||||
<font-triplet name="Gothic" style="italic" weight="normal"/>
|
||||
<font-triplet name="Gothic" style="italic" weight="bold"/>
|
||||
</font>
|
||||
<font metrics-file="msmincho.xml" embed-file="Cyberbit.ttf" kerning="yes">
|
||||
<font-triplet name="Mincho" style="normal" weight="normal"/>
|
||||
<font-triplet name="Mincho" style="normal" weight="bold"/>
|
||||
<font-triplet name="Mincho" style="italic" weight="normal"/>
|
||||
<font-triplet name="Mincho" style="italic" weight="bold"/>
|
||||
</font>
|
||||
-->
|
||||
</fonts>
|
||||
|
||||
|
||||
</configuration>
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in new issue