You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Michel Pawlak (JIRA)" <ji...@apache.org> on 2014/06/06 17:22:01 UTC

[jira] [Created] (PDFBOX-2121) NullPointerException when calling org.apache.pdfbox.pdmodel.edit.PDPageContentStream.setFont()

Michel Pawlak created PDFBOX-2121:
-------------------------------------

             Summary: NullPointerException when calling org.apache.pdfbox.pdmodel.edit.PDPageContentStream.setFont()
                 Key: PDFBOX-2121
                 URL: https://issues.apache.org/jira/browse/PDFBOX-2121
             Project: PDFBox
          Issue Type: Bug
          Components: Writing
    Affects Versions: 1.8.5
            Reporter: Michel Pawlak
            Priority: Critical


*Context / how to reproduce *

When creating a table and writing it to a pdf file, i get a NPE when setting the font size above a given size. As a result my application crashes. It seems to occur when the text i try to write is too large for the page.

*Stack trace*

java.lang.NullPointerException: null
	at org.apache.pdfbox.pdmodel.edit.PDPageContentStream.setFont(PDPageContentStream.java:321) ~[pdfbox-1.8.5.jar:na]
	at qa.reportgenerator.report.pdf.table.PDFTable.drawRow(PDFTable.java:67) ~[classes/:na]
	at qa.reportgenerator.report.pdf.SummaryGenerator.drawTableLine(SummaryGenerator.java:365) ~[classes/:na]
	at qa.reportgenerator.report.pdf.SummaryGenerator.drawTable(SummaryGenerator.java:268) ~[classes/:na]
	at qa.reportgenerator.report.pdf.SummaryGenerator.draw(SummaryGenerator.java:62) ~[classes/:na]
	at qa.reportgenerator.report.pdf.PDFReportGenerator.generate(PDFReportGenerator.java:28) ~[classes/:na]
	at qa.reportgenerator.report.pdf.PDFReportGenerator.generate(PDFReportGenerator.java:18) ~[classes/:na]
	at qa.reportgenerator.Runner.generatePDFReport(Runner.java:257) [classes/:na]
	at qa.reportgenerator.Runner.execute(Runner.java:76) [classes/:na]

*Additional info*

- PDFTable, is a class allowing me to easily create tables (adding cells, rows, setting text orientation, font /color / background of each cell, horizonal/vertical text alignment, etc.) The content of the line "qa.reportgenerator.report.pdf.table.PDFTable.drawRow(PDFTable.java:67)" is : 

{code}
this.contentStream.setFont(cell.getFont(), cell.getFontSize());
{code}

- On this line, contentStream is a PDPageContentStream instance, and when the MPE occurs, cell.getFont returns PDType1Font.HELVETICA and cell.getFontSize returns 6. 

- I get no NPE when font size is < 6 or when the width of the text I try to write is smaller.

- I do not close manually the PDPageContentStream.

- Page size is A4.

*Debuger data*

When debugging, it appears that the problem occurs when calling the setFont method of the last cell of a row. 

Indeed, when calling setFont on the cell left to the last cell of the table, the content of the "resources" variable is :

{code}
resources	PDResources  (id=1692)	
	colorspaces	null	
	fontMappings	HashMap<K,V>  (id=2032)	
		cache	null	
		elementCount	2	
		elementData	HashMap$Entry<K,V>[16]  (id=1714)	
		hashMask	0	
		keySet	null	
		loadFactor	0.75	
		modCount	2	
		threshold	12	
		useAltHashing	false	
		valuesCollection	null	
	fonts	HashMap<K,V>  (id=1964)	
	graphicsStates	null	
	images	null	
	patterns	null	
	resources	COSDictionary  (id=2802)	
		direct	false	
		items	LinkedHashMap<K,V>  (id=1036)	
			accessOrder	false	
			cache	null	
			elementCount	2	
			elementData	LinkedHashMap$LinkedHashMapEntry<K,V>[16]  (id=1274)	
			hashMask	0	
			head	LinkedHashMap$LinkedHashMapEntry<K,V>  (id=1166)	
			keySet	LinkedHashMap$1  (id=1811)	
			loadFactor	0.75	
			modCount	2	
			tail	LinkedHashMap$LinkedHashMapEntry<K,V>  (id=2803)	
			threshold	12	
			useAltHashing	false	
			valuesCollection	null	
		needToBeUpdate	false	
	shadings	null	
	xobjectMappings	HashMap<K,V>  (id=1253)	
		cache	null	
		elementCount	1	
		elementData	HashMap$Entry<K,V>[16]  (id=1796)	
		hashMask	0	
		keySet	null	
		loadFactor	0.75	
		modCount	1	
		threshold	12	
		useAltHashing	false	
		valuesCollection	null	
	xobjects	HashMap<K,V>  (id=1947)	
		cache	null	
		elementCount	1	
		elementData	HashMap$Entry<K,V>[16]  (id=1580)	
		hashMask	0	
		keySet	HashMap$1  (id=1463)	
			this$0	HashMap<K,V>  (id=1947)	
		loadFactor	0.75	
		modCount	1	
		threshold	12	
		useAltHashing	false	
		valuesCollection	null	
{code}

then the NPE occurs on the next call to setFont(). The resources object is not null, but it has then changed :

{code}
resources	PDResources  (id=1168)	
	colorspaces	null	
	fontMappings	HashMap<K,V>  (id=1665)	
		cache	null	
		elementCount	0	
		elementData	HashMap$Entry<K,V>[16]  (id=1505)	
		hashMask	0	
		keySet	null	
		loadFactor	0.75	
		modCount	0	
		threshold	12	
		useAltHashing	false	
		valuesCollection	null	
	fonts	null	
	graphicsStates	null	
	images	null	
	patterns	null	
	resources	COSDictionary  (id=2802)	
		direct	false	
		items	LinkedHashMap<K,V>  (id=1036)	
			accessOrder	false	
			cache	null	
			elementCount	2	
			elementData	LinkedHashMap$LinkedHashMapEntry<K,V>[16]  (id=1274)	
			hashMask	0	
			head	LinkedHashMap$LinkedHashMapEntry<K,V>  (id=1166)	
			keySet	LinkedHashMap$1  (id=1811)	
			loadFactor	0.75	
			modCount	2	
			tail	LinkedHashMap$LinkedHashMapEntry<K,V>  (id=2803)	
			threshold	12	
			useAltHashing	false	
			valuesCollection	null	
		needToBeUpdate	false	
	shadings	null	
	xobjectMappings	null	
	xobjects	null	
{code}

I hope that you have enough information.

Thank you for your help !



--
This message was sent by Atlassian JIRA
(v6.2#6252)