Niamor Posté(e) 23 février 2011 Share Posté(e) 23 février 2011 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 More sharing options...
moritan Posté(e) 23 février 2011 Share Posté(e) 23 février 2011 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 More sharing options...
Niamor Posté(e) 23 février 2011 Auteur Share Posté(e) 23 février 2011 Oui pardon pour la présentation du code. Ca fonctionne, c'est sur que si j'adapte pas le code pour android ca risque pas de marcher.. Merci pour la réponse. Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 23 février 2011 Share Posté(e) 23 février 2011 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 More sharing options...
Niamor Posté(e) 23 février 2011 Auteur Share Posté(e) 23 février 2011 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 More sharing options...
merirosvo Posté(e) 8 août 2011 Share Posté(e) 8 août 2011 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.