我一直在尝试使用PdfDocument将Android WebView转换为PDF。以下是代码:
WebView的初始化:
private void createPdf(File file) {
try {
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create(); //A4 page
PdfDocument.Page page = document.startPage(pageInfo);
View content = webView;
content.draw(page.getCanvas());
document.finishPage(page);
document.writeTo(new FileOutputStream(file));
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
转换为PDF:
public void createWebPrintJob(WebView webView, Context context) {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) context
.getSystemService(Context.PRINT_SERVICE);
// Get a print adapter instance
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
// Create a print job with name and adapter instance
String jobName = context.getString(R.string.app_name) + " Document";
printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
}
上面的代码给了我这个PDF。下面是PDF的截图:
现在,当我更改WebView设置并添加webSettings.setUseWideViewPort(true)时,它会给出下面的PDF以及上面的代码:
我还使用以下代码直接从Android设备打印:
{{1}}
此代码正确呈现WebView并将其发送到打印机。它给出了以下屏幕:
我有几个问题:
如何更改createPdf()以便它为我提供如图3中的PDF?
图片3仍然是两页,而PDF适合一页。我是否需要为此修改我的HTML代码?
假设我的HTML很庞大,并且它不适合一个A4页面。我是否需要使用PdfDocument.Page和startPage()以及finishPage()手动创建单独的页面?如何根据页面大小拆分WebView? 有没有自动创建页面的方法?