如何获取Web View的全部内容以在Android中生成PDF文件? [英] how to get whole content of Web View to generate PDF file in android?
问题描述
我目前正在尝试为我的Android应用程序添加PDF导出功能.
I'm Currently attempting to include a PDF export feature for my Android Application.
这涉及到填充一个Url,将其放入WebView,然后使用来自此处的改编代码将该WebView的内容写入PDF:
This involves populating a Url, putting that into a WebView, then writing the contents of that WebView to a PDF using adapted code from here:
公共位图viewToBitmap(View view){ 位图位图= Bitmap.createBitmap(view.getWidth(),view.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(画布); 返回位图; }
public Bitmap viewToBitmap(View view) { Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); return bitmap; }
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?
How to create PDF from WebView, which is hidden part?
但是,当生成PDF时,我只能看到 WebView,因此屏幕外的信息被切断了.
However when the PDF is generated, I am only getting the visible area of the WebView, so information off-screen is being cut off.
如何在WebView中获取诸如(可见部分或不可见部分)之类的全部内容,以从我的Android应用程序中导出PDF文件...?
How to get Whole Content like (Visible or not Visible Part) in WebView to export PDF File From My Android Application...?
推荐答案
我找到了一个解决方案,虽然不是很好,但是可以正常工作:
I found a solution, not so elegant but working:
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. 希望有帮助!
This creates a PDF page as wide as necessary to fit the whole WebView. Hope this help!
这篇关于如何获取Web View的全部内容以在Android中生成PDF文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!