2017-06-02 20 views
0

我目前正在尝试为我的Android应用程序添加PDF导出功能。如何获取Web View的全部内容以在Android中生成PDF文件?

这涉及填充一个网址,投入到这一个WebView中,然后编写的WebView的内容,使用适合的代码从这里PDF:

公共位图viewToBitmap(查看视图){ 位图位=位图。 createBitmap(view.getWidth(),view.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); 返回位图; }

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中获取像(可见或不可见部分)的整个内容以从我的Android应用程序中导出PDF文件...?

回答

0

尝试这个来获取位图,页面加载成功后。

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()在API级别19过时,使用

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生成代码是否存在问题或什么是!!?

+0

我试试这个方法但没有得到一个合适的位图文件 –

+0

那么,所有的内容都包含在位图中吗? – Wizard

+0

不,我得到一个唯一的可见部分和其他部分是空白打印 –

0

我找到了解决办法,没有那么优雅,但工作:

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); 

这将创建一个PDF页面一样宽,必须适应整个的WebView。 希望得到这个帮助!

相关问题