我试图从布局创建一个PDF;我将布局转换为位图,然后打印到PDF页面。应用程序将输出转换为一个长的PDF页面,但我想将位图分成几个部分,然后在多个PDF页面中打印每个A4大小,如果第一页不够,请创建第二页并在其上打印剩余部分。
我该怎么做?
private void generatePdfFromView(View view) {
Bitmap bitmap = getBitmapFromView(view);
document = new PdfDocument();
PdfDocument.PageInfo myPageInfo = new PdfDocument.PageInfo.Builder(view.getWidth(),view.getHeight(),1).create();
PdfDocument.Page myPage = document.startPage(myPageInfo);
Canvas canvas = myPage.getCanvas();
canvas.drawBitmap(bitmap,0,0,null);
document.finishPage(myPage);
PdfDocument.PageInfo myPageInfo1 = new PdfDocument.PageInfo.Builder(view.getWidth(),view.getHeight(),2).create();
PdfDocument.Page myPage1 = document.startPage(myPageInfo1);
Canvas canvas1 = myPage1.getCanvas();
canvas1.drawBitmap(bitmap,0,0,null);
document.finishPage(myPage1);
createFile();
}
private Bitmap getBitmapFromView(View view) {
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(),view.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null){
bgDrawable.draw(canvas);
} else {
canvas.drawColor(Color.WHITE);
}
view.draw(canvas);
return returnedBitmap;
}
字符串
1条答案
按热度按时间muk1a3rh1#
这实际上取决于你如何生成你的布局(你没有在你的问题中显示),你的布局显示什么,以及你希望在多个页面之间的分割有多好。
主要有两种策略:
1.只需将位图拆分为多个位图,并将每个新位图放在新页面上即可。这不会产生很好的结果,因为很难在逻辑位置分割位图(即不在文本行的一半)
1.使用PDF的视图Just将视图直接绘制到PDF画布,该视图从不显示在屏幕上(此视图从不显示在屏幕上的原因是A4页面的宽度为595像素,高度为842像素,与设备显示屏的大小不匹配)。这样做的优点是PDF是可编辑的,因为文本是文本而不是文本的图片,PDF在屏幕上的缩放效果更好,尺寸也更小)。它还允许您重新设置每个页面的格式。
我的应用程序实际上使用了这两种策略的混合,因为它也想为每个PDF页面的facebook产生png的,但主要的策略是2.“直接绘制”
所以总结一下“画直”的方法。
1.您可以在LinearLayout中以多个视图的形式生成布局(便于拆分)
1.创建一个
ArrayList
个视图,将其作为行添加到LinearLayout中,并以编程方式创建每个视图,然后将其添加到ArrayList中1.将所有视图添加到LinearLayout,然后测量和布局LinearLayout
字符串
这将调整所有视图的大小
1.从线性布局中删除所有视图
型
1.再次迭代arraylist,将视图添加回linearLayout,直到累积高度不足一行,超过A4页面的最大高度(842像素)。
然后重新测量和布局,再次定位一切,使一切在屏幕上。
将此布局绘制到PDF页面(或位图)的画布上
1.对每个PDF页面重复步骤4和5(删除所有视图,然后将下一个页面行集添加到LinearLayout)。然后测量/布局此页面并绘制到画布上。
执行此操作,直到所有行都绘制到多个PDF页面。
关键是测量所有视图元素的高度,这样您就可以计划您可以添加多少布局,以适应PDF页面。
这就是我在PDF的多个页面上显示视图的方式(我实际上将视图的宽度调整为“Wrap Content”,并计算出一个比例,将其调整为A4宽度,计算出在该比例下构成一个页面的高度,并添加足够的元素来填充该页面,然后创建该页面的位图,并通过在PDF的画布上设置比例将位图添加到PDF页面的画布上。我之所以采用这种混合方法,是因为除了将视图的PDF分页外,我还希望将每个页面的Png放在Facebook上)
实际上,关键是要将视图生成拆分为多个视图