forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
6.9 KiB
201 lines
6.9 KiB
/*
|
|
* EtiquetaPrinter.java
|
|
*
|
|
* Created on 27 de Fevereiro de 2006, 14:41
|
|
*
|
|
* To change this template, choose Tools | Template Manager
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
package siprp.clientes;
|
|
|
|
import java.io.*;
|
|
import java.text.*;
|
|
import java.util.*;
|
|
|
|
import com.evolute.utils.fop.*;
|
|
import com.evolute.utils.ui.*;
|
|
import com.evolute.utils.xml.*;
|
|
|
|
import siprp.data.*;
|
|
|
|
/**
|
|
*
|
|
* @author Frederico
|
|
*/
|
|
public class EtiquetaPrinter
|
|
{
|
|
protected static final DecimalFormat N_F = new DecimalFormat();
|
|
|
|
static
|
|
{
|
|
DecimalFormatSymbols dfs = new DecimalFormatSymbols( new Locale( "pt", "PT" ) );
|
|
dfs.setDecimalSeparator( '.' );
|
|
N_F.setDecimalFormatSymbols( dfs );
|
|
N_F.setMaximumFractionDigits( 4 );
|
|
N_F.setMinimumFractionDigits( 0 );
|
|
}
|
|
|
|
protected Double altura;
|
|
protected Double largura;
|
|
protected Double margemEsquerda;
|
|
protected Double margemCima;
|
|
protected Integer colunas;
|
|
protected Integer linhas;
|
|
protected boolean continua;
|
|
protected Double alturaFolha;
|
|
protected Double larguraFolha;
|
|
protected Double margemVerticalFolha;
|
|
protected Double margemHorizontalFolha;
|
|
|
|
/** Creates a new instance of EtiquetaPrinter */
|
|
public EtiquetaPrinter( EtiquetaData etiqueta )
|
|
{
|
|
altura = ( Double ) etiqueta.get( EtiquetaData.ALTURA );
|
|
largura = ( Double ) etiqueta.get( EtiquetaData.LARGURA );
|
|
margemEsquerda = ( Double ) etiqueta.get( EtiquetaData.MARGEM_ESQUERDA );
|
|
margemCima = ( Double ) etiqueta.get( EtiquetaData.MARGEM_CIMA );
|
|
colunas = ( Integer ) etiqueta.get( EtiquetaData.COLUNAS );
|
|
linhas = ( Integer ) etiqueta.get( EtiquetaData.LINHAS );
|
|
continua = "y".equals( etiqueta.get( EtiquetaData.CONTINUA ) );
|
|
alturaFolha = ( Double ) etiqueta.get( EtiquetaData.ALTURA_FOLHA );
|
|
larguraFolha = ( Double ) etiqueta.get( EtiquetaData.LARGURA_FOLHA );
|
|
margemVerticalFolha = ( Double ) etiqueta.get( EtiquetaData.MARGEM_VERTICAL_FOLHA );
|
|
margemHorizontalFolha = ( Double ) etiqueta.get( EtiquetaData.MARGEM_HORIZONTAL_FOLHA );
|
|
}
|
|
|
|
public void print( Vector<Object[]> data )
|
|
{
|
|
int pos[] = new EtiquetaChooserDialog( null, linhas.intValue(), colunas.intValue() ).choose();
|
|
if( pos == null )
|
|
{
|
|
return;
|
|
}
|
|
int row = pos[ 0 ];
|
|
int col = pos[ 1 ];
|
|
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
|
|
SimpleXMLElement styleSheet =
|
|
new SimpleXMLElement( "xsl:stylesheet" );
|
|
styleSheet.addAttribute( "version", "1.1" );
|
|
styleSheet.addAttribute( "xmlns:xsl", "http://www.w3.org/1999/XSL/Transform" );
|
|
styleSheet.addAttribute( "xmlns:fo", "http://www.w3.org/1999/XSL/Format" );
|
|
styleSheet.addAttribute( "exclude-result-prefixes", "fo" );
|
|
styleSheet.setCompact( false );
|
|
|
|
SimpleXMLElement output =
|
|
new SimpleXMLElement( "xsl:output" );
|
|
styleSheet.addElement( output );
|
|
output.addAttribute( "method", "xml" );
|
|
output.addAttribute( "version", "1.0" );
|
|
output.addAttribute( "omit-xml-declaration", "no" );
|
|
output.addAttribute( "indent", "yes" );
|
|
|
|
SimpleXMLElement template =
|
|
new SimpleXMLElement( "xsl:template" );
|
|
styleSheet.addElement( template );
|
|
template.addAttribute( "match", "ETIQUETA" );
|
|
|
|
SimpleXMLElement root =
|
|
new SimpleXMLElement( "fo:root" );
|
|
template.addElement( root );
|
|
|
|
SimpleXMLElement layoutMasterSet =
|
|
new SimpleXMLElement( "fo:layout-master-set" );
|
|
root.addElement( layoutMasterSet );
|
|
|
|
SimpleXMLElement simplePageMaster =
|
|
new SimpleXMLElement( "fo:simple-page-master" );
|
|
layoutMasterSet.addElement( simplePageMaster );
|
|
simplePageMaster.addAttribute( "master-name", "simpleA4" );
|
|
simplePageMaster.addAttribute( "page-height", N_F.format( alturaFolha ) + "cm" );
|
|
simplePageMaster.addAttribute( "page-width", N_F.format( larguraFolha ) + "cm" );
|
|
simplePageMaster.addAttribute( "margin-top", N_F.format( ( row == 0 ? margemVerticalFolha : 0.0 ) + row * ( altura + margemCima ) ) + "cm" );
|
|
simplePageMaster.addAttribute( "margin-bottom", "0.5cm" );
|
|
simplePageMaster.addAttribute( "margin-left", N_F.format( ( col == 0 ? margemHorizontalFolha : 0.0 ) + col * ( largura + margemEsquerda ) ) + "cm" );
|
|
simplePageMaster.addAttribute( "margin-right", N_F.format( col == colunas - 1 ? margemHorizontalFolha : 0.0 ) );
|
|
|
|
SimpleXMLElement regionBody =
|
|
new SimpleXMLElement( "fo:region-body" );
|
|
simplePageMaster.addElement( regionBody );
|
|
|
|
SimpleXMLElement pageSequence =
|
|
new SimpleXMLElement( "fo:page-sequence" );
|
|
root.addElement( pageSequence );
|
|
pageSequence.addAttribute( "master-reference", "simpleA4" );
|
|
|
|
SimpleXMLElement flow =
|
|
new SimpleXMLElement( "fo:flow" );
|
|
pageSequence.addElement( flow );
|
|
flow.addAttribute( "flow-name", "xsl-region-body" );
|
|
|
|
for( Object line[] : data )
|
|
{
|
|
SimpleXMLElement lineXML = createLine( line, largura - ( col == 0 || col == colunas - 1 ? margemHorizontalFolha : 0.0 ) );
|
|
flow.addElement( lineXML );
|
|
}
|
|
//System.out.println( "XSL: " + styleSheet.toString() );
|
|
String xml = "<ETIQUETA></ETIQUETA>";
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
FOPCreator creator = new FOPCreator();
|
|
InputStream xmlIn = new ByteArrayInputStream( xml.getBytes() );
|
|
try
|
|
{
|
|
creator.createFOfromXML( xmlIn, new ByteArrayInputStream( (header+styleSheet).getBytes() ), out );
|
|
ByteArrayInputStream in = new ByteArrayInputStream( out.toString().getBytes() );
|
|
Hashtable printOptions = new Hashtable();
|
|
//System.out.println( "OUT: " + out.toString() );
|
|
com.evolute.utils.fop.FOPPrinter printer = new com.evolute.utils.fop.FOPPrinter();
|
|
printer.printFO( in, false, true, printOptions );
|
|
}
|
|
catch( Exception ex )
|
|
{
|
|
DialogException.showExceptionMessage( ex, "Erro a imprimir", true );
|
|
}
|
|
}
|
|
|
|
protected SimpleXMLElement createLine( Object[] line, Double larguraDisponival )
|
|
{
|
|
SimpleXMLElement table =
|
|
new SimpleXMLElement( "fo:table" );
|
|
table.addAttribute( "table-layout", "fixed" );
|
|
table.addAttribute( "width", N_F.format( larguraDisponival ) + "cm" );
|
|
table.addAttribute( "space-before.optimum", "0pt" );
|
|
table.addAttribute( "space-after.optimum", "0pt" );
|
|
|
|
for( int n = 1; n < line.length; n += 2 )
|
|
{
|
|
SimpleXMLElement tableColumn =
|
|
new SimpleXMLElement( "fo:table-column" );
|
|
table.addElement( tableColumn );
|
|
tableColumn.addAttribute( "column-width", N_F.format( ( ( Double ) line[ n ] ) * larguraDisponival ) + "cm" );
|
|
}
|
|
|
|
SimpleXMLElement tableBody =
|
|
new SimpleXMLElement( "fo:table-body" );
|
|
table.addElement( tableBody );
|
|
|
|
SimpleXMLElement tableRow =
|
|
new SimpleXMLElement( "fo:table-row" );
|
|
tableBody.addElement( tableRow );
|
|
|
|
for( int n = 0; n < line.length; n += 2 )
|
|
{
|
|
SimpleXMLElement tableCell =
|
|
new SimpleXMLElement( "fo:table-cell" );
|
|
tableRow.addElement( tableCell );
|
|
|
|
SimpleXMLElement block =
|
|
new SimpleXMLElement( "fo:block" );
|
|
tableCell.addElement( block );
|
|
block.addAttribute( "font-size", "10pt" );
|
|
block.addAttribute( "text-align", "left" );
|
|
// block.addAttribute( "wrap-option", "no-wrap" );
|
|
// block.addAttribute( "overflow", "scroll" );
|
|
|
|
block.addTextElement( ( String ) line[ n ] );
|
|
}
|
|
|
|
return table;
|
|
}
|
|
}
|