# PDF lesen funktioniert bei bestimmten Dateien nicht mit pdfview



## blandest (16. Jun 2010)

Hallo zusammen!

Ich habe ein Problem bein einlesen von PDF-Dateien in meinem Programm. Bestimmte PDF-Dateien machen Probleme und werfen eine Exception beim Aufruf der Methode PDFFile.getPage(i, true);

Hier die Exception:

15:21:51,208 ERROR [STDERR] java.lang.NullPointerException
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.font.PDFFontDescriptor.<init>(PDFFontDescriptor.java:107)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.font.PDFFont.getFont(PDFFont.java:137)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.PDFParser.getFontFrom(PDFParser.java:1172)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.PDFParser.iterate(PDFParser.java:726)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.BaseWatchable.execute(BaseWatchable.java:263)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.BaseWatchable.go(BaseWatchable.java:197)
15:21:51,208 ERROR [STDERR] 	at com.sun.pdfview.PDFFile.getPage(PDFFile.java:1344)
15:21:51,208 ERROR [STDERR] 	at at.bewag.utils.fileupload.NewFileUploadHelper.run(NewFileUploadHelper.java:92)
15:21:51,208 ERROR [STDERR] 	at java.lang.Thread.run(Thread.java:595)

Im Prinzip möchte ich nichts anderes machen als eine PDF-Datei einlesen in eine JPG-Datei umwandeln und abspeichern. Bei vielen PDF-Dateien funktioniert mein Coding einwandfrei und bei einigen wird die Exception geworfen und in weiterer Folge dadurch nur ein komplett weißes Bild erstellt.

Hier die entsprechende Codestelle:

```
PdfReader reader = new PdfReader(item.getFile().getAbsolutePath());
			Document document = new Document(reader.getPageSize(1));
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			PdfCopy copy = new PdfCopy(document, bos);
			copy.setPdfVersion(PdfCopy.PDF_VERSION_1_4);

			document.open();

			for (int i = 1; i <= reader.getNumberOfPages(); i++)
			{
				PdfImportedPage page = copy.getImportedPage(reader, i);
				copy.addPage(page);
			}
			document.close();

			// Konvertierung zu Bildern
			RandomAccessFileOrArray raf = new RandomAccessFileOrArray(bos.toByteArray());
			
			ByteBuffer buf = raf.getNioByteBuffer();
			
			PDFFile pdffile = new PDFFile(buf);

			UploadFile upFile = new UploadFile();
			upFile.setName(item.getFileName().substring(0, item.getFileName().indexOf('.') + 1) + format);

			// Begin mit dem Erstellen der Bilder, pro Seite ein Bild
			int num = pdffile.getNumPages();
			for (int i = 1; i <= num; i++)
			{
				PDFPage page = pdffile.getPage(i, true);
				
				// Höhe und Breite der Seite ermitteln
				int width = (int) page.getBBox().getWidth();
				int height = (int) page.getBBox().getHeight();

				Rectangle rect = new Rectangle(0, 0, width, height);

				// Bild erstellen				
				BufferedImage img = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_RGB);
				Graphics2D g2d = (Graphics2D)img.getGraphics();
				g2d.translate(0, 0);
				PDFRenderer pdfr = new PDFRenderer(page, g2d, rect, null, Color.WHITE);
				
				try
				{
					page.waitForFinish ( );
					pdfr.run ( );
				}
				catch ( InterruptedException ie ) { 
					// nothing to do 
				}
				
				ByteArrayOutputStream imgBos = new ByteArrayOutputStream();
				ImageIO.write(img, format, imgBos);

				// File zur Liste hinzufügen
				upFile.addData(eliminateVulnarabilities(imgBos.toByteArray(), format)); //
								
				try{
					imgBos.close();
					bos.close();
				} catch(Exception e){}
			}
```

Vielleicht kann mir ja jemand weiterhelfen! Vielen Dank schon mal im vorhinein!


----------



## maki (16. Jun 2010)

Zu deinem konkreten Problem kann ich nix sagen, aber sun packages (mittlerweile com.sun Packages) sollte man niemals verwenden: FAQ - Sun Packages


----------



## blandest (18. Jun 2010)

Danke für deine Antwort, maki!

Weisst du vielleicht alternative (Freeware) Bibliotheken die ich nutzen kann um PDFs in Images umzuwandeln?


----------



## xjCoder (18. Jun 2010)

Hi,

schau Dir doch mal PDFBox an - steht unter der Apache License.


----------



## blandest (22. Jun 2010)

Hallo Xeter,

hab mir einmal PDFBox zu Gemüte geführt. Viel Dokumentation oder Beispiele findet man dazu leider nicht :-(
Hab's aber soweit geschafft, dass ich ein PDF einlesen und dann in ein Bild konvertieren kann. Leider auch nicht mit vollem Erfolg. Ab und zu werden Grafiken gar nicht ins Bildformat konvertiert oder machmal kommt folgende Exception und es werden gewisse Zeilen nur komplett schwarz dargestellt.

WARN  [PDColorState] Unable to create the color instance [255.0, 255.0, 255.0] in color space DeviceRGB{  }; using black instead
java.lang.IllegalArgumentException: Color parameter outside of expected range: Red Green Blue
	at java.awt.Color.testColorValueRange(Color.java:285)
	at java.awt.Color.<init>(Color.java:369)
	at java.awt.Color.<init>(Color.java:344)
	at java.awt.Color.<init>(Color.java:435)
	at org.apache.pdfbox.pdmodel.graphics.color.PDColorState.createColor(PDColorState.java:134)
	at org.apache.pdfbox.pdmodel.graphics.color.PDColorState.getJavaColor(PDColorState.java:113)
	at org.apache.pdfbox.pdfviewer.PageDrawer.fillPath(PageDrawer.java:269)
	at org.apache.pdfbox.util.operator.pagedrawer.FillNonZeroRule.process(FillNonZeroRule.java:58)
	at org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:552)
	at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:248)
	at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:207)
	at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:106)
	at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:698)
	at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:669)
	at at.bewag.utils.fileupload.NewFileUploadHelper.run(NewFileUploadHelper.java:61)
	at java.lang.Thread.run(Thread.java:595)


Hab schon verschiedene Versionen von PDFBox ausprobiert (0.7.3, 0.8.0, 1.1.0), aber keine lieferte ein sauberes Ergebnis. Kann mir irgendjemand Tipps geben wie man einfach ein PDF in ein Image umwandelt ohne irgendwelche sonderbaren Nebeneffekte?! Bin für jeden Hinweis dankbar!


----------

