Wäre es nicht schön, wenn sich das Imaging-Modell von Android von Qt inspirieren lassen würde? Qt stellte fest, dass das Generieren von PDF oder SVG so einfach sein kann wie das Umleiten des gleichen Codes, den man zum Zeichnen auf dem Bildschirm verwendet. Schauen Sie sich die Ableitung von QPrinter, QSvgGenerator und QWidget von QPaintDevice für das Muster an.
Calaf
1
Gleiches gilt für iOS. Die PDF-Generierung ist integriert.
Fabian Zeindl
2
Ich glaube, Kit Kat hat eine Funktion zum Generieren von PDF, aber ich weiß nicht, ob dies abwärtskompatibel ist. Ich habe eine Option unten gepostet und die folgende Seite listet verschiedene Optionen auf, die von kommerziell bis kostenlos reichen: stefan.fenz.at/creating-pdfs-on-android-an-evaluation
IcedDante
5
Lächerlich, dass dies als "Off-Topic" geschlossen wurde.
Joe Coder
2
Warum wurde dieser Beitrag geschlossen? Stackoverflow ist in Bezug auf den Umfang viel zu wählerisch. Diese Frage hat 175.000 Aufrufe. Als Codierungsressource sollte diese Site häufig vorkommende Dinge wie diese zulassen. Die Regeln müssen geändert werden. Wir lesen viel zu weit in den wörtlichen Text dessen, was "nicht zum Thema" gehört, und nicht in das Herzstück der Regel. Ich habe es für die Wiedereröffnung markiert, hoffe, dass auch andere abstimmen werden.
Albert Renshaw
Antworten:
155
Wenn jemand PDFs auf einem Android-Gerät erstellen möchte, gehen Sie wie folgt vor:
// 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();
Schließlich ist es Teil von Android als Teil von iOS.
Lalitm
5
@ Chris623 Ich denke du meintest "KitKat" ... :)
Android Entwickler
7
@lalitm Es ist nicht so wie es in ios ist. In iOS generiertes PDF enthält auswählbaren Text, der in doc geschrieben ist. Aber in Android ist es ein Bild.
Kantesh
2
@ WillThomson Sollte dein GitHub-Link dieser oder etwas anderes sein?
Ein Trick, um ein PDF mit komplexen Funktionen zu erstellen, besteht darin, eine Dummy-Aktivität mit dem gewünschten XML-Layout zu erstellen. Sie können diese Dummy-Aktivität dann öffnen, programmgesteuert einen Screenshot erstellen und dieses Bild mithilfe dieser Bibliothek in PDF konvertieren . Natürlich gibt es Einschränkungen, z. B. nicht mehr als eine Seite scrollen zu können, aber für eine eingeschränkte Anwendung ist dies schnell und einfach. Hoffe das hilft jemandem!
arbeitete für mich. war eine einfache Implementierung.
TharakaNirmana
das ist eine coole Problemumgehung
Kumar Saurabh
Dieser Kommentar weist mich in die richtige Richtung. Allerdings: 1. Sie müssen keine Aktivität starten, um einen Screenshot zu machen! Sie können einfach ein XML-Layout zur Laufzeit aufblasen und es in eine Bitmap konvertieren, wie hier vorgeschlagen . Sie können jedoch mehrere Seiten mit unterschiedlichen Layouts erstellen. Scrollen wird nicht wie gesagt unterstützt, aber Sie können eine Liste implementieren, indem Sie beispielsweise ein lineares Layout verwenden.
r.pedrosa
11
Es ist nicht einfach, eine vollständige Lösung für das Problem der Konvertierung eines beliebigen HTML-Codes in PDF mit nicht englischen Buchstaben in Android zu finden. Ich teste es auf russische Unicode-Buchstaben.
Wir verwenden drei Bibliotheken:
(1) Jsoup (jsoup-1.7.3.jar) für eine Konvertierung von HTML nach XHTML,
Das schwierige Problem besteht darin, russische Buchstaben mithilfe der iTextPDF XMLWorker-Bibliothek in PDF anzuzeigen. Dazu sollten wir unsere eigene Implementierung der FontProvider-Schnittstelle erstellen:
Vielen Dank für Ihren Anteil! Ich habe eine Frage: Können wir eine CSS-Regel auf HTML anwenden?
Phuong
6
Ein bisschen spät und ich habe es noch nicht selbst getestet, aber eine andere Bibliothek, die unter der BSD-Lizenz steht, ist Android PDF Writer .
Update Ich habe die Bibliothek selbst ausprobiert. Funktioniert gut mit einfachen PDF-Generationen (es bietet Methoden zum Hinzufügen von Text, Linien, Rechtecken, Bitmaps, Schriftarten). Das einzige Problem besteht darin, dass die generierte PDF-Datei in einem String im Speicher gespeichert wird. Dies kann bei großen Dokumenten zu Speicherproblemen führen.
Kann mir jemand sagen, was Android PDF Writer nicht kann, was "itext" kann?
M. Usman Khan
1
Nicht gepflegt !! Letzte Aktualisierung: 2015-12-14
Mahdi Alkhatib
2
PDFJet bietet eine Open-Source-Version ihrer Bibliothek, die alle grundlegenden Aufgaben zur PDF-Generierung ausführen kann. Es handelt sich um eine rein Java-basierte Lösung, die mit Android kompatibel sein soll. Es gibt eine kommerzielle Version mit einigen zusätzlichen Funktionen, die nicht zu teuer erscheinen.
Spät, aber relevant auf Anfrage und hoffentlich hilfreich. Wenn Sie einen externen Dienst verwenden (wie in der Antwort von CommonsWare vorgeschlagen), verfügt Docmosis über einen Cloud-Dienst, der möglicherweise hilfreich ist - das Auslagern der Verarbeitung auf einen Cloud-Dienst, der die umfangreiche Verarbeitung ausführt . Dieser Ansatz ist unter bestimmten Umständen ideal, hängt jedoch natürlich von einer Netzverbindung ab.
Sie können auch die PoDoFo- Bibliothek verwenden. Das Hauptziel ist, dass es unter LGPL veröffentlicht wird. Da es in C ++ geschrieben ist, sollten Sie es mit NDK überkompilieren und C-seitigen und Java-Wrapper schreiben. Einige Bibliotheken von Drittanbietern können aus dem OpenCV- Projekt verwendet werden. Auch im OpenCV-Projekt U finden Sie android.toolchain.cmakeDateien, die Ihnen beim Generieren helfen Makefile.
Antworten:
Wenn jemand PDFs auf einem Android-Gerät erstellen möchte, gehen Sie wie folgt vor:
quelle
Wenn Sie für Geräte mit API-Level 19 oder höher entwickeln, können Sie das integrierte PrintedPdfDocument verwenden: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
quelle
Ein Trick, um ein PDF mit komplexen Funktionen zu erstellen, besteht darin, eine Dummy-Aktivität mit dem gewünschten XML-Layout zu erstellen. Sie können diese Dummy-Aktivität dann öffnen, programmgesteuert einen Screenshot erstellen und dieses Bild mithilfe dieser Bibliothek in PDF konvertieren . Natürlich gibt es Einschränkungen, z. B. nicht mehr als eine Seite scrollen zu können, aber für eine eingeschränkte Anwendung ist dies schnell und einfach. Hoffe das hilft jemandem!
quelle
Es ist nicht einfach, eine vollständige Lösung für das Problem der Konvertierung eines beliebigen HTML-Codes in PDF mit nicht englischen Buchstaben in Android zu finden. Ich teste es auf russische Unicode-Buchstaben.
Wir verwenden drei Bibliotheken:
(1) Jsoup (jsoup-1.7.3.jar) für eine Konvertierung von HTML nach XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
Das schwierige Problem besteht darin, russische Buchstaben mithilfe der iTextPDF XMLWorker-Bibliothek in PDF anzuzeigen. Dazu sollten wir unsere eigene Implementierung der FontProvider-Schnittstelle erstellen:
Hier verwenden wir die Standard-Android-Schriftart Droid Sans, die sich im Systemordner befindet:
quelle
Ein bisschen spät und ich habe es noch nicht selbst getestet, aber eine andere Bibliothek, die unter der BSD-Lizenz steht, ist Android PDF Writer .
Update Ich habe die Bibliothek selbst ausprobiert. Funktioniert gut mit einfachen PDF-Generationen (es bietet Methoden zum Hinzufügen von Text, Linien, Rechtecken, Bitmaps, Schriftarten). Das einzige Problem besteht darin, dass die generierte PDF-Datei in einem String im Speicher gespeichert wird. Dies kann bei großen Dokumenten zu Speicherproblemen führen.
quelle
PDFJet bietet eine Open-Source-Version ihrer Bibliothek, die alle grundlegenden Aufgaben zur PDF-Generierung ausführen kann. Es handelt sich um eine rein Java-basierte Lösung, die mit Android kompatibel sein soll. Es gibt eine kommerzielle Version mit einigen zusätzlichen Funktionen, die nicht zu teuer erscheinen.
quelle
Spät, aber relevant auf Anfrage und hoffentlich hilfreich. Wenn Sie einen externen Dienst verwenden (wie in der Antwort von CommonsWare vorgeschlagen), verfügt Docmosis über einen Cloud-Dienst, der möglicherweise hilfreich ist - das Auslagern der Verarbeitung auf einen Cloud-Dienst, der die umfangreiche Verarbeitung ausführt . Dieser Ansatz ist unter bestimmten Umständen ideal, hängt jedoch natürlich von einer Netzverbindung ab.
quelle
Sie können auch die PoDoFo- Bibliothek verwenden. Das Hauptziel ist, dass es unter LGPL veröffentlicht wird. Da es in C ++ geschrieben ist, sollten Sie es mit NDK überkompilieren und C-seitigen und Java-Wrapper schreiben. Einige Bibliotheken von Drittanbietern können aus dem OpenCV- Projekt verwendet werden. Auch im OpenCV-Projekt U finden Sie
android.toolchain.cmake
Dateien, die Ihnen beim Generieren helfenMakefile
.quelle