Apakah ada cara untuk membuat File PDF dari aplikasi Android?
Apakah ada cara untuk membuat File PDF dari aplikasi Android?
Jawaban:
Jika ada yang ingin menghasilkan PDF di perangkat Android, berikut adalah cara melakukannya:
Jika Anda mengembangkan untuk perangkat dengan API level 19 atau lebih tinggi, Anda dapat menggunakan built in 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();
Trik untuk membuat PDF dengan fitur-fitur kompleks adalah membuat aktivitas tiruan dengan tata letak xml yang diinginkan. Anda kemudian dapat membuka kegiatan boneka ini, mengambil screenshot pemrograman dan mengkonversi gambar yang ke pdf menggunakan library ini . Tentu saja ada batasan seperti tidak dapat menggulir, tidak lebih dari satu halaman, tetapi untuk aplikasi terbatas ini cepat dan mudah. Semoga ini bisa membantu seseorang!
Tidak mudah untuk menemukan solusi lengkap dari masalah konversi HTML ke PDF sewenang-wenang dengan huruf non-Inggris di Android. Saya mengujinya untuk huruf unicode Rusia.
Kami menggunakan tiga perpustakaan:
(1) Jsoup (jsoup-1.7.3.jar) untuk konversi dari HTML ke 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;
}
Masalah yang sulit adalah menampilkan huruf Rusia dalam PDF dengan menggunakan pustaka XMLWorker iTextPDF. Untuk ini, kita harus membuat implementasi antarmuka FontProvider kita sendiri:
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 ); }
}
Di sini kita menggunakan font Android standar Droid Sans, yang terletak di folder sistem:
private static final String FONT_PATH = "/system/fonts/DroidSans.ttf";
Sedikit terlambat dan saya belum mengujinya sendiri tetapi perpustakaan lain yang berada di bawah lisensi BSD adalah Android PDF Writer .
Pembaruan Saya telah mencoba perpustakaan sendiri. Bekerja ok dengan generasi pdf sederhana (ini menyediakan metode untuk menambahkan teks, garis, persegi panjang, bitmap, font). Satu-satunya masalah adalah bahwa PDF yang dihasilkan disimpan dalam String di memori, ini dapat menyebabkan masalah memori dalam dokumen besar.
PDFJet menawarkan versi open-source perpustakaan mereka yang harus dapat menangani tugas pembuatan PDF dasar. Ini adalah solusi murni berbasis Java dan dinyatakan kompatibel dengan Android. Ada versi komersial dengan beberapa fitur tambahan yang tampaknya tidak terlalu mahal.
Terlambat, tetapi relevan untuk meminta dan semoga bermanfaat. Jika menggunakan layanan eksternal (seperti yang disarankan dalam balasan oleh CommonsWare) maka Docmosis memiliki layanan cloud yang mungkin membantu - membongkar pemrosesan ke layanan cloud yang melakukan pemrosesan berat. Pendekatan itu ideal dalam beberapa keadaan tetapi tentu saja bergantung pada koneksi internet.
Anda juga dapat menggunakan perpustakaan PoDoFo . Tujuan utamanya adalah bahwa itu diterbitkan di bawah LGPL. Karena ini ditulis dalam C ++ Anda harus mengkompilasi silang menggunakan NDK dan menulis C-side dan Java wrapper. Beberapa perpustakaan pihak ketiga dapat digunakan dari proyek OpenCV . Juga di proyek OpenCV Anda dapat menemukan android.toolchain.cmake
file, yang akan membantu Anda menghasilkan Makefile
.