PDFs generieren. Mit welcher Lib?

  • 28 Antworten
  • Neuester Beitrag
Diskutiere PDFs generieren. Mit welcher Lib? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
J

Jarny

Stammgast
Hi
Ich möchte in einer App ein PDF generierenen lassen (Größtenteils Text mit ein paar Tabellen). Es gibt mehrere Libraries um dies zu tun. Ich wollte mal fragen ob es hier Leute gibt die sowas schonmal benutzt haben und wie die Erfahrung damit ist. Gefunden habe ich PDFJet, iText und Qoppa.
Mir gehts auch um den Aspekt welche Library keine Kosten in der Lizensierung verursachen, da ich meine App umsonst anbieten will. Die App läuft bisher ab Android 4.0.3.

Danke und Gruß
Jarny
 
J

Jarny

Stammgast
reneph schrieb:
Schau dir mal Android PDF Writer | Free software downloads at SourceForge.net an. Ich hab sie zwar (noch) nicht benutzt, aber sie ist unter der BSD-Lizenz lizensiert, welche imho recht angenehm ist (kostenlos, kein Quellcode-Veröffentlichungszwang...)
Hmm, habe mir das gerade mal angeschaut. Die APW Lib unterstützt noch nichtmal Tabellen. Das ist mir dann doch etwas zu rudimentär für mein Projekt.

Ich denke ich schau mir mal die pdfjet lib an. Die steht auch unter BSD Lizenz und bietet einfache Tabellen.
Hat schon jemand Erfahrungen mit pdfjet unter Android?

*edit* Also ich blick das nicht so recht mit den Lizenzen. Vorne steht, dass es eine BSD-style Lizenz hat und wenn man dann die Lib downloaden will steht da was von Evaluation License.
Also doch nichts für meine App :-(


Gruß
Jarny
 
Zuletzt bearbeitet:
DieGoldeneMitte

DieGoldeneMitte

Dauergast
Ich verstehe die Seite so, dass die Eval-License nur für die Kommerzielle Version ist.
Die OpenSource License hat einen eigenen Download Button im Sidemenü weiter unten.
 
reneph

reneph

Dauergast
Unabhängig davon, dass wohl keine Tabellen unterstützt werden und dadurch nicht für dich passt: sorry, finde das mit Eval-License nicht. Kann mir mal jmd. sagen, wo was davon steht? Ich seh überall nur BSD...
 
J

Jarny

Stammgast
reneph schrieb:
Unabhängig davon, dass wohl keine Tabellen unterstützt werden und dadurch nicht für dich passt: sorry, finde das mit Eval-License nicht. Kann mir mal jmd. sagen, wo was davon steht? Ich seh überall nur BSD...
Das mit den Lizenzen bezog sich auf die pdfjet lib und nicht auf die APW Lib.
Wenn man auf den Download der Javaversion klickt kommt ein Hinweis auf die Eval-Lizenz. PDFjet - The Premier Cloud and Mobile PDF library for Java and .NET


DieGoldeneMitte schrieb:
Ich verstehe die Seite so, dass die Eval-License nur für die Kommerzielle Version ist.
Die OpenSource License hat einen eigenen Download Button im Sidemenü weiter unten.
Würde eigentlich gerne die fertige Lib benutzen. Aber wenns nicht anders geht versuche ich mal unter IntelliJ (Ich benutze kein Eclipse) die Sourcen lauffähig zu bekommen.

Gruß
Jarny
 
M

Madlip

Gast
Die APW kann keine Umlaute, habe dazu auch einen Beitrag auf SO java - Unable to Encoding UTF-8 - Stack Overflow

Die PdfJet, war für mich dann auch nicht ganz klar was das dann sollte das auf einmal die Eval-Lizenz auftaucht. Beim download noch BSD und wenn man dann ein Dokument erzeugt kommt dann eben der hinweis auf die Eval
 
J

Jarny

Stammgast
Madlip schrieb:
Die PdfJet, war für mich dann auch nicht ganz klar was das dann sollte das auf einmal die Eval-Lizenz auftaucht. Beim download noch BSD und wenn man dann ein Dokument erzeugt kommt dann eben der hinweis auf die Eval
Hattest du die Lib aus den Sourcen selbst gebaut oder die fertige Lib benutzt? Vielleicht haben die extra in die fertige Lib was eingebaut um den Eval-Hinweis zu erzeugen.
 
M

Madlip

Gast
bei der PDFJet hab ich die fertige Lib geladen und benutzt.

Mit Sicherheit werden die dort was eingebaut haben, je nachdem was man aussucht wird ja dann der download gestartet, also bei der Kaufversion wird das dann nicht mehr drin sein. Hat man ja dann für gezahlt.

Hast du schon ein Dokument damit erzeugt? Bei mir stand es im Kopf des Dokumentes.
 
J

Jarny

Stammgast
Ich hab noch nichts mit der Lib gemacht. Komme diese Woche wahrscheinlich auch nicht mehr dazu.
Ich meinte eigentlich nicht den Unterschied zwischen Kaufversion und Evaluationversion, sondern zwischen dem Sourcecode und der Evaluationversion.
In der Sourcecode Version ist evtl. dieser Evaulationshinweis nicht drin.
Aber wie gesagt, ich hab noch nichts damit gemacht und kann deshalb nur mutmaßen.

Gruß
Jarny

*Edit*
Ich hab mal in der fertigen Lib gesucht und den Text gefunden: "This document was created with the evaluation version of PDFjet 3To acquire a license please visit http://pdfjet.com". (Klasse PDF.class)
In der Opensource Version ist der Text nicht drin. D.h. wenn man die Lib selbst kompiliert hat man ordentliche Dokumente.
 
Zuletzt bearbeitet:
M

Madlip

Gast
das ist wirklich interessant, nur da stellt sich mir die Frage wie es sich dennoch rechtlich verhält. Nehmen wir an du gehst den weg der selbst Kompilierung, steht sie dann unter der BSD Lizenz oder wie ist das dann? Weil dann kann man ja eine kommerzielle App erstellen und die Lib bedenkenlos verwenden.
 
DieGoldeneMitte

DieGoldeneMitte

Dauergast
Madlip schrieb:
das ist wirklich interessant, nur da stellt sich mir die Frage wie es sich dennoch rechtlich verhält. Nehmen wir an du gehst den weg der selbst Kompilierung, steht sie dann unter der BSD Lizenz oder wie ist das dann? Weil dann kann man ja eine kommerzielle App erstellen und die Lib bedenkenlos verwenden.
Was soll sich wie rechtlich verhalten? Die Sache ist doch eigentlich ganz einfach. Du hast drei Optionen:

1.) du kaufst eine Lizenz und machst deine App mit der Lib (darfst dann eigentlich nur kein reverse engineering machen und das ganze nicht als PDF lib einfach weiterverticken oder behaupen, die PDF lib wäre dein Geistes Kind).
2.) du nimmt die eval Lizenz, hast den Text darin und musst die Bedingungen der Lizenz erfüllen (also nur selber mit rumspielen und keine offizielle App draus machen).
3.) du nimmst die offene Version mit BSD Lizenz und musst dann selbst kompilieren (zugegeben, eine komische Schikane). Man beachte, dass die offene Version nicht alles kann: PDFjet - high performance PDF library for Java and .NET
 
J

Jarny

Stammgast
Ja stimmt. Es ist so wie es DieGoldeneMitte geschrieben hat. Wenn man die OpenSource-Version benutzt (also sebst kompiliert) hat man einige Features nicht wie zB: Flexible Charts und TruetypeFonts etc.
Ich werde demnächst mal schauen ob mir die OpenSource-Version ausreicht. Tabellen und sowas kann die ja auch. Eigentlich brauche ich nur einen normalen Font, sollte also passen.

Gruß
Jarny

PS:
Noch ne Frage wegen der BSD-Lizenz. Dürfte man die Opensource-Version von pdfjet eigentlich in einer Software benutzen für die man im Appstore Geld verlangt?
 
DieGoldeneMitte

DieGoldeneMitte

Dauergast
Jarny schrieb:
Noch ne Frage wegen der BSD-Lizenz. Dürfte man die Opensource-Version von pdfjet eigentlich in einer Software benutzen für die man im Appstore Geld verlangt?
Deren Lizenz hat da kein Problem mit. Du musst halt wie beschrieben deren Lizenz in deinem Produkt verfügbar machen.

ADD: Weiterverkauf wäre übrigens sogar bei GPL möglich, müsstet dann aber den Source verfügbar machen.
 
T

TheEvilOne

App-Anbieter (In-App)
Madlip schrieb:
Die APW kann keine Umlaute, habe dazu auch einen Beitrag auf SO java - Unable to Encoding UTF-8 - Stack Overflow
Ich verwende die APW-Lib nun schon eine ganze Weile. Auch in meiner neuen App habe ich sie eingesetzt.

Umlaute kann sie. Nur mit diesen Klammern ( ) kommt sie nicht klar. Die Lib ist schon recht rudimentär, Tabellen habe ich damit bisher noch nicht implementiert, weil ich sie nicht benötigt hatte.

Aber Texte und Bilder kann ich einwandfrei generieren.

Man muß bei den Texten halt was bauen, dass die auf die Zeilenlänge prüft und ggf. einen Zeilenumbruch einfügt. Sonst ragt der Text rechts aus der Seite hinaus und wird abgeschnitten. Keine Ahnung, wie sich das in der anderen Lib verhält.

Viele Grüße
 
M

Madlip

Gast
TheEvilOne schrieb:
Ich verwende die APW-Lib nun schon eine ganze Weile. Auch in meiner neuen App habe ich sie eingesetzt.

Umlaute kann sie. Nur mit diesen Klammern ( ) kommt sie nicht klar. Die Lib ist schon recht rudimentär, Tabellen habe ich damit bisher noch nicht implementiert, weil ich sie nicht benötigt hatte.

Aber Texte und Bilder kann ich einwandfrei generieren.

Man muß bei den Texten halt was bauen, dass die auf die Zeilenlänge prüft und ggf. einen Zeilenumbruch einfügt. Sonst ragt der Text rechts aus der Seite hinaus und wird abgeschnitten. Keine Ahnung, wie sich das in der anderen Lib verhält.

Viele Grüße
OK, da bin ich nun gespannt. Wie machst du es?

Also ich habe folgenden Code:

Code:
private String generateHelloWorldPDF()
	{

		PDFWriter mPDFWriter = new PDFWriter(PaperSize.FOLIO_WIDTH, PaperSize.FOLIO_HEIGHT);

		mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.TIMES_BOLD);
		mPDFWriter.addText(50, 850, 16, "Ätestest");

		int pageCount = mPDFWriter.getPageCount();
		for (int i = 0; i < pageCount; i++)
		{
			mPDFWriter.setCurrentPage(i);
			mPDFWriter.addText(10, 10, 8, Integer.toString(i + 1) + " / " + Integer.toString(pageCount));
		}

		String s = mPDFWriter.asString();
		return s;
	}

private void outputToFile(String fileName, String pdfContent, String encoding)
	{
		File newFile = new File("C:/Users/test/Documents/test-pdf.pdf");
		try
		{
			newFile.createNewFile();
			try
			{
				FileOutputStream pdfFile = new FileOutputStream(newFile);
				pdfFile.write(pdfContent.getBytes(encoding));
				pdfFile.close();
			}
			catch (FileNotFoundException e)
			{
				//
			}
		}
		catch (IOException e)
		{
			//
		}
	}

	public static void main(String[] args)
	{
		PDFWriterDemo pdfwriterdemo = new PDFWriterDemo();
		String pdfcontent = pdfwriterdemo.generateHelloWorldPDF();
		pdfwriterdemo.outputToFile("helloworld.pdf", pdfcontent, "UTF-8");
	}
und damit werden definitiv keine Umlaute angezeigt.
 
T

TheEvilOne

App-Anbieter (In-App)
Versuchs mal mit:
Code:
mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.HELVETICA_BOLD, StandardFonts.WIN_ANSI_ENCODING);
 
M

Madlip

Gast
ich hab exakt das von dir übernommen bekomme aber immer noch nicht das richtige :(

ich denke ich bleib nun bei der anderen Lib. Trotzdem danke das du dir es mal angeschaut hast.
 
T

TheEvilOne

App-Anbieter (In-App)
Ich habe Dein Beispiel nur mal kurz überflogen. Wenn Du willst kann ich es mir am Montag mal am Rechner anschauen.

Wenn Du bei der anderen Lib bleiben willst ist auch okay. Mit der klappt soweit alles?
 
Zuletzt bearbeitet:
M

Madlip

Gast
Ja, mit der anderen lib klappt es wunderbar.

Wenn es dir nichts ausmacht dann wäre es schon cool wenn du da noch einmal drüber schauen könntest.

Kann es sein das ein unterschied macht ob man auf den mac oder win programmiert? Ich programmier auf den mac, wenn ich dann nun das Win Encoding bei setFont eingebe werden die zeichen falsch enkodiert, wenn ich jedoch das Mac Encoding einstelle werden die umlaute nicht angezeigt, sprich es wird nichts falsch enkodiert aber halt auch nichts angezeigt. Was mich halt auch wundert, warum das anscheinend einen unterschied macht, weil das Zielsystem ja das Android-System ist.