iText und images

Julian R.

Mitglied
Hallo Zusammen,


ich hoffe ihr könnt mir bei meinem Problem weiterhelfen!

Hab mich gerade mal in iText etwas eingearbeitet. Wollte nun einen Header einführen, welcher ein Image auf jeder Seite hinzufügt.

Irgendwie scheitere ich aber lustiger Weise schon daran dem Image den passenden Pfad zu geben, denn mit

Java:
		Image img = null;
		try {
			img = Image.getInstance("images/header_image.png");
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		preface.add(img);

scheiterts schon daran, dass der immer sagt er findet den Pfad nicht.
Theoretisch könnt ich zwar den Pfad beispielsweise so angeben

"C:\\Daten\\images\\header_image.png"

aber das will ich ja nicht, da das image nicht irgendwo in nem Ordner nur liegen soll, sondern nachdem ich ne exe erstellt habe da auch mit eingebunden sein.


Würde mich also freuen wenn mich jemand vom Schlauch runter nimmt! ;-)


MfG,

Julian
 
Der Javacompiler wird dir wohl keine EXE erstellen. Bei korrekt installiertem Java ist das unnötig, dann kann das Programm mit einem Doppelklick auf das JAR gestartet werden.

Header und Footer erzeugt man mit Itext in dem man dem Writer eine Klasse mit writer.setPageEvent zuweist. Die zugewiesene Klasse sollte dann von extends PdfPageEventHelper ableiten. Dann kannst du

public void onStartPage(PdfWriter writer,Document document)

überschreiben. Die Grafik kannst du dann

URL url=ClassLoader.getSystemClassLoader().getResource("head.png");
img=Image.getInstance(url);
PdfContentByte over=writer.getDirectContent();
Rectangle rect=writer.getPageSize();
img.setAbsolutePosition(10,rect.getHeight()-60);
over.addImage(img);

einbinden
 
Okay super.

ja das mit Header/Footer klappt 🙂

Nur das mit dem Image immer noch nicht :-S

Java:
Image img = null;
		
		URL url = ClassLoader.getSystemClassLoader().getResource("Header.PNG");
		System.out.println(url);
		try {
			img = Image.getInstance(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Java:
null
java.lang.NullPointerException
	at com.itextpdf.text.Image.getInstance(Image.java:243)
	at de.brk.registryTool.pdf.PDFGenerator.addTitlePage(PDFGenerator.java:123)
	at de.brk.registryTool.pdf.PDFGenerator.generatePDF(PDFGenerator.java:92)
	at de.brk.registryTool.ui.views.ViewTabelleAuflistung$5.widgetSelected(ViewTabelleAuflistung.java:218)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at de.brk.regisrtyTool.Application.start(Application.java:20)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1287)
 
Obiger Pfad bedeutet, dass das Image genau da liegt, wo die Klasse ist. Groß-/KLeinschreibung beachtet?
 
Jup, Groß-/Kleinschreibung beachtet.

Auch wenn ichs wo anders reinpacke kommts aufs gleiche raus ("images/Header.PNG").

Daher stelle ich ja diese blöde Frage :-/


Also nebenbei zur Info: Das ist nen RCP-Projekt, aber bei images/icons etc. sollte sich das ja haargenau gleich verhalten.
 
Nachfolgendes Beispiel funktioniert einwandfrei, das Image liegt im Verzeichnis der Klasse. Denke, dass das dann mit der Struktur eines RCP-Projektes zu tun hat

Java:
public class HeaderFooter extends PdfPageEventHelper
{
private int seite=0;
private Image img=null;
private boolean showHeader=true;
private boolean showFooter=true;

public HeaderFooter(boolean showHeader,boolean showFooter)
    {
    this.showHeader=showHeader;
    this.showFooter=showFooter;
    try
        {
        URL url=ClassLoader.getSystemClassLoader().getResource("head.png");
        img=Image.getInstance(url);
        img.scaleAbsolute(250,40);
        }
    catch(Exception ex)
        {
        ex.printStackTrace();
        }
    }

@Override
public void onStartPage(PdfWriter writer,Document document)
    {
    seite++;
    if(showHeader)
        {
        PdfContentByte over=writer.getDirectContent();
        Rectangle rect=writer.getPageSize();
        img.setAbsolutePosition(10,rect.getHeight()-60);
        try
            {
            over.addImage(img);
            }
        catch(DocumentException ex)
            {
            ex.printStackTrace();
            }
        }
    }

@Override
public void onEndPage(PdfWriter writer,Document document)
    {
    if(showFooter)
        {
        Rectangle rect=writer.getPageSize();
        ColumnText.showTextAligned(writer.getDirectContent(),Element.ALIGN_CENTER,new Phrase(String.format("- %d -",seite)),rect.getRight()-30,15,0);
        }
    }

}
 

Zurück
Oben