提问人:burhanyaprak 提问时间:1/8/2023 更新时间:1/8/2023 访问量:117
获取 RecyclerView/Bitmap 的 PDF
Get PDF of RecyclerView/Bitmap
问:
我想从 Recyclerview 创建一个 Pdf。我以前能够获得 recyclerview 的图像。我首先获得了一个位图,然后将其转换为图像。但是我找不到创建pdf的正确方法。推荐的库太旧了。我正在寻找更新的解决方案。
这是我获取位图的功能:
private fun getRecyclerViewScreenshotAsBitmap(
recyclerView: RecyclerView,
defaultColor: Int = Color.WHITE
): Bitmap {
recyclerView.measure(
View.MeasureSpec.makeMeasureSpec(recyclerView.width, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
)
val bitmap = Bitmap.createBitmap(
recyclerView.width,
recyclerView.measuredHeight,
Bitmap.Config.ARGB_8888
);
val canvas = Canvas(bitmap)
canvas.drawColor(defaultColor)
recyclerView.draw(Canvas(bitmap));
return bitmap
}
如何从位图或 reyclerview 获取 pdf?
答:
0赞
Andrew
1/8/2023
#1
您可以从内置的 PDFDocument 类中获取canvas
// Create the initial PDF page
int A4Short = 594; // Postscript points
int A4Long = 841; // Postscript points
int pageNumber = 1;
PdfDocument.PageInfo.Builder pageBuilder = new
PdfDocument.PageInfo.Builder(A4Short,A4Long, pageNumber);
PdfDocument.PageInfo pageInfo = pageBuilder.create();
PdfDocument.Page page = document.startPage(pageInfo);
Canvas pdfCanvas = page.getCanvas();
然后代替recyclerView.draw(Canvas(bitmap));
做
recyclerView.draw(pdfCanvas);
或者你可以把你拥有的位图绘制到pdfCanvas
然后关闭页面并写入文件document.finishPage(page);
document.writeTo(outputstream);
您可能遇到的问题是 A4 页面不是那么大,因为它只有 594 x 841 像素,您可能需要将回收器分解为许多页面或在 pdfCanvas 上设置比例pdfCanvas.scale(scaleWidth, scaleWidth);
与其尝试重复使用您在屏幕上使用的布局,不如创建一个 linearLayout,仅用于将绘图创建为 pdf,因为让它适合页面大小/分页可能更容易。
上一个:会议室数据库迁移 - 位图
评论