【发布时间】:2018-03-13 11:42:17
【问题描述】:
基本上,目的是生成一个 PDF 报告,然后在用户点击提交时将其附加到电子邮件并自动发送(我在这方面使用 Mailgun,一切正常),而不显示 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);
在用户看到任何东西的情况下,我可以做些什么来完成这项工作?
【问题讨论】:
-
“因为我将它用于商业用途,所以我无法为此使用 iText 等库”——iText 提供commercial licensing。在主要搜索引擎上的
android library generate pdf上搜索各种其他库和服务。关于您的问题,WebView将其内容加载到后台线程(因此您尝试过早打印)。另外,在您的情况下,将 PDF 文件打包到资产中会简单得多,而不是打包 HTML 并尝试生成 PDF。 -
我同意您的观点,但是有多种原因导致我们无法使用付费商业许可证。有什么办法可以等待加载 WebView 然后触发 PDF 代码?如果我要将 PDF 打包到资产中,我将如何编辑内容 - PDF 内容每次都会更改,因为它将填充来自应用程序的数据,之前我使用 string.replace 替换占位符的。
-
" 有什么办法可以等待 WebView 被加载然后触发 PDF 代码?" -- 根据您的 HTML,this answer 中概述的
WebViewClient方法应该可以工作。这不处理故意异步工作(例如,AJAX)。 “我将如何编辑内容” - 哎呀,对不起,我误读了您问题中的代码。
标签: android pdf android-webview