【发布时间】:2015-01-11 05:04:04
【问题描述】:
我正在开发一个应用程序(Android 4.4 -- API 20),我在其中生成 HTML 格式的报告。我使用 WebView 对象在我的应用程序中显示报告。
我想做的就是将此 WebView 转换为 pdf 文档。
我已经能够使用 PdfDocument 对其进行转换,并从 WebView 对象将 .draw 绘制到页面上。我保存了文件,这很有效,只是结果是一个单页文档。没有分页符。
View content = (View) webView;
PrintAttributes pdfPrintAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_MONOCHROME).
setMediaSize(PrintAttributes.MediaSize.NA_LETTER.asLandscape()).
setResolution(new Resolution("zooey", PRINT_SERVICE, 300, 300)).
setMinMargins(PrintAttributes.Margins.NO_MARGINS).
build();
PdfDocument document = new PrintedPdfDocument(mContext,pdfPrintAttrs);
PageInfo pageInfo = new PageInfo.Builder(webView.getMeasuredWidth(), webView.getContentHeight(), 1).create();
Page page = document.startPage(pageInfo);
content.draw(page.getCanvas());
document.finishPage(page);
如果我将其更改为使用 PrintedPdfDocumet 并且不指定 PageInfo,我只会获得 WebView 对象的可见部分。
View content = (View) webView;
PrintAttributes pdfPrintAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_MONOCHROME).
setMediaSize(PrintAttributes.MediaSize.NA_LETTER.asLandscape()).
setResolution(new Resolution("zooey", PRINT_SERVICE, 300, 300)).
setMinMargins(PrintAttributes.Margins.NO_MARGINS).
build();
PrintedPdfDocument document = new PrintedPdfDocument(mContext,pdfPrintAttrs);
Page page = document.startPage(0);
content.draw(page.getCanvas());
document.finishPage(page);
如果我使用 PrintManager 并使用 createPrintDocumentAdapter 从 WebView 对象创建打印适配器,我可以选择“另存为 PDF”选项,并且生成的 pdf 文件具有我在原始网页的 CSS 中指定的分页符.
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
String jobName = getString(R.string.app_name) + " Report "
+ reportName;
PrintAttributes printAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_MONOCHROME).
setMediaSize(PrintAttributes.MediaSize.NA_LETTER.asLandscape()).
setMinMargins(PrintAttributes.Margins.NO_MARGINS).
build();
PrintJob printJob = printManager.print(jobName, printAdapter,
printAttrs);
我的问题是:我可以指定我希望 PrintManager 执行“另存为 PDF”并提供生成文件的名称和位置,这样就不会与用户交互吗?
或者:有没有办法可以将我的 WebView 对象转换为 PDF 并允许分页符。
【问题讨论】:
-
不是一个真正的答案,但是看看这个库,它在sourceforge.net/projects/itext之前帮助过我
-
我认为 iText 需要您购买许可证才能使用它。是这样吗?
-
不,仅当您想将其用于商业用途并出售您的应用程序等时。我在我的一两个项目中使用它,这只是为了我自己在办公室。 “一旦您开始活动,包括在您的产品中分发 iText 软件或在网络上部署它,而无需根据 AGPL 许可证披露您自己的应用程序的源代码,就必须购买商业许可证。”在此处查看其余内容itextpdf.com/agpl
-
我认为 iText 不会成为我的选择。即使我不打算出售我的应用程序,它也会用于商业环境。
-
@Tejasjain,VinginMedina,在下面查看我的答案。
标签: android pdf printing webview