Cómo agregar encabezado y pie de página usando PdfStamper en iTextPDF cuando el servlet es sensible a la base de datos?
Tengo un servlet que crea un PDF directamente desde una base de datos MySQL. Todo funciona bien, pero ahora necesito agregar encabezados y pies de página en cada página de ese PDF generado dinámicamente. El encabezado debe mostrar ‘Página número_actual de número_total_de_páginas’ y el pie debe recuperar algunos datos de la base de datos MySQL y mostrarlos en formato de tabla. Realmente estoy atascado en este problema desde hace algunas semanas.
Estoy usando servlet 2.5 e itextpdf 5.5.4.
Aquí adjunto mi código:
El código anterior me da el siguiente error:
java.io.IOException: org.apache.catalina.connector.CoyoteOutputStream@10e18ba no encontrado como archivo o recurso.
en com.itextpdf.text.io.RandomAccessSourceFactory.createByReadingToMemory (RandomAccessSourceFactory.java: 263)
en com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource (RandomAccessSourceFactory.java: 173)
en com.itextpdf.text.pdf.PdfReader.
en com.itextpdf.text.pdf.PdfReader.
en com.itextpdf.text.pdf.PdfReader.
en servlet_for_demand.formPart11PDF.doGet (formPart11PDF.java: 737)
en servlet_for_demand.formPart11PDF.doPost (formPart11PDF.java: 810)
en javax.servlet.http.HttpServlet.service (HttpServlet.java: 637)
en javax.servlet.http.HttpServlet.service (HttpServlet.java: 717)
en org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java: 290)
en org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java: 206)
en org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java: 233)
en org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java: 191)
en org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java: 127)
en org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java: 102)
en org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java: 109)
en org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java: 298)
en org.apache.coyote.http11.Http11Processor.process (Http11Processor.java: 859)
en org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process (Http11Protocol.java: 588)
en org.apache.tomcat.util.net.JIoEndpoint$Worker.run (JIoEndpoint.java: 489)
en java.lang.Thread.run (Fuente desconocida)
Aquí adjunto el código para crear la tabla de mi base de datos para que el desarrollador pueda encontrar una solución más fácil.
create database test;
use test;
create table dm_011(mmg_no varchar(40), i_des varchar(40), tg_dir varchar(40));
insert into dm_011 values (‘1′,’abcd’,’abcd1′);
insert into dm_011 values (‘2′,’efgh’,’efgh1′);
Por favor, ayúdame, no puedo encontrar ninguna solución.
davy.ai
Para agregar un encabezado y un pie de página a cada página de un PDF generado dinámicamente creado por un servlet usando iTextPDF 5.5.4, puede seguir los siguientes pasos:
PdfPageEventHelper
que extienda la clasePdfPageEventHelper
proporcionada por iTextPDF. Esta clase se utilizará para agregar el encabezado y el pie de página a cada página.doGet
, cree una instancia de la claseHeaderFooter
anterior y pásela alPdfWriter
.Tenga en cuenta que hemos cambiado la instanciación de
PdfWriter
para incluir el documento y el flujo de salida, y también especificamos los márgenes del documento al crear la instancia deDocument
.PreparedStatement
yResultSet
proporcionadas por JDBC. Por ejemplo, para recuperar los datos para el pie de página del PDF, puede modificar su código de la siguiente manera:Aquí,
"some_column"
es el nombre de una columna en su tabla de base de datos, ysome_value
es un valor para el que desea recuperar los datos.table
al pie de página de cada página en el métodoonEndPage
de la claseHeaderFooter
creada anteriormente.Tenga en cuenta que hemos agregado la instancia de
table
como una nueva celda a la tablafooter
creada anteriormente. Además, hemos incluido la tablafooter
en el métodowriteSelectedRows
para colocarla correctamente en la página del PDF.Con estas modificaciones, su servlet ahora debería poder generar un PDF con encabezados y pies de página en cada página, y recuperar datos de la base de datos MySQL para mostrar en el pie de página.