Hello iText
users,
I have some kind of
problem concerning a Document, in which I try to add a PdfPTable. The PdfPTable
is generated quite normally, but when I do the
document.add(myTable), i
have the following stack trace :
DocumentException:
java.lang.NullPointerException
at com.lowagie.text.pdf.PdfContentByte.setFontAndSize(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.writeLineToContent(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.PdfPRow.writeCells(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPRow.writeCells(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.addPTable(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.add(Unknown Source)
at com.lowagie.text.Document.add(Unknown Source)
at com.influe.asp.render.RenderDocumentPdf.render(RenderDocumentPdf.java:148)
at com.influe.asp.render.Main.main(Main.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.intellij.rt.execution.application.AppMain.main(Unknown Source)
at com.lowagie.text.pdf.PdfContentByte.setFontAndSize(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.writeLineToContent(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.PdfPRow.writeCells(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPRow.writeCells(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.addPTable(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.add(Unknown Source)
at com.lowagie.text.Document.add(Unknown Source)
at com.influe.asp.render.RenderDocumentPdf.render(RenderDocumentPdf.java:148)
at com.influe.asp.render.Main.main(Main.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.intellij.rt.execution.application.AppMain.main(Unknown Source)
Here is the portion of
code involved .... :
public String
render(Locale
p_locale,
String p_fileName) throws Exception
{
String _returnValue = null;
String p_fileName) throws Exception
{
String _returnValue = null;
//
Classe pour la param�tres
RenderParameters _params = RenderParameters.getInstance();
RenderParameters _params = RenderParameters.getInstance();
//
Chemin du fichier pdf.
String _pdfFileName = null;
String _pdfFileName = null;
// 1-
Set d'objets Lowagie
PdfContentByte pcb;
PdfTemplate pt;
BaseFont bf = null;
PdfContentByte pcb;
PdfTemplate pt;
BaseFont bf = null;
Document document = new Document(PageSize.A4, 20, 20, 20,
20);
// 2-
On ouvre le document
document.open();
document.open();
try
{
// 3- On r�cup�re l'objet ici.
// Faire les appels aux proxy pour chaque truc (sais pas trop comment faire encore) => non non non
// donn�es r�cup�r�es dans l'application utilisant ce module.
{
// 3- On r�cup�re l'objet ici.
// Faire les appels aux proxy pour chaque truc (sais pas trop comment faire encore) => non non non
// donn�es r�cup�r�es dans l'application utilisant ce module.
if (p_fileName ==
null)
{
throw new RuntimeException("!!");
}
{
throw new RuntimeException("!!");
}
_pdfFileName =
File.createTempFile(p_fileName, ".pdf", new
File(_params.getSharedDirectory())).getAbsolutePath();
}
catch(Exception _ex)
{
throw _ex;
}
}
catch(Exception _ex)
{
throw _ex;
}
// 4-
On set les propri�t� du document
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(_pdfFileName));
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(_pdfFileName));
try
{
// NOUVEAUTE � partir de la version 1.0, on dois ouvrir le writer !!!
writer.open();
pcb = writer.getDirectContent();
pt = pcb.createTemplate(25, 25);
{
// NOUVEAUTE � partir de la version 1.0, on dois ouvrir le writer !!!
writer.open();
pcb = writer.getDirectContent();
pt = pcb.createTemplate(25, 25);
bf =
BaseFont.createFont(_params.getArialUnicodeTTF(), BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
// On set la font et la
taille
if (bf == null)
{
throw new RuntimeException("BaseFont problem, exiting.");
}
if (bf == null)
{
throw new RuntimeException("BaseFont problem, exiting.");
}
PdfPTable _space = createSpace(new
Font(bf, 9));
// On cr�e la classe avec les
evenements ???!!!
// RenderPdfEvent _events = new RenderPdfEvent(bf, pcb, pt);
// writer.setPageEvent(_events);
// RenderPdfEvent _events = new RenderPdfEvent(bf, pcb, pt);
// writer.setPageEvent(_events);
// On forme le header
...
PdfPTable _header = getHeader(header, p_locale);
if (_header != null)
{
document.add(_header);
}
PdfPTable _header = getHeader(header, p_locale);
if (_header != null)
{
document.add(_header);
}
...
}
and the getHeader() method
..
private PdfPTable
getHeader(
ArrayList p_objHeader,
Locale p_locale) throws Exception
{
// On cr�e un nouveau tableau avec autant de colonnes que d'�l�ments dans la liste des �l�ments de l'entete
PdfPTable _returnValue = null;
ArrayList p_objHeader,
Locale p_locale) throws Exception
{
// On cr�e un nouveau tableau avec autant de colonnes que d'�l�ments dans la liste des �l�ments de l'entete
PdfPTable _returnValue = null;
try
{
if (p_objHeader.size() > 0)
{
_returnValue = new PdfPTable(p_objHeader.size());
{
if (p_objHeader.size() > 0)
{
_returnValue = new PdfPTable(p_objHeader.size());
// largeur des
diff�rentes colonnes ...
int _largeur = (100 / p_objHeader.size());
int[] _taille = new int[p_objHeader.size()];
int _largeur = (100 / p_objHeader.size());
int[] _taille = new int[p_objHeader.size()];
for (int _i = 0; _i <
p_objHeader.size(); _i++)
{
_taille[_i] = _largeur;
}
{
_taille[_i] = _largeur;
}
_returnValue.setWidths(_taille);
_returnValue.setWidthPercentage(100);
_returnValue.setWidthPercentage(100);
for (Iterator _it =
p_objHeader.iterator(); _it.hasNext();
)
{
RenderObjectI _element = (RenderObjectI)_it.next();
/* The PdfPTable here seems to be really wlel formed, in debugging i saw that it contained only one row with the data a specified before, so for me, the PDfPTable is really what I wanted it to be */
{
RenderObjectI _element = (RenderObjectI)_it.next();
/* The PdfPTable here seems to be really wlel formed, in debugging i saw that it contained only one row with the data a specified before, so for me, the PDfPTable is really what I wanted it to be */
Object _obj =
_element.render(RenderDocumentI.RENDER_MODE_PDF, p_locale);
if (_obj
instanceof PdfPCell)
{
_returnValue.addCell((PdfPCell)_obj);
}
{
_returnValue.addCell((PdfPCell)_obj);
}
if (_obj
instanceof PdfPTable)
{
_returnValue.addCell((PdfPTable)_obj);
}
}
}
}
catch (Exception _ex)
{
log.error(_ex, _ex);
}
{
_returnValue.addCell((PdfPTable)_obj);
}
}
}
}
catch (Exception _ex)
{
log.error(_ex, _ex);
}
return
_returnValue;
}
}
Thanks again
!
Regards,
R.Nicolau
