簡體   English   中英

獲取 RecyclerView/Bitmap 的 PDF

[英]Get PDF of RecyclerView/Bitmap

我想從 Recyclerview 創建一個 Pdf。 我之前能夠得到一張回收視圖的圖像。 我先獲取了一個bitmap,然后轉為圖片。 但是我找不到創建pdf的正確方法。推薦的庫太舊了。 我正在尋找更新的解決方案。

這是我的 function 得到一個 bitmap:

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
    }

如何從 bitmap 或 reyclerview 獲取 pdf?

您可以從內置的PDFDocument class 中獲得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);

或者您可以將 bitmap 繪制到pdfCanvas

然后關閉頁面document.finishPage(page); 並寫入文件document.writeTo(outputstream);

您可能遇到的問題是 A4 頁面不是那么大,因為它只有 594 x 841 像素,您可能需要將回收器分成許多頁面或在 pdfCanvas 上設置比例pdfCanvas.scale(scaleWidth, scaleWidth);

您也可能比嘗試重新使用您在屏幕上使用過的布局更好,而創建一個 linearLayout 只是為了創建 pdf 的繪圖,因為它可能更容易使其適合頁面大小/分頁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM