首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从RecyclerView的全部内容创建PDF?

从RecyclerView的全部内容创建PDF?
EN

Stack Overflow用户
提问于 2017-03-06 21:59:13
回答 4查看 9.7K关注 0票数 2

这里已经提出了问题:创建完整长度的RecyclerView PDF和我也有相同的问题,因为我还没有找到解决方案,--我想生成完整长度的RecyclerView内容的PDF。,但没有找到解决方案。

我已经尝试过所有可用的解决方案和从RecycleView生成PDF的所有可能方法。

我已经尝试过的解决方案:

https://gist.github.com/PrashamTrivedi/809d2541776c8c141d9a

完整地拍摄RecyclerView的截图

将Listview项转换为单个位图图像

已经尝试过上面提到的所有解决方案,但是它们中的任何一个都没有与我一起工作,并且会出现错误,有时会出现宽度和高度问题,有时会出现空的白色位图,因为输出不知道为什么。

问题:

我有RecyclerView的内容以及图片之间的内容。

考虑使用内容为.的屏幕作为RecyclerView

在RecyclerView中具有与上面的图像相同的100+项的内容。

RecyclerView项目布局:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/leftImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight="1"
    android:adjustViewBounds="true"
    android:maxHeight="350dp"
    fresco:actualImageScaleType="fitCenter"
    fresco:placeholderImage="@color/white" />

<jp.wasabeef.richeditor.RichEditor
    android:id="@+id/editor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/margin10dp"
    android:layout_marginRight="@dimen/margin10dp"
    android:layout_weight="1"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false" />

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/rightImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight="1"
    android:adjustViewBounds="true"
    android:maxHeight="350dp"
    fresco:actualImageScaleType="fitCenter"
    fresco:placeholderImage="@color/white" />
</LinearLayout>

更新

当我在PDF上工作,从视图中生成PDF时,却无法生成PDF,所以我发布了这个问题。

但是现在,我找到了一个使用Webview生成PDF的解决方案--你可以看到我对这个问题的回答被标记为已被接受。

基于我发现的解决方案,我创建了一个库,用于从任何字符串或任何HTML生成PDF。

PDF-生成器库: PDF-生成器

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-28 21:33:16

经过大量的变通和解决方案,我得到了解决方案,以及实现这一目标的最佳方法,

将内容以html形式添加到webview中,通过webview,我们可以直接使用Android的PrintManager类进行打印。

像这样的 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String documentName = "yourDocumentName"; // you can provide any name

// Get a PrintManager instance
PrintManager printManager = (PrintManager) context.getSystemService(PRINT_SERVICE);

// Get a print adapter instance
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(documentName);

PrintJob printJob = printManager.print(documentName, printAdapter, new PrintAttributes.Builder().build());

上面是示例代码来做打印的webview内容,用这个我们也可以生成PDF。

有关更多信息并使用此打印HTML文档

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2019-12-29 16:12:16

我在这里看了所有的答案,但不幸的是,它们对我不起作用。我采用了从StackOverflow创建位图的方法。该方法以回收者视图为参数,并将其转换为位图,然后由PdfDocument.pageInfo使用它来满足您的需要。我试过了,它非常适合所有的布局,比如相对布局和线性布局。希望这能帮上忙。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Bitmap recycler_view_bm =     getScreenshotFromRecyclerView(mRecyclerView);

        try {

            pdfFile.createNewFile();
            FileOutputStream fOut = new FileOutputStream(pdfFile);

            PdfDocument document = new PdfDocument();
            PdfDocument.PageInfo pageInfo = new
                    PdfDocument.PageInfo.Builder(recycler_view_bm.getWidth(), recycler_view_bm.getHeight(), 1).create();
            PdfDocument.Page page = document.startPage(pageInfo);
            recycler_view_bm.prepareToDraw();
            Canvas c;
            c = page.getCanvas();
           c.drawBitmap(recycler_view_bm,0,0,null);
            document.finishPage(page);
            document.writeTo(fOut);
            document.close();
            Snackbar snackbar = Snackbar
                    .make(equipmentsRecordActivityLayout, "PDF generated successfully.", Snackbar.LENGTH_LONG)
                    .setAction("Open", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                          openPDFRecord(pdfFile);
                        }
                    });

            snackbar.show();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public Bitmap getScreenshotFromRecyclerView(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);

            for (int i = 0; i < size; i++) {
                Bitmap bitmap = bitmaCache.get(String.valueOf(i));
                bigCanvas.drawBitmap(bitmap, 0f, iHeight, paint);
                iHeight += bitmap.getHeight();
                bitmap.recycle();
            }

        }
        return bigBitmap;
    }
票数 4
EN

Stack Overflow用户

发布于 2017-03-06 23:06:42

下面是从视图生成PDF的示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  //create bitmap from view and returns it
private Bitmap getBitmapFromView(View view) {
    ScrollView hsv = (ScrollView) findViewById(R.id.scrollViewP);
    HorizontalScrollView horizontal = (HorizontalScrollView) findViewById(R.id.hsv);
    int totalHeight = hsv.getChildAt(0).getHeight();
    int totalWidth = horizontal.getChildAt(0).getWidth();
    Bitmap returnedBitmap = Bitmap.createBitmap(totalWidth, totalHeight,Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(returnedBitmap);
    //Get the view's background
    Drawable bgDrawable =view.getBackground();
    if (bgDrawable!=null) {
        //has background drawable, then draw it on the canvas
        bgDrawable.draw(canvas);
    }   else{
        //does not have background drawable, then draw white background on the canvas
        canvas.drawColor(Color.WHITE);
    }
    // draw the view on the canvas
    view.draw(canvas);
    //return the bitmap
    return returnedBitmap;
}
private static void addImage(Document document,byte[] byteArray)
{
    Image image = null;
    try
    {
        image = Image.getInstance(byteArray);
    }
    catch (BadElementException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (MalformedURLException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // image.scaleAbsolute(150f, 150f);
    try
    {
        document.add(image);
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
public void CreatePDF()
{

    File folder = new File(Environment.getExternalStorageDirectory()+File.separator+"PDF Folder");
    folder.mkdirs();

   Date date = new Date() ;
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(date);

   final File myFile = new File(folder + timeStamp + ".pdf");
    try {
        OutputStream output  = new FileOutputStream(myFile);
        Document document = new Document(PageSize.A4);
        try{
            PdfWriter.getInstance(document, output);
            document.open();
          LinearLayout view2 = (LinearLayout)findViewById(R.id.MainLayout);

            view2.setDrawingCacheEnabled(true);
            Bitmap screen2= getBitmapFromView(view2);
            ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
            screen2.compress(Bitmap.CompressFormat.JPEG,100, stream2);
            byte[] byteArray2 = stream2.toByteArray();
            addImage(document,byteArray2);

                document.close();
                AlertDialog.Builder builder =  new AlertDialog.Builder(PaySlip.this, R.style.AppCompatAlertDialogStyle);
                builder.setTitle("Success")
                        .setMessage("enter code herePDF 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(myFile), "application/pdf");
                                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                                startActivity(intent);
                            }

                        }).show();

            //document.add(new Paragraph(mBodyEditText.getText().toString()));
        }catch (DocumentException e)
        {
            //loading.dismiss();
            e.printStackTrace();
        }

    }catch (FileNotFoundException e)
    {
       // loading.dismiss();
      e.printStackTrace();
    }


}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42641215

复制
相关文章
Android RecyclerView从入门到玩坏
前言 RecyclerView在Android界面开发当中是很重要的, 那掌握它也是很必要的. 但是有些时候会觉得它很厚重, 这里就从RecyclerView的基础一直说到扩展, 让你把RecyclerView学薄了. RecyclerView官方文档也是非常厚重. 这篇文章融合了自己原来的多篇文章, 并进行了修正和改进, 而且添加了很多很有趣的内容. 本文需要20分钟以上的阅读时间, 请合理安排. 多图预警, 转载请注明出处! ---- 基础使用 要使用RecyclerView在A
sean_yang
2018/09/04
2.1K0
Android RecyclerView从入门到玩坏
python 创建PDF文件
ubuntu可以直接 apt-get install python-reportlab
py3study
2020/01/08
1.6K0
Mac 快速创建PDF
一、找到Mac的小机器人打开 屏幕快照 2019-04-23 下午3.14.21.png 二、选择文件夹操作点击选取 屏幕快照 2019-04-23 下午3.16.05.png 三、点击 资源库-->
developerbfl
2019/05/08
1.6K0
Mac 快速创建PDF
【RecyclerView】二、RecyclerView 简介 ( RecyclerView 特点 | RecyclerView 涉及到的类 )
RecyclerView 是 Google 官方提供的任何 基于适配器显示的视图 , 可以实现普通列表 ( ListView ) , 网格列表 ( GridView ) , 瀑布流 , 以及各种自定义形式的多容器布局 ;
韩曙亮
2023/03/28
5.3K0
SAS创建单级书签的PDF文件
在用ODS PDF生成PDF文件时,为了美观有时只要一层书签(如上图),下图为多层级书签。
专业余码农
2020/07/16
1K0
SAS创建单级书签的PDF文件
PHP获取目录中的全部内容RecursiveDirectoryIterator
这次我们来介绍一个SPL库中的目录迭代器,它的作用其实非常简单,从名字就可以看出来,就是获取指定目录下的所有内容。之前我们要遍历目录获取目录及目录下的所有文件一般是需要进行递归遍历的,自己写这个代码说实话还是挺麻烦的,所以PHP为我们准备好了这一套内置API,当输入指定的目录后,直接返回该目录下所有子目录及文件内容。当然,并不是树型的,顺序并不一定,想要组织成树型还需要我们自己再进行处理。
硬核项目经理
2020/06/17
1.5K0
RecyclerView | 处理 RecyclerView 中的点击事件
本文是介绍 RecyclerView 入门 系列文章 的第三篇。如果您已经对创建 RecyclerView 有了一定的认识,请继续阅读本文。如果尚未熟悉,建议您首先阅读本系列中的 第一篇文章。
Android 开发者
2022/03/09
2.2K0
Silverlight在线创建PDF(支持中文)
用MS的silverlight来生成Adobe的pdf文档?象不象到肯德基买麦当劳? 哈... 言归正传: 首先要用到下面二个开源库 1.开源项目 http://silverpdf.codeplex.com/ silverlight的pdf开源库 2.FluxJpeg 借助这个可将位图转换化base64字符串,项目官方地址已经找不到了,反正google,baidu一下N多下载 注:社区里总会有一些好心人做善事,愿主保佑他们身体健康,工作顺心,写出更多更好的代码 :) 先看演示:(由于内嵌了一个约7M
菩提树下的杨过
2018/01/23
1.6K0
图文讲解RecyclerView的复用机制 ||Recyclerview进阶
通过前面分析知道LayoutManager在布局子View时会向Recycler索要一个ViewHolder。但从Recycler中获取一个ViewHolder的前提是Recycler中要有ViewHolder。那Recycler中是如何有ViewHolder的呢?本文会分析两个问题:
陈宇明
2020/12/16
2.2K0
图文讲解RecyclerView的复用机制 ||Recyclerview进阶
android-recyclerview嵌套recyclerview
实现思路就是在一个recyclerview的adapter中 在初始化一个recyclerview 的adapter
tea9
2022/07/16
1.8K0
android-recyclerview嵌套recyclerview
RecyclerView定制:通用ItemDecoration及全展开RecyclerView的实现不同场景RecyclerView实现
Android L面世之后,Google就推荐在开发项目中使用RecyclerView来取代ListView,因为RecyclerView的灵活性跟性能都要比ListView更强,但是,带来的问题也不少,比如:列表分割线都要开发者自己控制,再者,RecyclerView的测量与布局的逻辑都委托给了自己LayoutManager来处理,如果需要对RecyclerView进行改造,相应的也要对其LayoutManager进行定制。本文主要就以以下场景给出RecyclerView使用参考: RecyclerVie
看书的小蜗牛
2018/06/29
2.6K0
从0系统学Android--3.6 RecyclerView
首先说明一点昨天发了一篇关于 ListView 的使用入门文章,得到了大家的一致调侃。我的想法是这样的,虽然现在 ListView 已经被 RecyclerView 替代了,但是本系列作为入门系列,力求内容完整!还是有必要提及一下这么重要的控件的,谁能保证老的项目没有 ListView 呢?
开发者
2019/12/26
8550
从0系统学Android--3.6 RecyclerView
Android中RecyclerView嵌套RecyclerView
这两天在做一个新的APP,在考虑用户体验上要一个两级的列表嵌套,于就想看看RecyclerView是否能做出这样的效果,自己写了一个DEMO来做一下测试,最后的效果还是比较满意的。下面我就说一下RecyclerView嵌套RecyclerView的实现。
Vaccae
2019/07/25
7.8K0
RecyclerView使用_recyclerview是什么
RecyclerView是官方在5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件。
全栈程序员站长
2022/11/01
1.3K0
RecyclerView使用_recyclerview是什么
PDF Java库: 创建PDF阅读器和编辑器
在当今移动优先的世界中,创建 Android 应用程序是企业和开发人员的必备技能。而且,随着处理 PDF 文档的需求不断增加,使用功能强大的 PDF SDK ComPDFKit 构建 Android PDF 阅读器和编辑器,能使您的最终用户轻松查看和编辑 PDF。
Youna
2023/07/31
4750
PDF Java库: 创建PDF阅读器和编辑器
【RecyclerView】 九、为 RecyclerView 设置不同的布局样式
① 自定义 RecyclerView.Adapter 泛型类型 : 适配器的泛型类型需要设置为 RecyclerView.ViewHolder , 这是所有 ViewHolder 的基类 ;
韩曙亮
2023/03/28
9030
【RecyclerView】 九、为 RecyclerView 设置不同的布局样式
RecyclerView | 在 RecyclerView 中使用 ListAdapter
本文是介绍 RecyclerView 入门 系列文章 的第二篇。如果您已经对创建 RecyclerView 有了一定的认识,请继续阅读本文。如果尚未熟悉,建议您首先阅读本系列中的 第一篇文章。
Android 开发者
2022/03/09
1.5K0
RecyclerView | 在 RecyclerView 中使用 ListAdapter
Web应用程序如何创建 PDF
在一些场景下,用户都要求一些需要的数据能以 pdf 的格式下载下来。如电子商务商店,经常需要一些报表数据来分析当月的销售情况。
前端小智@大迁世界
2019/07/15
2.8K0
Android--RecyclerView嵌套RecyclerView优化
我们在使用RecyclerView嵌套RecyclerView时,会觉得卡顿,操作不是很顺畅 RecyclerView嵌套RecyclerView滑动.gif 在这个现象中,我们想要水平滑动时,却竖直
aruba
2020/07/02
1.8K0
如何创建PDF格式文件,这个方法教你快速创建
很多人接触到的PDF文件,很多都是从网上下载来的,而这些大都是转换来的,因为PDF本身就是比较安全,兼容性比较好,不论是在阅读还是在传输的时候都是比较便捷的,在办公中用到的还是比较多的,但是PDF文件很难进行修改,想要重新创建一个PDF进行编辑该怎么办呢?如何创建PDF格式文件,这是很多人比较关心的问题,今天来给大家分享一个超级好用的方法哦,然给你快速完成创建。
高效办公
2019/05/21
1.6K0
如何创建PDF格式文件,这个方法教你快速创建

相似问题

从UICollectionView的全部内容创建Pdf?

19

安卓:从RecyclerView打开PDF

113

Pdf.js (用于节点)没有呈现pdf的全部内容

12

从PDF创建可填充的PDF

33

从WebView创建PDF截断PDF

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文