首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在android中获取Web View的全部内容来生成PDF文件?

如何在android中获取Web View的全部内容来生成PDF文件?
EN

Stack Overflow用户
提问于 2017-06-02 14:04:33
回答 2查看 1.6K关注 0票数 0

我目前正在尝试为我的Android应用程序添加PDF导出功能。

这包括填充网址,将其放入WebView中,然后使用下面的改编代码将该WebView的内容写入到PDF中:

公共位图viewToBitmap(视图视图){位图位图= Bitmap.createBitmap(view.getWidth(),view.getHeight(),Bitmap.Config.ARGB_8888);画布画布=新画布(位图);view.draw(画布);返回位图;}

代码语言:javascript
复制
public void deleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
        for (File child : fileOrDirectory.listFiles())
            deleteRecursive(child);
    fileOrDirectory.delete();
}

public void bmpToPdfMail(Bitmap bitmap) {
    String GVCode = String.valueOf(System.currentTimeMillis() + "_InvoiceTest");
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/Invoices");
    if (myDir.exists()) {
        deleteRecursive(myDir);
    }
    myDir.mkdirs();

    String fname = GVCode + ".jpg";
    File file = new File(myDir, fname);
    if (file.exists()) {
        deleteRecursive(file);
    }
    try {
        FileOutputStream out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

    Document document = new Document();
    String input = Environment.getExternalStorageDirectory().toString() + "/Invoices/" + GVCode + ".jpg";
    String output = Environment.getExternalStorageDirectory().toString() + "/Invoices/" + GVCode + ".pdf";
    String stringPrintDirectory = Environment.getExternalStorageDirectory().toString() + "/Invoices/";
    File myDirPdf = new File(stringPrintDirectory);
    if (!myDirPdf.exists()) {
        myDirPdf.mkdirs();
    }
    try {
        FileOutputStream fos = new FileOutputStream(output);
        PdfWriter writer = PdfWriter.getInstance(document, fos);
        writer.open();
        document.open();
        Image img = Image.getInstance(input);
        document.setPageSize(img);
        document.newPage();
        img.setAbsolutePosition(0, 0);
        document.add(img);
        document.close();
        writer.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
} 

如何从WebView创建PDF,这是隐藏的部分?

然而,当PDF生成时,我只能获得WebView的可见区域,因此屏幕外的信息被切断。

如何获得整个内容,如(可见或不可见的部分)在WebView导出文件从我的安卓应用程序...?

EN

回答 2

Stack Overflow用户

发布于 2017-06-02 14:20:15

在成功加载页面后,尝试此操作以获取位图。

代码语言:javascript
复制
public Bitmap viewToBitmap(WebView v) {
    Picture picture = v.capturePicture();
    Bitmap  b = Bitmap.createBitmap( picture.getWidth(),
    picture.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas( b );

    picture.draw( c );
    return b;
}

由于capturePicture()在API19级中已弃用,因此请使用

代码语言:javascript
复制
public Bitmap viewToBitmap(WebView v) {
    float scale = v.getScale(); // Used to capture whole the content
    int webViewHeight = (int)(v.getContentHeight() * scale);
    Bitmap image = Bitmap.createBitmap(v.getWidth(), webViewHeight,
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(image);
    v.draw(canvas);
    return image;
}

使用位图生成PDF。在此之前,尝试查看位图,以确定pdf生成代码是否有问题。

票数 1
EN

Stack Overflow用户

发布于 2017-10-05 18:54:54

我找到了一个解决方案,虽然不是很优雅,但很有效:

代码语言:javascript
复制
    wb.measure(View.MeasureSpec.makeMeasureSpec(
                    View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    wb.layout(0, 0, wb.getMeasuredWidth(), wb.getMeasuredHeight());
    PdfDocument document = new PdfDocument();
    int pageNumber = 1;
    PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(wb.getMeasuredWidth(),
            wb.getMeasuredHeight(), pageNumber).create();
    PdfDocument.Page page = document.startPage(pageInfo);
    //wb.draw(page.getCanvas());
    wb.draw(page.getCanvas());
    document.finishPage(page);

这将创建一个适合整个WebView所需的PDF页面。希望这对你有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44321884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档