Czy nie byłoby miło, gdyby model obrazowania Androida czerpał inspirację z Qt? Qt ustalił, że generowanie plików PDF lub SVG może być tak proste, jak przekierowanie tego samego kodu, którego używa się do rysowania na ekranie. Spójrz na pochodzenie QPrinter, QSvgGenerator i QWidget z QPaintDevice dla wzorca.
Calaf
1
To samo w iOS. Generowanie plików PDF jest wbudowane.
Fabian Zeindl
2
Uważam, że Kit Kat ma funkcję generowania plików PDF, ale nie wiem, czy jest to kompatybilne wstecz. Poniżej zamieściłem opcję, a na poniższej stronie wymieniono kilka opcji, od komercyjnych do bezpłatnych: stefan.fenz.at/creating-pdfs-on-android-an-evaluation
IcedDante
5
Śmieszne, że to zostało zamknięte jako „nie na temat”.
Joe Coder
2
Dlaczego ten wpis został zamknięty? Stackoverflow jest zbyt wybredny, jeśli chodzi o zakres; to pytanie ma 175 000 odsłon, ponieważ jako źródło kodowania, ta witryna powinna umożliwiać takie hiper-powszechne rzeczy, zasady wymagają zmiany, czytamy o wiele za daleko w dosłownym tekście tego, co jest „nie na temat”, a nie w sercu reguły. Zgłosiłem to do ponownego otwarcia, mam nadzieję, że inni też będą głosować.
Albert Renshaw
Odpowiedzi:
155
Jeśli ktoś chce generować pliki PDF na urządzeniu z Androidem, oto jak to zrobić:
// 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();
Sztuczka tworzenia pliku PDF ze złożonymi funkcjami polega na wykonaniu fikcyjnej czynności z pożądanym układem XML. Następnie możesz otworzyć tę fikcyjną czynność, zrobić zrzut ekranu programowo i przekonwertować ten obraz do formatu PDF za pomocą tej biblioteki . Oczywiście istnieją ograniczenia, takie jak brak możliwości przewijania, nie więcej niż jedna strona, ale w przypadku ograniczonej aplikacji jest to szybkie i łatwe. Mam nadzieję, że to komuś pomoże!
Ten komentarz wskazuje mi właściwy kierunek. Jednak: 1. nie musisz rozpoczynać działania, aby zrobić zrzut ekranu! możesz po prostu nadmuchać układ XML w czasie wykonywania i przekonwertować go na bitmapę, jak sugerowano tutaj ; Mając to na uwadze, możesz wygenerować wiele stron z różnymi układami. Przewijanie nie jest obsługiwane, jak powiedziano, ale możesz zaimplementować listę, używając na przykład układu liniowego.
r.pedrosa
11
Nie jest łatwo znaleźć pełne rozwiązanie problemu konwersji dowolnego kodu HTML na PDF z nieanglojęzycznymi literami w systemie Android. Testuję go pod kątem rosyjskich liter Unicode.
Korzystamy z trzech bibliotek:
(1) Jsoup (jsoup-1.7.3.jar) do konwersji z HTML do XHTML,
Trudnym problemem jest wyświetlanie rosyjskich liter w formacie PDF przy użyciu biblioteki iTextPDF XMLWorker. W tym celu powinniśmy stworzyć własną implementację interfejsu FontProvider:
Aktualizacja Sam wypróbowałem bibliotekę. Działa dobrze z prostymi generacjami PDF (zapewnia metody dodawania tekstu, linii, prostokątów, bitmap, czcionek). Jedynym problemem jest to, że wygenerowany plik PDF jest przechowywany w pamięci w postaci ciągu, co może powodować problemy z pamięcią w dużych dokumentach.
Czy ktoś może mi powiedzieć, czego nie potrafi program Android PDF Writer, a może „itext”?
M. Usman Khan
1
Nie utrzymywane !! Ostatnia aktualizacja:
2015-12-14
2
PDFJet oferuje otwartą wersję swojej biblioteki, która powinna być w stanie obsłużyć każde podstawowe zadanie generowania plików PDF. Jest to rozwiązanie oparte wyłącznie na Javie i jest zgodne z systemem Android. Dostępna jest wersja komercyjna z kilkoma dodatkowymi funkcjami, która nie wydaje się być zbyt droga.
Spóźniony, ale odpowiedni do prośby i mam nadzieję, że pomocny. Jeśli korzystasz z usługi zewnętrznej (jak sugeruje odpowiedź CommonsWare), Docmosis ma usługę w chmurze, która może pomóc - przeniesienie przetwarzania do usługi w chmurze, która wykonuje ciężkie przetwarzanie. Takie podejście jest idealne w niektórych okolicznościach, ale oczywiście polega na połączeniu z siecią.
Możesz również skorzystać z biblioteki PoDoFo . Głównym celem jest opublikowanie go na licencji LGPL. Ponieważ jest napisany w C ++, powinieneś skompilować go krzyżowo przy użyciu NDK i napisać opakowanie po stronie C i Java. Niektóre biblioteki innych firm mogą być używane z projektu OpenCV . Również w projekcie OpenCV U możesz znaleźć android.toolchain.cmakeplik, który pomoże Ci w wygenerowaniu Makefile.
Odpowiedzi:
Jeśli ktoś chce generować pliki PDF na urządzeniu z Androidem, oto jak to zrobić:
źródło
Jeśli tworzysz dla urządzeń z poziomem API 19 lub wyższym, możesz skorzystać z wbudowanego PrintedPdfDocument: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
źródło
Sztuczka tworzenia pliku PDF ze złożonymi funkcjami polega na wykonaniu fikcyjnej czynności z pożądanym układem XML. Następnie możesz otworzyć tę fikcyjną czynność, zrobić zrzut ekranu programowo i przekonwertować ten obraz do formatu PDF za pomocą tej biblioteki . Oczywiście istnieją ograniczenia, takie jak brak możliwości przewijania, nie więcej niż jedna strona, ale w przypadku ograniczonej aplikacji jest to szybkie i łatwe. Mam nadzieję, że to komuś pomoże!
źródło
Nie jest łatwo znaleźć pełne rozwiązanie problemu konwersji dowolnego kodu HTML na PDF z nieanglojęzycznymi literami w systemie Android. Testuję go pod kątem rosyjskich liter Unicode.
Korzystamy z trzech bibliotek:
(1) Jsoup (jsoup-1.7.3.jar) do konwersji z HTML do XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
Trudnym problemem jest wyświetlanie rosyjskich liter w formacie PDF przy użyciu biblioteki iTextPDF XMLWorker. W tym celu powinniśmy stworzyć własną implementację interfejsu FontProvider:
Tutaj używamy standardowej czcionki Android Droid Sans, która znajduje się w folderze systemowym:
źródło
Trochę późno i jeszcze tego nie testowałem, ale inną biblioteką, która jest na licencji BSD, jest Android PDF Writer .
Aktualizacja Sam wypróbowałem bibliotekę. Działa dobrze z prostymi generacjami PDF (zapewnia metody dodawania tekstu, linii, prostokątów, bitmap, czcionek). Jedynym problemem jest to, że wygenerowany plik PDF jest przechowywany w pamięci w postaci ciągu, co może powodować problemy z pamięcią w dużych dokumentach.
źródło
PDFJet oferuje otwartą wersję swojej biblioteki, która powinna być w stanie obsłużyć każde podstawowe zadanie generowania plików PDF. Jest to rozwiązanie oparte wyłącznie na Javie i jest zgodne z systemem Android. Dostępna jest wersja komercyjna z kilkoma dodatkowymi funkcjami, która nie wydaje się być zbyt droga.
źródło
Spóźniony, ale odpowiedni do prośby i mam nadzieję, że pomocny. Jeśli korzystasz z usługi zewnętrznej (jak sugeruje odpowiedź CommonsWare), Docmosis ma usługę w chmurze, która może pomóc - przeniesienie przetwarzania do usługi w chmurze, która wykonuje ciężkie przetwarzanie. Takie podejście jest idealne w niektórych okolicznościach, ale oczywiście polega na połączeniu z siecią.
źródło
Możesz również skorzystać z biblioteki PoDoFo . Głównym celem jest opublikowanie go na licencji LGPL. Ponieważ jest napisany w C ++, powinieneś skompilować go krzyżowo przy użyciu NDK i napisać opakowanie po stronie C i Java. Niektóre biblioteki innych firm mogą być używane z projektu OpenCV . Również w projekcie OpenCV U możesz znaleźć
android.toolchain.cmake
plik, który pomoże Ci w wygenerowaniuMakefile
.źródło