style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Modificar pdf con itext

Saludos!! Les plantéo mi situación: Tengo un formato en pdf (como una plantilla) con encabezado y pie de pagina, ahora lo que necesito es pasarle a ese formato el contenido que es en HTML. el problema es que cuando trato de agregar contenido usando PdfStamper me crea el pdf con la plantilla pero no consigo la manera de agregarle el contenido que traigo en código html. Si podrían por favor ayudarme se los agredezco grandemente! , tal vez no se usar la clase PdfStamper, tal vez estoy por otro lado... Necesito una graaaan ayuda :D

Les agradezco!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

emmmmm..... podrías poner

emmmmm..... podrías poner algo de código ?????

NOTA : si puedes poner el código, ponlo entre tags de < code> y < / code >

Imagen de andreinap

Modifcar PDF con itext

Si claro!!!!!!

//rutas
String origen = "reporteMV.pdf";
 
 String otro = "CorrespInterna.pdf";

        Document nuevo = new Document();
PdfWriter pdf =PdfWriter.getInstance(document, new FileOutputStream("CorrespInterna.pdf"));
       
document.open();
document.add(html);//le copio el html , lo hace bien
document.close();                              

//leo la plantilla
PdfReader reader = new PdfReader(origen);
PdfStamper  stamper = new PdfStamper(reader, new FileOutputStream(otro), '\0', false);
 PdfContentByte pdfContentByte = stamper.getOverContent(1);
         BaseFont bf = BaseFont.createFont(BaseFont.TIMES_ITALIC, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
  pdfContentByte.setFontAndSize(bf,6);
                                 
         pdfContentByte.endText();
                                   
          stamper.close();

La cuestión es que agrega lo que le le estoy enviando al document.add(html) pero al enviarle la plantilla reemplaza lo anterior y lo que quiero es que se lo agregue como una plantilla.. Espero haberme explicado...
Estaba revisando otra opción y es agregar el document.add(html) en una ubicación x,y específica. Bueno es todo por ahora. Espero puedas ayudarme! :D

Imagen de neko069

mmm lo único que se me

mmm lo único que se me ocurrió fue tratar de replicar tu código, pero está incompleto... si puedes echarme la mano completando tu código, nos peleamos un rato con él...

Aparte, no encontré mucha información, sólo éste link y éste ... si quieres/puedes échales un ojo..

Imagen de andreinap

consegui la solución!!

Hola! gracias por el interés.. opté por crear una plantilla con Adobe Designer bien pava como yo la necesito y luego la llame y lo hace de lo mas lindo!!! Gracias a Dios! no sabes como me costó (aunque tal vez para otros sea de lo mas fácil jejejeje) Aquí les dejo por si alguien lo necesita:

                                        InputStream is = null;
                                        String param = (String)session.getAttribute("Contenido");//cargo el html por session
                                       
                                       
                                        //creando html
                                        CorrespondenciaPdf PDF = new CorrespondenciaPdf();
                                         String plantilla = nuevo.pdf"; //lo creé con el Adobe designer
                                        String dest="
reportePrueba.pdf";
                                        String original = "
CorrespInterna.pdf";
                                       
                                        File doc = new File ("
externa.html");//un html para que reciba el código que traigo por session
                                        HtmlWriter writer=null;
                                        System.out.println("
doc "+doc.getAbsolutePath());
                                        //writer.getInstance(document, new FileOutputStream(doc.getAbsolutePath()));
                                        //----------------------
                                                try{
                                            FileOutputStream fs = new FileOutputStream(doc.getAbsolutePath());
                                            OutputStreamWriter salida_ = new OutputStreamWriter(fs);
                                            salida_.write("
<html><body>"+param+"</body></html>");  
                                            salida_.close();
                                            //------------------------------
                                            //-------------pasando a pdf
                                           
                                           StyleSheet st = new StyleSheet();
                                            st.loadTagStyle("
body", "leading", "16,0");
                                           Document document = new Document();
                                       
                                           PdfContentByte texto = null;
                                       
                                           PdfReader reader = new PdfReader(plantilla);

                                               
                                           document.open();
                                                       
                                                        ArrayList p = HTMLWorker.parseToList(new FileReader(doc.getAbsolutePath()), st);
                                                       
                                                        System.out.println("

documento es: "+doc.getAbsolutePath());
                                                   Map  par =new HashMap();
                                                   PdfPTable tab=new PdfPTable(1);
                                                   PdfPCell cel = new PdfPCell();
                                                   cel.setBorder(0);
                                                  //---------------------------
                                                 
                                                  PdfImportedPage page = pdf.getImportedPage(reader, 1);

                                                        PdfContentByte cb = pdf.getDirectContent();
                                                        cb.addTemplate(page, 0, 0);
                                                 
                                                 
                                                  //------------------------------
                                                   tab.setHorizontalAlignment(tab.ALIGN_MIDDLE);
                                               
                                                   cel.setPaddingTop(200);
                                                        for (int k = 0; k < p.size(); ++k){
                                                                System.out.println("

p.get(k) "+p.get(k));
                                                                cel.addElement((Element) p.get(k));
                                                               
                                                       
                                                    }  
                                                        tab.addCell(cel);
                                                        document.add(tab);
                                document.close();
                 
                 
                                          }
               
          catch (Exception ex) {
             throw new RuntimeException(ex);
         }

.......Dad de gracia lo que gracia recibis... (La Biblia)

Usando el PdfStamper

Veo algunos problemas en tu código. Los comento a continuación:

String origen = "reporteMV.pdf";
String otro = "CorrespInterna.pdf";
// Aqui estas creando una salida del documento en "CorrespInterna.pdf"
Document nuevo = new Document();
PdfWriter pdf =PdfWriter.getInstance(document, new FileOutputStream("CorrespInterna.pdf"));
// Agregas el html al documento.
document.open();
document.add(html);//le copio el html , lo hace bien
// Cierras el documento y se ha generado un archivo llamado "CorrespInterna.pdf"
document.close();                              

//leo la plantilla
PdfReader reader = new PdfReader(origen);
//Creas una nueva salida sobreescribiendo el archivo "CorrespInterna.pdf"
PdfStamper  stamper = new PdfStamper(reader, new FileOutputStream(otro), '\0', false);
//Obtienes el contenido a modificar
 PdfContentByte pdfContentByte = stamper.getOverContent(1);
//Creas una fuente
         BaseFont bf = BaseFont.createFont(BaseFont.TIMES_ITALIC, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
//Especificas que usaras el tipo de fuente
  pdfContentByte.setFontAndSize(bf,6);
         //No haces nada y marcas el final de un texto
         pdfContentByte.endText();
         //Cierras el stamper generando un nuevo archivo "CorrespInterna.pdf" que sustituye al anterior              
          stamper.close();

Es por esto que no obtienes el resultado deseado. La idea es primero abrir el pdf base y de all[i agregar los elementos que necesites, te pongo un ejemplo a continuacion:

public static void main(String[] args) throws IOException, DocumentException {
        // Leo el contenido de mi PDF base
        PdfReader reader = new PdfReader("entrada.pdf");
        // Creo el stamper especificando el contenido base y el archivo de salida
        PdfStamper stamp = new PdfStamper(reader,
                new FileOutputStream("salida.pdf"));
        // Obtengo el contenido del pdf. Si utilizo getUnderContent lo que agregue aparecera debajo del contenido de mi PDF original
        // si utilizo getOverContent los elementos agregados apareceran encima del contenido de mi PDF original
        PdfContentByte cb =
                stamp.getUnderContent(1);
        // Creo una imagen para agregarla y le pongo propiedades de posicion y escala
        Image image = Image.getInstance("logo.png");
        image.setAbsolutePosition(10, 495);
        image.scalePercent(60);
        // Creo una fuente
        BaseFont bf =
                BaseFont.createFont(BaseFont.HELVETICA,
                BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        // Indico que comienzo a escribir texto
        cb.beginText();
        // Indico la fuente a utilizar
        cb.setFontAndSize(bf, 12);
        // Indico la posicion en la que va a ser colocado el texto
        cb.setTextMatrix(85, 495);
        // Escribo el texto
        cb.showText("Esto es una prueba");
        // Indico que termine de agregar texto
        cb.endText();
        // Agrego una imagen, la cual ya tiene las propiedades de posicion
        cb.addImage(image, false);
        // Cierro el stamper y se crea el archivo.
        stamp.close();
    }
Imagen de neko069

Gracias por aportar tú

Gracias por aportar tú solución, como dices, a alguien más le puede ser de utilidad, saludos...

Imagen de andreinap

Una cosa mas!

Gracias por tu comentario Neko Pui, ahora voy a probar el codigo porque por otro lado, tengo un pdf que tiene unos campos y quiero agregarle datos desde el codigo.. Mi confusion es, tengo una plantilla en pdf con encabezado, pie de página y los campos que comenté y tengo otro pdf que tiene información, mi pregunta es: cual sería mi base y cual sería el de salida??? tal vez mi pregunta es obvia pero no logro ver a quién le voy a hacer el stamp.. Lo que quiero hacer es: En la plantilla agregar los datos a los textField y luego agregarle la información que tenga el otro pdf.. Podrías ayudarme?? Gracias de antemano!! :D

No imagino los requisitos

Es común encontrarse con casos en los que se requiere añadir una información a un pdf que sirve de plantilla usando el pdfStamper, sin embargo no es lo mas recomendable.
Veo ahora una complejidad mayor en los requisitos de tu aplicación, hablas de una plantilla con textFields, ¿Son formularios dentro del PDF? ¿Estas usando AcroForms?
La idea sería primero llenar los campos del formulario y eso sería la base para usar el Stamper. Me queda la duda de si lo que quieres hacer con el stamper es agregar páginas al documento o si requieres la extracción de texto de otro ducumento.
¿Podrías explicarnos cuáles son los requisitos de la aplicación a ver si encontramos una mejor solución? En caso de que no sea esto posible, al menos un ejemplo mas claro subiendo los PDF's que deseas manipular y el resultado esperado. ^_^

Imagen de andreinap

Me explíco

Hola!! gracias por el interés :D !!!
Te explico lo que realmente persigo con la aplicación: Tengo un formulario que el usuario llena, se supone que al generar la información el usuario debe verla en un formato ESPECÍFICO en pdf al que le paso los parámetros en una clase por session (Por ejemplo: Nombre XXX Apellido XXX) No lo hago con jasper porque tengo una información que se genera en HTML y el jasper no lo interpreta (sino sería una pedrada al suelo jejeje). Bueno, por eso necesito que la plantilla en pdf tenga textFields para así colocar los datos en lugares específicos del documento y la información en HTML se la puedo adjuntar normalito con un document.add(HTML) (pienso yop..). La cuestión es que cuando trato de tener acceso a los campos me permite asignarle valores pero no me los muestra en el documento... No se si usar PdfStamper u otra clase. Para la creación de la plantilla estoy usando Adobe designer y le agrego los textFields en lugares específicos donde los necesito.

Por otro lado necesito dejar la plantilla intacta, y a partir de allí obtener el nuevo pdf sobre el que voy a trabajar para no alterar la plantilla ya que la aplicación es web y muchos usuarios van a acceder al mismo tiempo al pdf. Espero haberme explicado y que puedas ayudarme :D !!! Muchas gracias!

Ayuda con itext

Necesito generar un pdf el cual contiene parrafos de longitud variable segun los datos entrados por el usuario, hasta aki todo bien, el problema es k al final del documento tiene k aparecer la firma digital del usuario, necesito generar un pdf con firmas digitales que se posicionen despues de un parrafo de longitud variable

texto blblblblblblblblbllblblblbblblblbllblb

firma
_________

Imagen de Linda

Ayuda sip :)

Hola.
Estoi empesando a usar Itext y kiero crear un PDF con encabezado y pies de pagina mi codigo es el siguiente me pueden decir en que estoi fallando? por favor.
La parte del encabezado ya me salio pero el pie de pagina aun no.
aki les dejo el codigo:

//Librerias k se itilizan

public class PDF extends PdfPageEventHelper {

public void crearPDF() throws Exception {
/*Definimos las cadenas del encabezado del documento y los demas datos a utilizar*/
String encabezado="REPORTE"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n";
/*Colocaremos la fecha de creacion*/
java.util.Date date=new java.util.Date();
/*Fuente utilizada para el encabezado*/
Font fuente=new Font(Font.getFamily("ARIAL"),14,Font.BOLD);
/*Almacenaremos la imagen que ira en la parte superior y la alineamos a la izquierda*/

Image imagen=Image.getInstance(("imagen.png"));
/*Empesaremos a estructurar el contenido*/
try{
/*Pasaremos nuestras cadenas a elementos de Itext*/
/*Definimos una frase que sera el string encabezado y le aplicamos la fuente*/
Paragraph linea=new Paragraph(encabezado,fuente);
linea.setAlignment (Element.ALIGN_CENTER);
/*Pasamos la fecha a un string y le agregamos a un parrafo*/
Paragraph fecha=new Paragraph(String.valueOf(date)+"\n"+"\n");
/*Ya que se tiene todos los elementos se agregan al documento, para ello
* definimos un documento e indicamos el tamaño*/
Document documento=new Document(PageSize.LETTER);
/*Definimos el nombre del archivo con extension pdf*/
String file="PDF.pdf";
/*A traves del siguiente metodo (getInstance) y un flujo de salida del paquet .io
* asociamos el documento de Itext con el archivo de java */
PdfWriter.getInstance(documento,new FileOutputStream(file));
/*Abrimos el documento y agregamos los elementos en el orden que deben de aparecer*/
documento.open();
documento.add(imagen);
documento.add(linea);
documento.add(fecha);
/*Cerramos el documento*/
documento.close();
}catch(DocumentException e){
JOptionPane.showMessageDialog(null,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
return;
}catch(IOException e) {
JOptionPane.showMessageDialog(null,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
return;
}
}

public void onEndPage (PdfWriter writer, Document documento) {
Rectangle rect = writer.getBoxSize("art");
//Pie
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_CENTER, new Phrase(String.format("page %d otra cosa", writer.getPageNumber())),
(rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
}

public static void main(String []args) throws Exception {
/*Invocamos los metodos*/
PDF cfe=new PDF();
cfe.crearPDF();
PdfWriter writer = null;
Document documento = null;
//PdfWriter writer;
cfe.onEndPage(writer, documento);
}

espero me puedan ayudar lo mas pronto posible

trabajando con PDF

Hola.
Tengo un pequeño trabajo con manejo de pdf's lo que intento hacer es:
1. tengo un pdf con contenido variado
2. debo obtener el color del texto contenido en el pdf
3. debo modificar el color del pdf según variables aleatorias (para q el texto del pdf aparezca de distintos colores.. un carnaval XD)
4. y guardar el pdf ya sea sobreescribiendolo o en un pdf nuevo.
alguien sabe como puedo hacer todo esto? y sii es posible hacerlo con itext o alguna otra librería???

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">