Есть ли способ создать PDF-файлы из приложения для Android?Как создать PDF-файлы в приложении для Android?
ответ
Если кто-то хочет создать PDF-файлы на Android устройства, вот как это сделать:
- http://sourceforge.net/projects/itext/ (библиотека)
- http://www.vogella.de/articles/JavaPDF/article.html (учебник)
- http://tutorials.jenkov.com/java-itext/image.html (изображения учебник)
Только проблема с iText заключается в том, что это лицензия GPLv3, или вы должны приобрести коммерческую лицензию. –
и более ранние версии iText имеют некоторые недостающие зависимости, такие как java.awt.Color, которые dalvik не поддерживает –
@ kape123 приятное чувство юмора :-) –
Поздно, но актуально для запроса и, надеюсь, полезно. Если используется внешняя служба (как предложено в ответе CommonsWare), то Docmosis имеет облачную службу, которая может помочь - перегрузка обработки на облачную службу, которая выполняет тяжелую обработку. Этот подход идеален в некоторых обстоятельствах, но, конечно, полагается на то, что он подключен к сети.
Если вы разрабатываете для устройств с уровнем API 19 или выше, вы можете использовать встроенный в PrintedPdfDocument: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
// open a new document
PrintedPdfDocument document = new PrintedPdfDocument(context,
printAttributes);
// start a page
Page page = document.startPage(0);
// draw something on the page
View 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();
U можно также использовать PoDoFo библиотеку. Главная цель - опубликовать ее под LGPL. Поскольку он написан на C++, вы должны перекрестно скомпилировать его с помощью NDK и написать C-side и Java wrapper. Некоторые из сторонних библиотек могут использоваться из проекта OpenCV. Также в проекте OpenCV U можно найти файл android.toolchain.cmake
, который поможет вам сгенерировать Makefile
.
PDFJet предлагает версию своей библиотеки openSource, которая должна иметь возможность обрабатывать любую основную задачу создания PDF-файлов. Это чисто Java-решение, и, как утверждается, оно совместимо с Android. Существует коммерческая версия с некоторыми дополнительными функциями, которые не выглядят слишком дорогостоящими.
Нелегко найти полное решение проблемы конвертации произвольного HTML в PDF с неанглийскими буквами в Android. Я проверяю его на русские буквы в Юникоде.
Мы используем три библиотеки:
(1) Jsoup (jsoup-1.7.3.jar) для конвертации из HTML в XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
public boolean createPDF(String rawHTML, String fileName, ContextWrapper context){
final String APPLICATION_PACKAGE_NAME = context.getBaseContext().getPackageName();
File path = new File(Environment.getExternalStorageDirectory(), APPLICATION_PACKAGE_NAME);
if (!path.exists()){ path.mkdir(); }
File file = new File(path, fileName);
try{
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
// Подготавливаем HTML
String htmlText = Jsoup.clean(rawHTML, Whitelist.relaxed());
InputStream inputStream = new ByteArrayInputStream(htmlText.getBytes());
// Печатаем документ PDF
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
inputStream, null, Charset.defaultCharset(), new MyFont());
document.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (DocumentException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
Сложная проблема заключается в том, чтобы отображать русские буквы в формате PDF с использованием библиотеки iTWeff XMLWorker. Для этого мы должны создать собственную реализацию интерфейса FontProvider:
public class MyFont implements FontProvider{
private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";
private static final String FONT_ALIAS = "my_font";
public MyFont(){ FontFactory.register(FONT_PATH, FONT_ALIAS); }
@Override
public Font getFont(String fontname, String encoding, boolean embedded,
float size, int style, BaseColor color){
return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H,
BaseFont.EMBEDDED, size, style, color);
}
@Override
public boolean isRegistered(String name) { return name.equals(FONT_ALIAS); }
}
Здесь мы используем стандартный Android шрифт Droid Sans, который находится в системной папке:
private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";
Спасибо за ваша доля! У меня есть вопрос: можно ли применить любое правило CSS к HTML? – Phuong
Немного поздно, и у меня есть еще не тестировал его, но еще одна библиотека, которая находится под номером BSD license, - Android PDF Writer.
Обновление Я сам пробовал библиотеку.Работает нормально с простыми поколениями pdf (он предоставляет методы для добавления текста, строк, прямоугольников, растровых изображений, шрифтов). Единственная проблема заключается в том, что сгенерированный PDF-файл хранится в строке в памяти, это может вызвать проблемы с памятью в больших документах.
Может ли кто-нибудь сказать мне, что Android PDF Writer не может сделать, что «itext» может? – usman
Трюк для создания PDF со сложными функциями заключается в создании фиктивной активности с желаемым расположением xml. Затем вы можете открыть эту фиктивную активность, взять screenshot programmatically и преобразовать это изображение в pdf с помощью this library. Конечно, есть ограничения, такие как невозможность прокрутки, не более одной страницы, но для ограниченного применения это быстро и просто. Надеюсь, это поможет кому-то!
Это заслуженный atleast 1up. –
работал для меня. была простой реализацией. – TharakaNirmana
Это круто обходное решение –
- 1. Как создать .exe в приложении для Android?
- 2. Как создать календарь в приложении для Android
- 3. Создать ярлык в приложении для Android PhoneGap
- 4. Android - Как создать напоминание/будильник в приложении
- 5. Как создать несколько профилей в приложении Android?
- 6. Как создать веб-сайт в приложении android
- 7. Как создать сборщик дат в приложении Android
- 8. Создать экскурсию в Android приложении
- 9. Как создать/установить остаток в приложении Android?
- 10. Как создать сортировку в SQLite в приложении для Android?
- 11. Как создать число уведомлений в приложении Android?
- 12. Android - можно ли создать экран HTML5 в приложении для Android?
- 13. Как создать скрытую папку в приложении для Android?
- 14. Как создать Telegram Stickers программно в приложении для Android
- 15. Как создать собственный календарь в приложении для Android?
- 16. как создать базу данных в приложении для Android?
- 17. Как создать журнал регистрации MobileFirst в приложении для Android?
- 18. Как создать прокручивающийся фон в приложении для Android?
- 19. Как создать выше соответствующие Представления в моем приложении для Android?
- 20. Как создать диалог прогресса в приложении для Android?
- 21. Как создать что-то вроде gmail в приложении для Android
- 22. Как создать пользовательский вид в приложении для Android?
- 23. Как создать глобальный клиентский сокет в моем приложении для Android?
- 24. Как создать «таблицу» в моем приложении для Android
- 25. Как создать и показать код Qr в приложении для Android
- 26. Как создать базу данных в приложении для словарей на Android?
- 27. Как создать обратную кнопку в приложении для Android
- 28. Как создать этот тип пользовательского интерфейса в приложении для Android?
- 29. Как создать веб-контейнер в приложении для Android
- 30. Как создать анимацию ЭКГ на Android-приложении
Было бы неплохо, если бы модель имиджа Android получила некоторое вдохновение от Qt's? Qt установил, что создание PDF или SVG может быть таким же простым, как перенаправление того же кода, который используется для рисования на экране. Посмотрите на вывод QPrinter, QSvgGenerator и QWidget из QPaintDevice для шаблона. – Calaf
То же самое в iOS. Встроена встроенная программа PDF. –
Я считаю, что у Kit Kat есть функция для создания PDF-файла, но я не знаю, совместима ли она с обратной совместимостью. Я опубликовал вариант ниже, и на следующем сайте перечислены несколько вариантов: от коммерческого до бесплатного: http://stefan.fenz.at/creating-pdfs-on-android-an-evaluation/ – IcedDante