Aller au contenu

[Résolu]Itext creation PDF erreur


Niamor

Recommended Posts

Bonsoir, j'essaye de créer un pdf grâce à la librairie Itext, mais j'ai une erreur lorsque je crée le document.

Je n'arrive pas à voir d'où vient l'erreur, j'ai bien mis la permission d'écrire sur la sdcard..

Le logcat :

"02-23 18:51:52.754: ERROR/AndroidRuntime(5582): FATAL EXCEPTION: main

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.elab/com.elab.Pdf}: java.lang.ClassCastException: com.elab.Pdf

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.ActivityThread.access$2300(ActivityThread.java:125)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.os.Handler.dispatchMessage(Handler.java:99)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.os.Looper.loop(Looper.java:123)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.ActivityThread.main(ActivityThread.java:4627)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at java.lang.reflect.Method.invokeNative(Native Method)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at java.lang.reflect.Method.invoke(Method.java:521)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at dalvik.system.NativeStart.main(Native Method)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): Caused by: java.lang.ClassCastException: com.elab.Pdf

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)

02-23 18:51:52.754: ERROR/AndroidRuntime(5582): ... 11 more

et le code :

import java.io.FileOutputStream;
import java.util.Date;

import com.itextpdf.text.Anchor;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chapter;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Section;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;


public class Pdf {
private static String FILE = "/sdcard/pdf/FirstPdf.pdf";
private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18,
		Font.BOLD);
private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,
		Font.NORMAL, BaseColor.RED);
private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16,
		Font.BOLD);
private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,
		Font.BOLD);

public static void main(String[] args) {
	try {
		Document document = new Document();
		PdfWriter.getInstance(document, new FileOutputStream(FILE));
		document.open();
		addMetaData(document);
		addTitlePage(document);
		addContent(document);
		document.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

// iText allows to add metadata to the PDF which can be viewed in your Adobe
// Reader
// under File -> Properties
private static void addMetaData(Document document) {
	document.addTitle("Essai pdf");
	document.addSubject("test iText");
	document.addKeywords("Java, PDF, iText");
	document.addAuthor("Niamor");
	document.addCreator("Niamor");
}

private static void addTitlePage(Document document)
		throws DocumentException {
	Paragraph preface = new Paragraph();
	// We add one empty line
	addEmptyLine(preface, 1);
	// Lets write a big header
	preface.add(new Paragraph("Titre du document", catFont));

	addEmptyLine(preface, 1);
	// Will create: Report generated by: _name, _date
	preface.add(new Paragraph(
			"Rapport généré by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
			smallBold));
	addEmptyLine(preface, 3);
	preface.add(new Paragraph(
			"Ce document blah blah ",
			smallBold));

	addEmptyLine(preface, 8);

	preface.add(new Paragraph(
			"TBlah blah tout ça ",
			redFont));

	document.add(preface);
	// Start a new page
	document.newPage();
}

private static void addContent(Document document) throws DocumentException {
	Anchor anchor = new Anchor("Premier chapitre", catFont);
	anchor.setName("Premier chapitre");

	// Second parameter is the number of the chapter
	Chapter catPart = new Chapter(new Paragraph(anchor), 1);

	Paragraph subPara = new Paragraph("Sous catégorie 1", subFont);
	Section subCatPart = catPart.addSection(subPara);
	subCatPart.add(new Paragraph("Hello"));

	subPara = new Paragraph("Sous catégorie 2", subFont);
	subCatPart = catPart.addSection(subPara);
	subCatPart.add(new Paragraph("Paragraphe 1"));
	subCatPart.add(new Paragraph("Paragraphe 2"));
	subCatPart.add(new Paragraph("Paragraphe 3"));

	// Add a list
	createList(subCatPart);
	Paragraph paragraph = new Paragraph();
	addEmptyLine(paragraph, 5);
	subCatPart.add(paragraph);

	// Add a table
	createTable(subCatPart);

	// Now add all this to the document
	document.add(catPart);

	// Next section
	anchor = new Anchor("Second chapitre", catFont);
	anchor.setName("Second chapitre");

	// Second parameter is the number of the chapter
	catPart = new Chapter(new Paragraph(anchor), 1);

	subPara = new Paragraph("Sous catégorie", subFont);
	subCatPart = catPart.addSection(subPara);
	subCatPart.add(new Paragraph("Document important"));

	// Now add all this to the document
	document.add(catPart);

}

private static void createTable(Section subCatPart)
		throws BadElementException {
	PdfPTable table = new PdfPTable(3);

	// t.setBorderColor(BaseColor.GRAY);
	// t.setPadding(4);
	// t.setSpacing(4);
	// t.setBorderWidth(1);

	PdfPCell c1 = new PdfPCell(new Phrase("Tableau 1"));
	c1.setHorizontalAlignment(Element.ALIGN_CENTER);
	table.addCell(c1);

	c1 = new PdfPCell(new Phrase("Tableau 2"));
	c1.setHorizontalAlignment(Element.ALIGN_CENTER);
	table.addCell(c1);

	c1 = new PdfPCell(new Phrase("Tableau 3"));
	c1.setHorizontalAlignment(Element.ALIGN_CENTER);
	table.addCell(c1);
	table.setHeaderRows(1);

	table.addCell("1.0");
	table.addCell("1.1");
	table.addCell("1.2");
	table.addCell("2.1");
	table.addCell("2.2");
	table.addCell("2.3");

	subCatPart.add(table);

}

private static void createList(Section subCatPart) {
	List list = new List(true, false, 10);
	list.add(new ListItem("Premier point"));
	list.add(new ListItem("Deuxième point"));
	list.add(new ListItem("Troisième point"));
	subCatPart.add(list);
}

private static void addEmptyLine(Paragraph paragraph, int number) {
	for (int i = 0; i < number; i++) {
		paragraph.add(new Paragraph(" "));
	}
}
}

Lien vers le commentaire
Partager sur d’autres sites

il te dit que c'est un class cast exeption avec com.elab.Pdf, donc à un moment tu doit caster un objet en com.elab.Pdf à tord.

Ensuite que viens faire une méthode main dans une classe Android ? Je pense que ton problème viens de la tu dois surement avoir juste repris ton code java sans l'avoir porter en appli Android

Le minimum quand on poste de code c'est de le rendre présentable et lisible en l'indentant correctement et en utilisant les balises codes

Lien vers le commentaire
Partager sur d’autres sites

Désolé, j'étais un peu sur les nerfs quand je t'ai répondu.

Pour info tu dois donc maintenant avoir une activy d'ou tu lances ton traitement, je te conseille d'utilise une asynctask pour lancer ton traitement comme ça tu ne bloquera pas l'appli pendant la génération

Lien vers le commentaire
Partager sur d’autres sites

Je vais tester l'asynctask même si la génération du pdf est l'étape finale de l'appli, donc pas énormement besoin mais je vais voir.

Une dernière question, comment fait-on pour appeler une application tierce (en l'occurrence Acrobat Reader) ?

J'ai regarder le logcat pour voir le nom de l'intent lancé mais sans résultat..

Lien vers le commentaire
Partager sur d’autres sites

  • 5 months later...

et pour lire un PDF qui existe déjà ? par ce que Itext pour créer c'est bien beau , mais pour voir le résultat voila quoi :/

Ou alors faute de rendu juste pouvoir convertir les page du PDF en png ou en html ( je rêve je sais )

j'ai essayer PDF-renderer , nécessite awt qui n'est pas utilisable sous android , j'ai essayé PDFBox , le rendu est horrible c'est illisible à la sortie .

Si quelqu'un connait le moyen de faire PDF - > PNG je suis preneur . En attendant je continu de chercher et je poste si je trouve ; )

merci : )

EDIT : oubliez , le pdf sera vite remplacé par le epub vu la facilité de lecture de ce format .

merci

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...