如何从WebView导出PDF,可以在新PDF内选择文本

时间:2018-12-16 09:20:24

标签: java android pdf webview

我正在尝试将WebView的文本内容转换为PDF。使用下面的代码。

PdfDocument.Page page = document.StartPage(new PdfDocument.PageInfo.Builder(webpage.Width, webpage.Height, 1).Create());
webpage.Draw(page.Canvas);

PDF已正确生成,但我无法从该PDF中选择文本。它类似于WebView的内容,但转换为图像。

但是,如果我尝试从打印菜单中打印相同的WebView并将其保存为PDF,则文本选择有效并且pdf的大小较小。

那么我该如何从也可以选择文本的WebView中创建PDF。

例如选择文本。

Sample UI action

2 个答案:

答案 0 :(得分:1)

您所做的是将网页作为图像打印到PDF画布上-这就是为什么尺寸更大,并且您无法选择文本的原因。因为文本不是作为文本对象存在,而是作为图像存在。 这样做的原因是您将Web视图(而不是网页)绘制到PDF画布上。就像将视图本身作为位图输出到PDF一样。

您可能想要使用XHTML到PDF渲染库,例如iText或Flying Saucer,以将XHTML网页(而不是Webview!)正确渲染为PDF。

答案 1 :(得分:1)

您可以使用iText库,在gradle中添加此依赖项

  

编译'com.itextpdf:itextg:5.5.10'

现在将Webview的文本转换为pdf

try {
            File mFolder = new File(getExternalFilesDir(null) + "/sample");
            File imgFile = new File(mFolder.getAbsolutePath() + "/Test.pdf");

            if (!mFolder.exists()) {
                mFolder.mkdir();
            }
            if (!imgFile.exists()) {
                imgFile.createNewFile();
            }

            String webviewText = "<html><body>Your  webview's text content </body></html>";
            OutputStream file = new FileOutputStream(imgFile);

            Document document = new Document();
            PdfWriter.getInstance(document, file);
            document.open();
            HTMLWorker htmlWorker = new HTMLWorker(document);
            htmlWorker.parse(new StringReader(webviewText));
            document.close();
            file.close();
        } catch (Exception e) {
            e.printStackTrace();
        }