我目前正在尝试为我的Android应用程序添加PDF导出功能。
这包括填充网址,将其放入WebView中,然后使用下面的改编代码将该WebView的内容写入到PDF中:
公共位图viewToBitmap(视图视图){位图位图= Bitmap.createBitmap(view.getWidth(),view.getHeight(),Bitmap.Config.ARGB_8888);画布画布=新画布(位图);view.draw(画布);返回位图;}
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导出文件从我的安卓应用程序...?
发布于 2017-06-02 14:20:15
在成功加载页面后,尝试此操作以获取位图。
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级中已弃用,因此请使用
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生成代码是否有问题。
发布于 2017-10-05 18:54:54
我找到了一个解决方案,虽然不是很优雅,但很有效:
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页面。希望这对你有所帮助!
https://stackoverflow.com/questions/44321884
复制相似问题