I have been trying to convert Android WebView to PDF using PdfDocument. Below is the code:
Initialisation of WebView:
WebView webView = (WebView) findViewById(R.id.invoice_web_view);
WebSettings webSettings = webView.getSettings();
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setDefaultTextEncodingName("UTF-8");
Converting to PDF:
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();
}
}
The above code gives me this PDF. Below screenshot of PDF:
Now, when I change the WebView settings and add webSettings.setUseWideViewPort(true), it gives me below PDF with above code:
I also use below code to print directly from Android device:
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());
}
This code correctly renders the WebView and sends it to the printer. It gives below screen:
I have a few questions:
How do I alter createPdf() so that it gives me a PDF like in image 3?
Image 3 still two pages whereas the PDF fits in one page. Do I need to modify my HTML code for this?
Suppose my HTML is huge and it doesn't fit in one A4 page. Do I need to manually create separate pages using PdfDocument.Page and startPage() and finishPage()? How would I split the WebView based on page size? Is there any automatic way of creating pages?