2017-10-02 9 views
0

基本的な目的は、後で電子メールに添付されたPDFレポートを生成して、PDFが表示されていなくても、ユーザーが送信したときに自動的に送信します(私はこの側のメールガンを使用しています)印刷ダイアログが表示されます。非表示WebView to PDF - 結果は空白ですか?

これは私がこれまでに持っていたコードで、空のPDFを生成します。私はこれを商用で使用しているので、iTextなどのライブラリを使用することはできません。

WebView web = new WebView(c); // c is context, provided when method called 
    web.loadDataWithBaseURL("file:///android_asset/", pdfTemplate, "text/html", "UTF-8", ""); 
    PrintAttributes.Builder b = new PrintAttributes.Builder() 
      .setColorMode(PrintAttributes.COLOR_MODE_COLOR) 
      .setMediaSize(PrintAttributes.MediaSize.ISO_A4) 
      .setMinMargins(PrintAttributes.Margins.NO_MARGINS) 
      .setResolution(new PrintAttributes.Resolution("1", "label", 300, 300)); 
    PrintedPdfDocument doco = new PrintedPdfDocument(c, b.build()); 
    PdfDocument.Page p = doco.startPage(1); 
    web.draw(p.getCanvas()); 
    doco.finishPage(p); 

何も表示せずにこの作業を行うにはどうすればよいですか?

+0

「私はこれを使用していますので、商用では、iTextなどのライブラリを使用することができません」 - iTextは[商用ライセンス](https://itextpdf.com/Pricing)を提供しています。主要な検索エンジンで 'android library generate pdf'を検索すると、他のさまざまなライブラリやサービスが表示されます。あなたの問題に関しては、 'WebView'はその内容をバックグラウンドスレッドにロードします(あなたは早すぎて印刷しようとしています)。さらに、あなたの場合、HTMLをパッケージ化してPDFを生成するのではなく、単にPDFファイルをアセットにパッケージ化する方がはるかに簡単です。 – CommonsWare

+0

私はあなたの点を取っていますが、有料の商用ライセンスを使用する立場にない理由はさまざまです。 WebViewがロードされてからPDFコードがトリガーされるのを待つ方法はありますか? アセットでPDFをパッケージ化する場合、コンテンツの編集についてはどうすればよいでしょうか?PDFコンテンツは、以前はstring.replaceを使用していたアプリケーションのデータが入力されるたびに変わりますのプレースホルダを置き換える。 – markeh21

+0

"WebViewがロードされてからPDFコードがトリガーされるのを待つ方法はありますか?" - あなたのHTMLに応じて、[この回答](https://stackoverflow.com/a/46525763/115145)で概説されている 'WebViewClient'アプローチがうまくいくはずです。これは意図的に非同期作業(AJAXなど)を処理しません。 「コンテンツを編集するにはどうすればいいですか」 - ごめんなさい、あなたの質問のコードを誤解しました。 – CommonsWare

答えて

1

カスタムWebViewClientを使用して、このような「onPageFinished」メソッドをオーバーライドすることができます

class CustomWebViewClient extends WebViewClient { 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     //do your pdf logic 
    } 
} 

あなたはURLをロードする前に、そしてちょうどこれを呼び出す:

web.setWebViewClient(new CustomWebViewClient()); 
+0

ありがとう - すべてのPDFと電子メールロジックを移動し、コードが起動しましたが、残念ながらまだ空白です。 編集:クライアントを設定した後にURLをロードするようにしました。 – markeh21

関連する問題