以全长创建 RecyclerView 的 PDF [英] create PDF of RecyclerView in FULL length

查看:39
本文介绍了以全长创建 RecyclerView 的 PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建活动整页"的 PDF.该视图包含一个包含许多项的 RecyclerView.

I want to create a PDF of "full page" of the activity. The view contains a RecyclerView with many items.

我可以获取 Recyclerview 的完整尺寸,但该文件仅绘制了当前视图.这是我的代码:

I can take a full dimensions of my Recyclerview but the file is drawed only of the current view. This is my code:

    public void tela (){ // create a new document
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)

    {
        PdfDocument document = new PdfDocument();

        getScreenshotFromRecyclerView(mRecyclerView);
        content = mRecyclerView;
        content.setBackgroundColor(Color.parseColor("#303030"));


        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(wil,
                height, 1).create();

    // create a new page from the PageInfo
        PdfDocument.Page page = document.startPage(pageInfo);

    // repaint the user's text into the page
        content.draw(page.getCanvas());

    // do final processing of the page
        document.finishPage(page);

    // saving pdf document to sdcard
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy - HH-mm-ss",Locale.getDefault());
        String pdfName = "Revisões_"
                + sdf.format(Calendar.getInstance().getTime()) + ".pdf";

    // all created files will be saved at path /sdcard/PDFDemo_AndroidSRC/
        File outputFile = new File(Environment.getExternalStorageDirectory().getPath(), pdfName);

        try {
            outputFile.createNewFile();
            OutputStream out = new FileOutputStream(outputFile);
            document.writeTo(out);
            document.close();
            out.close();
            Toast.makeText(this,"PDF gerado com sucesso",Toast.LENGTH_SHORT).show();
            Log.i("Gerou", "pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

//获取限制

    public void getScreenshotFromRecyclerView(RecyclerView view) {
    RecyclerView.Adapter adapter = view.getAdapter();
    if (adapter != null) {
        int size = adapter.getItemCount();

        for (int i = 0; i < size; i++) {
            RecyclerView.ViewHolder holder = adapter.createViewHolder(view, adapter.getItemViewType(i));
            adapter.onBindViewHolder(holder, i);
            holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            holder.itemView.layout(0, 0, holder.itemView.getMeasuredWidth(), holder.itemView.getMeasuredHeight());
            height += holder.itemView.getMeasuredHeight();
        }
        wil=view.getMeasuredWidth();


    }
}

结果是这样的:

The result is this:

我可以使用 Recyclerview 的所有值创建 pdf 吗?

Can I create the pdf with the all values of my Recyclerview?

谢谢.

推荐答案

我实现了一个帮助程序类来处理将图像保存为 PDF.在我通过的方法 saveImageToPDF() 中:

I implemented a helper class to handle image saving to PDF. In the method saveImageToPDF() I pass:

  • 一个 TabLayout,它在我的 recyclerView 之上
  • recyclerView 的 Bitmap
  • 上下文

为了获得 recyclerView 位图,我使用了这个 截取 RecyclerView 的截图全长

to get the recyclerView Bitmap I used this Take a screenshot of RecyclerView in FULL length

public class PDFHelper {

    private File mFolder;
    private File mFile;
    private Context mContext;

    public PDFHelper(File folder, Context context) {

        this.mContext = context;
        this.mFolder = folder;

        if(!mFolder.exists())
            mFolder.mkdirs();
    }

    public void saveImageToPDF(View title, Bitmap bitmap, String filename) {

        mFile = new File(mFolder, filename + ".pdf");
        if (!mFile.exists()) {
            int height = title.getHeight() + bitmap.getHeight();
            PdfDocument document = new PdfDocument();
            PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(bitmap.getWidth(), height, 1).create();
            PdfDocument.Page page = document.startPage(pageInfo);
            Canvas canvas = page.getCanvas();
            title.draw(canvas);

            canvas.drawBitmap(bitmap, null, new Rect(0, title.getHeight(), bitmap.getWidth(),bitmap.getHeight()), null);

            document.finishPage(page);

            try {
                mFile.createNewFile();
                OutputStream out = new FileOutputStream(mFile);
                document.writeTo(out);
                document.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

这篇关于以全长创建 RecyclerView 的 PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆