android+web+to+pdf,Android – 从WebView绘制到PDF画布

概要:

不要修改密度(应该在设备上设置,大概是中等的160 dpi),请使用刻度.

如果您只需要在PDF中的HTML页面的位图(无超链接功能),则可以正常工作.

这是您的代码生成的代码:

//Create PDF document

PdfDocument doc = new PdfDocument();

//Create A4 sized PDF page

int my_width = 595;

int my_height = 842;

PageInfo pageInfo = new PageInfo.Builder(my_width,my_height,1).create();

// PageInfo pageInfo = new PageInfo.Builder(650,850,1).create();

Page page = doc.startPage(pageInfo);

WebView wv = (WebView) this.findViewById(R.id.webView1);

Canvas canvas = page.getCanvas();

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

final DisplayMetrics displayMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(displayMetrics);

int height = displayMetrics.heightPixels;

int width = displayMetrics.widthPixels;

float density = displayMetrics.density;

int wvWidth = wv.getWidth();

int wvHeight= wv.getHeight();

float wvScaleX= wv.getScaleX();

float wvScaleY= wv.getScaleY();

// canvas.setDensity(100);//200 Bitmap.DENSITY_NONE

int cdensity = canvas.getDensity();

float scaleWidth = (float)width/(float)my_width;

float scaleHeight = (float)height/(float)my_height;

canvas.scale(scaleWidth, scaleHeight);

Log.e("button1onClick","canvas width:" + canvas.getHeight() + " canvas height:" + canvas.getWidth());

Log.e("button1onClick","metrics width:" + width + " metrics height:" + height + "metrics density:" + density);

Log.e("button1onClick"," wvWidth:" + wvWidth + " wvHeight:" + wvHeight);

Log.e("button1onClick"," scaleWidth: " + scaleWidth +

" scaleHeight:" + scaleHeight +" cdensity:" + cdensity);

Paint paint = new Paint();

// paint.setStyle(Style.FILL);

paint.setColor(Color.RED);

paint.setStyle(Paint.Style.STROKE);

paint.setStrokeWidth(1);

//Draw the webview to the canvas

wv.draw(canvas);

canvas.scale(1f, 1f);

canvas.drawRect(0, 0, canvas.getWidth()-1, canvas.getHeight()-1, paint);

canvas.drawText("Direct drawn Red Rectangle to fill page canvas 0, 0," +

canvas.getWidth() + "," + canvas.getHeight(), 100, 100, paint);

doc.finishPage(page);

d96abbbeeffd6e0d35672e2bc4d1beaf.png

这很好(超级链接当然不行).

更复杂的例子:

603a544868ec03060cd66555c1eecb61.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值