AndroidアプリケーションからPDFファイルを作成する方法はありますか?
AndroidアプリケーションからPDFファイルを作成する方法はありますか?
回答:
AndroidデバイスでPDFを生成したい場合は、次の手順に従ってください。
:あなたは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();
複雑な機能を持つPDFを作成するコツは、目的のxmlレイアウトでダミーアクティビティを作成することです。次に、このダミーアクティビティを開き、プログラムでスクリーンショットを撮り、このライブラリを使用してその画像をPDFに変換します。もちろん、スクロールできない、1ページを超えないなどの制限がありますが、限られたアプリケーションの場合、これはすばやく簡単です。これが誰かを助けることを願っています!
Androidで英語以外の文字を使用して任意のHTMLをPDFに変換する問題の完全な解決策を見つけるのは簡単ではありません。ロシア語のUnicode文字をテストします。
3つのライブラリを使用します。
(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;
}
難しい問題は、iTextPDF XMLWorkerライブラリを使用してPDFにロシア語の文字を表示することです。このために、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";
少し遅れて、まだ自分でテストしていませんが、BSDライセンスの下にある別のライブラリはAndroid PDF Writerですです。
更新自分でライブラリを試しました。単純なpdf生成で問題なく動作します(テキスト、線、長方形、ビットマップ、フォントを追加する方法を提供します)。唯一の問題は、生成されたPDFがメモリ内の文字列に保存されることです。これにより、大きなドキュメントでメモリの問題が発生する可能性があります。
PDFJetは、基本的なPDF生成タスクを処理できるライブラリのオープンソースバージョンを提供しています。これは純粋にJavaベースのソリューションであり、Androidと互換性があるとされています。高すぎると思われないいくつかの追加機能を備えた商用バージョンがあります。