在Android中从Recyclerview(内部的整个项目)使用iText创建PDF文件?

在Android中从Recyclerview(内部的整个项目)使用iText创建PDF文件?,第1张

在Android中从Recyclerview(内部的整个项目)使用iText创建PDF文件?

经过数小时的反复无常,我找到了答案。我正在分享代码段,因为这可能对其他人有所帮助

     public void generatePDF(RecyclerView view) {    RecyclerView.Adapter adapter = view.getAdapter();    Bitmap bigBitmap = null;    if (adapter != null) {        int size = adapter.getItemCount();        int height = 0;        Paint paint = new Paint();        int iHeight = 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("PDF"), "print.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());      float scaler = ((document.getPageSize().getWidth() - document.leftMargin()     - document.rightMargin() - 0) / image.getWidth()) * 100; // 0 means you have no indentation. If you have any, change it.     image.scalePercent(scaler);     image.setAlignment(com.itextpdf.text.Image.ALIGN_CENTER | com.itextpdf.text.Image.ALIGN_TOP);     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() {     alertDialog.Builder builder = new alertDialog.Builder(Index.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(); }        });    }}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5587364.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存