获取 RecyclerView/Bitmap 的 PDF

Get PDF of RecyclerView/Bitmap

提问人:burhanyaprak 提问时间:1/8/2023 更新时间:1/8/2023 访问量:117

问:

我想从 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?

Kotlin Android-Recycler查看 PDF 生成 Android-Bitmap

评论

0赞 Cheticamp 1/8/2023
有帮助吗?
0赞 burhanyaprak 1/9/2023
是的,它救了我。

答:

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,因为让它适合页面大小/分页可能更容易。