Ne serait-il pas agréable que le modèle d'imagerie d'Android s'inspire de celui de Qt? Qt a établi que la génération de PDF ou SVG peut être aussi simple que de rediriger le même code que celui utilisé pour dessiner sur l'écran. Regardez la dérivation de QPrinter, QSvgGenerator et QWidget de QPaintDevice pour le modèle.
Calaf
1
Idem sous iOS. La génération PDF est intégrée.
Fabian Zeindl
2
Je pense que Kit Kat a une fonctionnalité pour générer des PDF, mais je ne sais pas si cela est rétrocompatible. J'ai publié une option ci-dessous et le site suivant répertorie plusieurs options allant du commercial au gratuit: stefan.fenz.at/creating-pdfs-on-android-an-evaluation
IcedDante
5
Ridicule que cela ait été fermé comme "hors sujet".
Joe Coder
2
Pourquoi ce message a-t-il été fermé? Stackoverflow est beaucoup trop pointilleux sur sa portée; cette question a 175 000 vues, en tant que ressource de codage ce site devrait permettre des choses hyper-courantes comme celle-ci, les règles doivent être modifiées, nous lisons beaucoup trop loin dans le texte littéral de ce qui est "hors sujet" plutôt que le cœur de la règle. Je l'ai signalé pour sa réouverture, j'espère que d'autres voteront également.
Albert Renshaw
Réponses:
155
Si quelqu'un souhaite générer des PDF sur un appareil Android, voici comment le faire:
// open a new documentPrintedPdfDocument document =newPrintedPdfDocument(context,
printAttributes);// start a pagePage page = document.startPage(0);// draw something on the pageView content = getContentView();
content.draw(page.getCanvas());// finish the page
document.finishPage(page);...// add more pages...// write the document content
document.writeTo(getOutputStream());//close the document
document.close();
Une astuce pour créer un PDF avec des fonctionnalités complexes consiste à créer une activité factice avec la mise en page XML souhaitée. Vous pouvez ensuite ouvrir cette activité factice, prendre une capture d'écran par programme et convertir cette image en pdf à l'aide de cette bibliothèque . Bien sûr, il y a des limitations telles que ne pas pouvoir faire défiler, pas plus d'une page, mais pour une application limitée, c'est rapide et facile. J'espère que cela aide quelqu'un!
travaillé pour moi. était une mise en œuvre simple.
TharakaNirmana
c'est une solution de contournement cool
Kumar Saurabh
Ce commentaire m'indique dans la bonne direction. Cependant: 1. vous n'avez pas besoin de démarrer une activité pour prendre une capture d'écran! vous pouvez simplement gonfler une mise en page XML lors de l'exécution et la convertir en une image bitmap comme suggéré ici ; Cela étant dit, vous pouvez générer plusieurs pages avec des mises en page différentes. Le défilement n'est pas pris en charge comme dit mais vous pouvez implémenter une liste en utilisant, par exemple, une mise en page linéaire.
r.pedrosa
11
Il n'est pas facile de trouver une solution complète au problème de la conversion d'un HTML arbitraire en PDF avec des lettres non anglaises sous Android. Je le teste pour les lettres unicode russes.
Nous utilisons trois bibliothèques:
(1) Jsoup (jsoup-1.7.3.jar) pour une conversion de HTML vers XHTML,
Le problème difficile est d'afficher les lettres russes au format PDF en utilisant la bibliothèque iTextPDF XMLWorker. Pour cela, nous devons créer notre propre implémentation de l'interface FontProvider:
Merci pour votre part! J'ai une question: pourrions-nous appliquer une règle CSS au HTML?
Phuong
6
Un peu tard et je ne l'ai pas encore testé moi-même mais une autre bibliothèque sous licence BSD est Android PDF Writer .
Mise à jour J'ai moi-même essayé la bibliothèque. Fonctionne bien avec les générations PDF simples (il fournit des méthodes pour ajouter du texte, des lignes, des rectangles, des bitmaps, des polices). Le seul problème est que le PDF généré est stocké dans une chaîne en mémoire, cela peut provoquer des problèmes de mémoire dans les documents volumineux.
Quelqu'un peut-il me dire ce que Android PDF Writer ne peut pas faire, que "itext" peut?
M. Usman Khan
1
Non entretenu !! Dernière mise à jour: 14/12/2015
Mahdi Alkhatib
2
PDFJet propose une version open source de sa bibliothèque qui devrait être capable de gérer n'importe quelle tâche de base de génération de PDF. C'est une solution purement basée sur Java et il est déclaré compatible avec Android. Il existe une version commerciale avec quelques fonctionnalités supplémentaires qui ne semblent pas trop chères.
En retard, mais pertinent à la demande et, espérons-le, utile. Si vous utilisez un service externe (comme suggéré dans la réponse de CommonsWare ), Docmosis dispose d'un service cloud qui pourrait vous aider - en déchargeant le traitement vers un service cloud qui effectue le traitement intensif . Cette approche est idéale dans certaines circonstances, mais repose bien sûr sur la connexion au réseau.
Vous pouvez également utiliser la bibliothèque PoDoFo . L'objectif principal est qu'il soit publié sous LGPL. Comme il est écrit en C ++, vous devez le compiler de manière croisée en utilisant NDK et écrire un wrapper côté C et Java. Certaines bibliothèques tierces peuvent être utilisées à partir d'un projet OpenCV . Également dans le projet OpenCV, vous pouvez trouver un android.toolchain.cmakefichier, qui vous aidera à générer Makefile.
Réponses:
Si quelqu'un souhaite générer des PDF sur un appareil Android, voici comment le faire:
la source
Si vous développez pour des appareils avec le niveau d'API 19 ou supérieur, vous pouvez utiliser le PrintedPdfDocument intégré: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
la source
Une astuce pour créer un PDF avec des fonctionnalités complexes consiste à créer une activité factice avec la mise en page XML souhaitée. Vous pouvez ensuite ouvrir cette activité factice, prendre une capture d'écran par programme et convertir cette image en pdf à l'aide de cette bibliothèque . Bien sûr, il y a des limitations telles que ne pas pouvoir faire défiler, pas plus d'une page, mais pour une application limitée, c'est rapide et facile. J'espère que cela aide quelqu'un!
la source
Il n'est pas facile de trouver une solution complète au problème de la conversion d'un HTML arbitraire en PDF avec des lettres non anglaises sous Android. Je le teste pour les lettres unicode russes.
Nous utilisons trois bibliothèques:
(1) Jsoup (jsoup-1.7.3.jar) pour une conversion de HTML vers XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
Le problème difficile est d'afficher les lettres russes au format PDF en utilisant la bibliothèque iTextPDF XMLWorker. Pour cela, nous devons créer notre propre implémentation de l'interface FontProvider:
Ici, nous utilisons la police Android standard Droid Sans, qui se trouve dans le dossier système:
la source
Un peu tard et je ne l'ai pas encore testé moi-même mais une autre bibliothèque sous licence BSD est Android PDF Writer .
Mise à jour J'ai moi-même essayé la bibliothèque. Fonctionne bien avec les générations PDF simples (il fournit des méthodes pour ajouter du texte, des lignes, des rectangles, des bitmaps, des polices). Le seul problème est que le PDF généré est stocké dans une chaîne en mémoire, cela peut provoquer des problèmes de mémoire dans les documents volumineux.
la source
PDFJet propose une version open source de sa bibliothèque qui devrait être capable de gérer n'importe quelle tâche de base de génération de PDF. C'est une solution purement basée sur Java et il est déclaré compatible avec Android. Il existe une version commerciale avec quelques fonctionnalités supplémentaires qui ne semblent pas trop chères.
la source
En retard, mais pertinent à la demande et, espérons-le, utile. Si vous utilisez un service externe (comme suggéré dans la réponse de CommonsWare ), Docmosis dispose d'un service cloud qui pourrait vous aider - en déchargeant le traitement vers un service cloud qui effectue le traitement intensif . Cette approche est idéale dans certaines circonstances, mais repose bien sûr sur la connexion au réseau.
la source
Vous pouvez également utiliser la bibliothèque PoDoFo . L'objectif principal est qu'il soit publié sous LGPL. Comme il est écrit en C ++, vous devez le compiler de manière croisée en utilisant NDK et écrire un wrapper côté C et Java. Certaines bibliothèques tierces peuvent être utilisées à partir d'un projet OpenCV . Également dans le projet OpenCV, vous pouvez trouver un
android.toolchain.cmake
fichier, qui vous aidera à générerMakefile
.la source