乐闻世界logo
搜索文章和话题

How to create PDF from webview in android?

1个答案

1

In Android, creating a PDF from WebView can primarily be achieved through two steps:

  1. Render web page content into a PrintAdapter using WebView.
  2. Use Android's printing framework to output the PrintAdapter content to a PDF file.

The following is an example of creating a PDF:

Step 1: Prepare WebView and Content

First, you need a WebView instance and load the content you want to render into PDF. This can be a web page URL or directly load an HTML string.

java
WebView webView = new WebView(context); webView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { // Initiate the printing process after the page finishes loading createPdf(webView); } }); // Load a web page webView.loadUrl("http://www.example.com"); // Or load an HTML string // String htmlString = "<html><body><h1>Hello, PDF!</h1></body></html>"; // webView.loadDataWithBaseURL(null, htmlString, "text/HTML", "UTF-8", null);

Step 2: Create PDF

Using Android's printing framework, you can render WebView content into a PDF file. Call the following method in the callback when the page finishes loading:

java
private void createPdf(WebView webView) { // Create PrintManager PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE); // Create PrintDocumentAdapter PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter("MyDocument"); // Create PrintAttributes PrintAttributes.Builder builder = new PrintAttributes.Builder(); builder.setMediaSize(PrintAttributes.MediaSize.ISO_A4); // Set paper size to A4 PrintAttributes printAttributes = builder.build(); // Create PDF file save path String fileName = "WebViewContent.pdf"; PrintJob printJob = printManager.print(fileName, printAdapter, printAttributes); // Use PrintJob listener to ensure PDF creation is complete printJob.addPrintJobStateChangeListener(new PrintJobStateChangeListener() { @Override public void onPrintJobStateChanged(@NonNull PrintJobId printJobId) { PrintJob printJob = printManager.getPrintJob(printJobId); if (printJob.isCompleted()) { // PDF creation successful; proceed with next steps, e.g., open the PDF file } else if (printJob.isFailed()) { // PDF creation failed } } }); }

The createPdf method in the above code initiates the printing process and saves the WebView content as a PDF. However, it triggers the system's print dialog and generates a PDF preview, requiring users to manually confirm the print and select 'Save as PDF' instead of actual printing.

If you want to create the PDF file directly within the application without user interaction, you need to use the PrintDocumentAdapter.write() method and ParcelFileDescriptor to directly write the PDF to the file system. This approach requires more coding, including handling file read/write permissions (runtime permission requests are needed for Android 6.0+).

This is the basic process for creating PDF from WebView in Android. In practice, you also need to consider permission requests, error handling, and file storage locations.

2024年6月29日 12:07 回复

你的答案