/**
* Copyright (C) 2008-2010, Squale Project - http://www.squale.org
*
* This file is part of Squale.
*
* Squale is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or any later version.
*
* Squale is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Squale. If not, see <http://www.gnu.org/licenses/>.
*/
package org.squale.welcom.outils.pdf.advanced;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PRAcroForm;
import com.lowagie.text.pdf.PdfFormField;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfNumber;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfString;
/*
* Cr�� le 3 nov. 04
*
* Pour changer le mod�le de ce fichier g�n�r�, allez � :
* Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires
*/
/**
* @author M327837 Pour changer le mod�le de ce commentaire de type g�n�r�, allez � :
* Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires
*/
public class WPdfFieldReader
{
/** le reader */
private PdfReader pdfReader;
/** les champs */
private final WPdfFields fields = new WPdfFields();
/** le pdfDecoration */
private WPdfDecoration decoration = null;
/**
* Constructeur
*
* @param pPdfReader le reader
*/
public WPdfFieldReader( final PdfReader pPdfReader )
{
super();
pdfReader = pPdfReader;
// Si des champs saont present on les lits
if ( pdfReader.getAcroForm() != null )
{
init();
}
}
/**
* init
*/
public void init()
{
for ( int i = 0; i < pdfReader.getAcroForm().size(); i++ )
{
final PRAcroForm.FieldInformation p =
(PRAcroForm.FieldInformation) pdfReader.getAcroForm().getFields().get( i );
final WPdfField pf = new WPdfField();
pf.setName( p.getName() );
// Si ce n'est pas un champs text alors on l'ignore
if ( !p.getInfo().contains( PdfName.FT )
|| !( ( (PdfName) p.getInfo().get( PdfName.FT ) ).toString().equals( PdfName.TX.toString() ) ) )
{
pf.setType( WPdfFieldType.INCONNU );
}
else
{
if ( p.getInfo().contains( PdfName.DV ) )
{
pf.setDefaultValue( ( (PdfString) ( p.getInfo().get( PdfName.DV ) ) ).toUnicodeString() );
}
if ( p.getInfo().contains( PdfName.V ) )
{
pf.setValue( ( (PdfString) ( p.getInfo().get( PdfName.V ) ) ).toUnicodeString() );
}
if ( p.getInfo().contains( PdfName.FF ) )
{
final PdfNumber pn = (PdfNumber) p.getInfo().get( PdfName.FF );
if ( ( pn.intValue() & PdfFormField.FF_MULTILINE ) == PdfFormField.FF_MULTILINE )
{
pf.setType( WPdfFieldType.MUTILINETEXT );
}
else
{
pf.setType( WPdfFieldType.TEXT );
}
}
else
{
pf.setType( WPdfFieldType.TEXT );
}
}
fields.add( pf );
}
}
/**
* @return fields
*/
public WPdfFields getPdfFields()
{
return fields;
}
/**
* @param out l'outputstream
* @throws IOException exception pouvant etre levee
* @throws DocumentException exception pouvant etre levee
*/
public void fill( final OutputStream out )
throws IOException, DocumentException
{
final WPdfFieldWriter pw = new WPdfFieldWriter( pdfReader, out, fields );
pw.fill();
pw.close();
}
/**
* fill
*
* @return un pdfReader
* @throws IOException exception pouvant etre levee
* @throws DocumentException exception pouvant etre levee
*/
public PdfReader fill()
throws IOException, DocumentException
{
final ByteArrayOutputStream out = new ByteArrayOutputStream();
fill( out );
return new PdfReader( out.toByteArray() );
}
/**
* @return decoration
*/
public WPdfDecoration getDecoration()
{
return decoration;
}
/**
* @param pDecoration decoration
*/
public void setDecoration( final WPdfDecoration pDecoration )
{
decoration = pDecoration;
}
}