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