javaflex 20 de set. de 2018
Como voce nao postou o código, não dá pra saber o que fez. No geral segue esse exemplo: https://developers.itextpdf.com/examples/page-events/page-events-headers-and-footers
Rafael_Guzzo 20 de set. de 2018
private ByteArrayOutputStream criarStampas ( PdfReader reader , String textoAss , Rectangle rectangle , String metodo )
throws DocumentException , IOException , DocumentException {
ByteArrayOutputStream out = new ByteArrayOutputStream ();
reader = new PdfReader ( this . file );
Integer pageCount = Integer . valueOf ( reader . getNumberOfPages ());
PdfStamper stp1 = new PdfStamper ( reader , out , ‘\ 003 ’ , true );
if ( metodo . equals ( "planoDeEnsino" )) {
PdfContentByte pcb = stp1 . getOverContent ( 1 );
textoAss = "\n\n" + textoAss ;
for ( int i = 1 ; i < pageCount . intValue (); i ++ ) {
PdfAnnotation stp = PdfAnnotation . createFreeText ( stp1 . getWriter (), rectangle , textoAss , pcb );
stp . setBorderStyle ( new PdfBorderDictionary ( 0 , PdfBorderDictionary . STYLE_SOLID ));
stp . put ( PdfName . DS , new PdfString ( "font: Times Roman 10.0pt; font-stretch: Normal; text-alig: left; line-height: 9.2;" ));
stp1 . addAnnotation ( stp , i );
System . out . println ( " criar estampa " + i );
}
stp1 . close ();
out . close ();
} else {
Integer lowerX = Integer . valueOf ( 0 );
Integer upperX = Integer . valueOf ( 50 );
AcroFields af = reader . getAcroFields ();
if ( af != null ) {
ArrayList < String > names = af . getSignatureNames ();
if (( names != null ) && ( ! names . isEmpty ())) {
Integer index = upperX ;
upperX = Integer . valueOf ( upperX . intValue () * names . size ());
lowerX = Integer . valueOf ( lowerX . intValue () + upperX . intValue ());
upperX = Integer . valueOf ( upperX . intValue () + index . intValue ());
}
}
PdfFormField sig = PdfFormField . createSignature ( stp1 . getWriter ());
sig . setWidget ( new Rectangle ( lowerX . intValue (), 0.0F , upperX . intValue (), 25.0F ), null );
sig . setFlags ( 4 );
sig . put ( PdfName . DA , new PdfString ( "/Helv 0 Tf 0 g" ));
sig . setFieldName ( this . name );
sig . setPage ( 1 );
for ( int i = 1 ; i <= pageCount . intValue (); i ++ ) {
stp1 . addAnnotation ( sig , i );
}
stp1 . close ();
out . close ();
}
return out ;
}
onde eu crio as anotações.
javaflex 20 de set. de 2018
Segue o exemplo que te passei.
Rafael_Guzzo 20 de set. de 2018
Consegui resolver com o código abaixo:
filename = filename + "_signed.pdf" ;
File fileToWrite = File . createTempFile ( filename , null );
reader = new PdfReader ( this . file );
fow = new FileOutputStream ( fileToWrite );
stamper = PdfStamper . createSignature ( reader , fow , '\ 000 ' );
Font fontcabecatable = new Font ( Font . FontFamily . TIMES_ROMAN , 10 , Font . NORMAL );
PdfSignatureAppearance appearance = stamper . getSignatureAppearance ();
appearance . setLayer2Font ( fontcabecatable );
appearance . setLayer2Text ( textoAss );
appearance . setSignDate ( Calendar . getInstance ());
Integer pageCount = Integer . valueOf ( reader . getNumberOfPages ());
System . out . println ( "pageCount " + pageCount );
if ( position . equals ( "planoDeEnsino" ) ) {
textoAss = "\n" + textoAss ;
for ( int i = 2 ; i <= pageCount ; i ++ ) {
PdfContentByte pcb = stamper . getUnderContent ( i );
Paragraph p = new Paragraph ( textoAss );
p . setFont ( fontcabecatable );
p . setLeading (( float ) 10 );
ColumnText ct = new ColumnText ( pcb );
ct . setSimpleColumn ( positionSignature ( position ));
ct . addElement ( p );
ct . go ();
}
}
appearance . setVisibleSignature ( positionSignature ( position ), pagina , null );