Разве не было бы неплохо, если бы модель изображений Android черпала вдохновение из Qt? Qt установил, что создание PDF или SVG может быть таким же простым, как перенаправление того же кода, который используется для рисования на экране. Посмотрите на происхождение QPrinter, QSvgGenerator и QWidget из QPaintDevice для шаблона.
Калаф,
1
То же самое в iOS. Генерация PDF встроена.
Фабиан Цейндл
2
Я считаю, что в Kit Kat есть функция для создания PDF, но я не знаю, совместима ли она с предыдущими версиями. Я разместил опцию ниже, и на следующем сайте перечислены несколько опций, от коммерческих до бесплатных: stefan.fenz.at/creating-pdfs-on-android-an-evaluation
IcedDante
5
Смешно, что это было закрыто как "не по теме".
Джо Кодер
2
Почему этот пост был закрыт? Stackoverflow слишком разборчив в своей области применения; Этот вопрос имеет 175 000 просмотров, так как ресурс кодирования на этом сайте должен допускать такие распространенные вещи, как правила, необходимо внести изменения в правила, мы читаем слишком далеко в буквальном тексте «не по теме», а не в самом сердце правила. Я пометил его для повторного открытия, надеюсь, другие тоже проголосуют.
Альберт Реншоу
Ответы:
155
Если кто-то хочет создавать PDF-файлы на устройстве Android, вот как это сделать:
// 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();
Хитрость в создании PDF со сложными функциями заключается в создании фиктивной операции с желаемым макетом XML. Затем вы можете открыть это фиктивное упражнение, программно сделать снимок экрана и преобразовать это изображение в pdf с помощью этой библиотеки . Конечно, существуют ограничения, такие как невозможность прокрутки, не более одной страницы, но для ограниченного приложения это быстро и просто. Надеюсь, это кому-нибудь поможет!
Этот комментарий указывает мне правильное направление. Однако: 1. Вам не нужно начинать действие, чтобы сделать снимок экрана! вы можете просто накачать макет xml во время выполнения и преобразовать его в растровое изображение, как предложено здесь ; При этом вы можете создать несколько страниц с разным макетом. Прокрутка не поддерживается, как говорится, но вы можете реализовать список, используя, например, линейный макет.
р.педроса
11
Нелегко найти полное решение проблемы преобразования произвольного HTML в PDF с неанглийскими буквами в Android. Я проверяю это для русских букв Unicode.
Мы используем три библиотеки:
(1) Jsoup (jsoup-1.7.3.jar) для преобразования из HTML в XHTML,
Сложной проблемой является отображение русских букв в PDF с помощью библиотеки iTextPDF XMLWorker. Для этого нам нужно создать собственную реализацию интерфейса FontProvider:
Обновление Я сам попробовал библиотеку. Работает нормально с простыми поколениями pdf (предоставляет методы для добавления текста, линий, прямоугольников, растровых изображений, шрифтов). Единственная проблема заключается в том, что созданный PDF-файл хранится в строке в памяти, это может вызвать проблемы с памятью в больших документах.
Может кто-нибудь сказать мне, что Android PDF Writer не может сделать, что может "itext"?
М. Усман Хан
1
Не поддерживается! Последнее обновление: 2015-12-14
Махди Алхатиб,
2
PDFJet предлагает версию своей библиотеки с открытым исходным кодом, которая должна быть в состоянии справиться с любой базовой задачей создания PDF. Это чисто Java-решение, и оно заявлено совместимым с Android. Существует коммерческая версия с некоторыми дополнительными функциями, которая не кажется слишком дорогой.
Поздно, но актуально для запроса и, надеюсь, полезно. Если вы используете внешнюю службу (как предложено в ответе CommonsWare), то у Docmosis есть облачная служба, которая может помочь - перенести обработку в облачную службу, которая выполняет тяжелую обработку. Такой подход идеален в некоторых обстоятельствах, но, конечно, полагается на подключение к сети.
Вы также можете использовать библиотеку PoDoFo . Основная цель заключается в том, чтобы оно публиковалось под LGPL. Поскольку он написан на C ++, вы должны кросс-компилировать его, используя NDK, и написать C-side и Java-оболочку. Некоторые из сторонних библиотек могут быть использованы из проекта OpenCV . Также в проекте OpenCV U можно найти android.toolchain.cmakeфайл, который поможет вам с генерацией Makefile.
Ответы:
Если кто-то хочет создавать PDF-файлы на устройстве Android, вот как это сделать:
источник
Если вы разрабатываете для устройств с уровнем API 19 или выше, вы можете использовать встроенный PrintedPdfDocument: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
источник
Хитрость в создании PDF со сложными функциями заключается в создании фиктивной операции с желаемым макетом XML. Затем вы можете открыть это фиктивное упражнение, программно сделать снимок экрана и преобразовать это изображение в pdf с помощью этой библиотеки . Конечно, существуют ограничения, такие как невозможность прокрутки, не более одной страницы, но для ограниченного приложения это быстро и просто. Надеюсь, это кому-нибудь поможет!
источник
Нелегко найти полное решение проблемы преобразования произвольного HTML в PDF с неанглийскими буквами в Android. Я проверяю это для русских букв Unicode.
Мы используем три библиотеки:
(1) Jsoup (jsoup-1.7.3.jar) для преобразования из HTML в XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
Сложной проблемой является отображение русских букв в PDF с помощью библиотеки iTextPDF XMLWorker. Для этого нам нужно создать собственную реализацию интерфейса FontProvider:
Здесь мы используем стандартный шрифт Android Droid Sans, который находится в системной папке:
источник
Немного опоздал, и я еще не тестировал его сам, но другая библиотека под лицензией BSD - Android PDF Writer .
Обновление Я сам попробовал библиотеку. Работает нормально с простыми поколениями pdf (предоставляет методы для добавления текста, линий, прямоугольников, растровых изображений, шрифтов). Единственная проблема заключается в том, что созданный PDF-файл хранится в строке в памяти, это может вызвать проблемы с памятью в больших документах.
источник
PDFJet предлагает версию своей библиотеки с открытым исходным кодом, которая должна быть в состоянии справиться с любой базовой задачей создания PDF. Это чисто Java-решение, и оно заявлено совместимым с Android. Существует коммерческая версия с некоторыми дополнительными функциями, которая не кажется слишком дорогой.
источник
Поздно, но актуально для запроса и, надеюсь, полезно. Если вы используете внешнюю службу (как предложено в ответе CommonsWare), то у Docmosis есть облачная служба, которая может помочь - перенести обработку в облачную службу, которая выполняет тяжелую обработку. Такой подход идеален в некоторых обстоятельствах, но, конечно, полагается на подключение к сети.
источник
Вы также можете использовать библиотеку PoDoFo . Основная цель заключается в том, чтобы оно публиковалось под LGPL. Поскольку он написан на C ++, вы должны кросс-компилировать его, используя NDK, и написать C-side и Java-оболочку. Некоторые из сторонних библиотек могут быть использованы из проекта OpenCV . Также в проекте OpenCV U можно найти
android.toolchain.cmake
файл, который поможет вам с генерациейMakefile
.источник