android - 使用 GridLayoutManager 将 Recycler View 转换为 Pdf

标签 android gridview pdf-generation

我正在使用以下代码从 Recycler View 生成 pdf,

         public void generatePDF(RecyclerView view) {
        RecyclerView.Adapter adapter = view.getAdapter();
       Bitmap bigBitmap = null;
        if (adapter != null) {
            int size = adapter.getItemCount();
            int height = 0;
            final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
            // Use 1/8th of the available memory for this memory cache.
            final int cacheSize = maxMemory / 8;
            LruCache<String, Bitmap> bitmaCache = new LruCache<>(cacheSize);
            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());
                holder.itemView.setDrawingCacheEnabled(true);
                holder.itemView.buildDrawingCache();
                Bitmap drawingCache = holder.itemView.getDrawingCache();
                if (drawingCache != null) {
                    bitmaCache.put(String.valueOf(i), drawingCache);
                }
                height += holder.itemView.getMeasuredHeight();
            }

            bigBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), height, Bitmap.Config.ARGB_8888);
            Canvas bigCanvas = new Canvas(bigBitmap);
            bigCanvas.drawColor(Color.WHITE);

            Document document = new Document(PageSize.A4);
            final File file = new File(getStorageDir(), "A.pdf");
            try {
                PdfWriter.getInstance(document, new FileOutputStream(file));
            } catch (DocumentException | FileNotFoundException e) {
                e.printStackTrace();
            }

            for (int i = 0; i < size; i++) {
                try {
                    //Adding the content to the document
                    Bitmap bmp = bitmaCache.get(String.valueOf(i));
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                    Image image = Image.getInstance(stream.toByteArray());
                    image.scalePercent(85);
                    image.setAlignment(Image.LEFT);
                    if (!document.isOpen()) {
                        document.open();
                    }
                    document.add(image);

                } catch (Exception ex) {
                    Log.e("TAG-ORDER PRINT ERROR", ex.getMessage());
                }
            }
            if (document.isOpen()) {
                document.close();
            }
        // Set on UI Thread
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressDialog.dismiss();

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setTitle("Success")
                        .setMessage("PDF File Generated Successfully.")
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    Intent intent = new Intent(Intent.ACTION_VIEW);
                                    intent.setDataAndType(Uri.fromFile(file), "application/pdf");
                                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                                    startActivity(intent);
                            }
                        }).show();


                }
            });

        }

    }

当我使用 LinearLayoutManager 从 recyclerview 生成 pdf 时,此代码运行良好,但是当我使用每行有 3 个项目的 GridLayoutmanager 时,不会像在 recylerview 中那样打印项目。实际上,LinearLayoutManage 和 GirdLayoutManager 的输出是相同的。但我的要求是使用每行有 3 个项目的 GridLayoutManager 从 recyclerview 打印 pdf。所以请帮我解决我的问题。

最佳答案

这样做:-

    mRecyclerView = findViewById(R.id.rvNumbers);
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
    List<String> list = new ArrayList(); list.add("A"); list.add("B"); list.add("C");
    MyAdapter myAdapter = new MyAdapter(this, list);
    mRecyclerView.setAdapter(myAdapter);

关于android - 使用 GridLayoutManager 将 Recycler View 转换为 Pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696131/

相关文章:

javascript - 如何在 javascript/jquery 中检查 html5 视频的全屏请求?

Javascript-slidesjs 不适用于 Android(其他都可以)

c# - 通过 ObjectDataSource : Why is maximumRows being set to -1? 的 Gridview 分页

android:在 viewpager 中使用 gridview 显示 156 张图像

ios - pdf包含未知字符

android - 将 pdf 的内容限制为使用 droidtext 创建的单个页面

javascript - Phonegap/jQuery 移动页面转换闪烁

java - 创建 Android .jar 文件

pdf - 如何将文本对象添加到现有的pdf

android - 添加到 RelativeLayout 时更改 GridView