我必须在android studio中将列表视图转换为pdf

我必须在android studio中将列表视图转换为pdf,android,Android,我已经将列表视图数据转换为位图数组,现在需要一个函数来创建pdf,其中包含列表视图数据。此外,当我按下创建pdf按钮时,我需要该pdf自动打开。我需要这个从android棒棒糖开始工作。让我知道我需要添加哪些库。我在网上尝试了很多方法,但一次都不管用,请帮忙。这是我的密码: public class ViewListContents extends AppCompatActivity implements View.OnClickListener { DatabaseHelper myDB;

我已经将列表视图数据转换为位图数组,现在需要一个函数来创建pdf,其中包含列表视图数据。此外,当我按下创建pdf按钮时,我需要该pdf自动打开。我需要这个从android棒棒糖开始工作。让我知道我需要添加哪些库。我在网上尝试了很多方法,但一次都不管用,请帮忙。这是我的密码:

public class ViewListContents extends AppCompatActivity implements View.OnClickListener {

DatabaseHelper myDB;
ArrayList<User> userList;
ListView listView;
User user;
Button btnExport;
public static int REQUEST_PERMISSIONS = 1;
boolean boolean_permission;
boolean boolean_save;
Bitmap bitmap;
ProgressDialog progressDialog;
LinearLayout pdflayout_ll;
List<Bitmap> bmps;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewcontents_layout);

    myDB = new DatabaseHelper(this);

    userList = new ArrayList<>();
    btnExport=(Button) findViewById(R.id.btnExport);
    Cursor data = myDB.getListContents();

    int numRows = data.getCount();

    if(numRows == 0){
        Toast.makeText(ViewListContents.this,"The Database is empty  :(.",Toast.LENGTH_LONG).show();
    }else{
        int i=0;
        while(data.moveToNext()){
            user = new User(data.getString(1),data.getString(2),data.getString(3),data.getString(4));
            userList.add(i,user);
            System.out.println(data.getString(1)+" "+data.getString(2)+" "+data.getString(3)+" "+data.getString(4));
            System.out.println(userList.get(i).getCategory());
            i++;
        }
        FourColumn_ListAdapter adapter =  new FourColumn_ListAdapter(this,R.layout.list_adapter_view, userList);
        listView =  findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }

    //  init();
    pdflayout_ll =  findViewById(R.id.ll_pdflayout);



    fn_permission(); // permission check
    listener(); // button click call
}

private void listener(){
    btnExport.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    progressDialog = new ProgressDialog(ViewListContents.this);
    progressDialog.setMessage("Please wait");
    ListAdapter adapter  = listView.getAdapter();
    int itemscount       = adapter.getCount();
    int allitemsheight   = 0;

    bmps    = new ArrayList<Bitmap>();

    for (int i = 0; i < itemscount; i++) {

        View childView      = adapter.getView(i, null, listView);
        childView.measure(View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.EXACTLY),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

        childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight());
        childView.setDrawingCacheEnabled(true);
        childView.buildDrawingCache();
        bmps.add(childView.getDrawingCache());
        allitemsheight+=childView.getMeasuredHeight();
    }
    Bitmap bigbitmap    = Bitmap.createBitmap(listView.getMeasuredWidth(), allitemsheight, Bitmap.Config.ARGB_8888);
    Canvas bigcanvas    = new Canvas(bigbitmap);
    Paint paint = new Paint();
    int iHeight = 0;
    for (int i = 0; i < bmps.size(); i++) {
        Bitmap bmp = bmps.get(i);
        bigcanvas.drawBitmap(bmp, 0, iHeight, paint);
        iHeight+=bmp.getHeight();
        bmp.recycle();
        bmp=null;
    }

    bitmap = bigbitmap;

//        bitmap = loadBitmapFromView(findViewById(R.id.listView), pdflayout_ll.getWidth(), pdflayout_ll.getHeight());
    //bitmap = loadBitmapFromView(listView, listView.getWidth(), listView.getHeight());
    //bitmap = loadBitmapFromView(listView, 100, 100);
    createPdf();
}

//@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void createPdf() throws IOException {

}


    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics displaymetrics = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    float hight = displaymetrics.heightPixels ;
    float width = displaymetrics.widthPixels ;
    int convertHighet = (int) hight, convertWidth = (int) width;

    //      Resources mResources = getResources();
//        Bitmap bitmap = BitmapFactory.decodeResource(mResources, R.drawable.screenshot);

    try {

        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(convertWidth, convertHighet, 1).create();
        PdfDocument.Page page = document.startPage(pageInfo);
        Canvas canvas = page.getCanvas();


        Paint paint = new Paint();
        canvas.drawPaint(paint);

        //bitmap = Bitmap.createScaledBitmap(bitmap, convertHighet, convertWidth, true);

        paint.setColor(Color.YELLOW);
        canvas.drawBitmap(bitmap, 0, 0, null);
        document.finishPage(page);


        // write the document content
        String targetPdf = "/sdcard/test1.pdf";
        File filePath = new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));
            btnExport.setText("CREATE PDF");
            boolean_save=true;
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show();
        }

        // close the document
        document.close();
    }
    catch (Exception ex)
    {
        Log.e("DEBUG PDF", "Exception: " + ex.toString());
    }
}



public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.draw(c);

    return b;
}

private void fn_permission() {
    if ((ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)||
            (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {

        if ((ActivityCompat.shouldShowRequestPermissionRationale(ViewListContents.this, android.Manifest.permission.READ_EXTERNAL_STORAGE))) {
        } else {
            ActivityCompat.requestPermissions(ViewListContents.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},
                    REQUEST_PERMISSIONS);
        }

        if ((ActivityCompat.shouldShowRequestPermissionRationale(ViewListContents.this, Manifest.permission.WRITE_EXTERNAL_STORAGE))) {
        } else {
            ActivityCompat.requestPermissions(ViewListContents.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    REQUEST_PERMISSIONS);

        }
    } else {
        boolean_permission = true;

    }
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_PERMISSIONS) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            boolean_permission = true;
        } else {
            Toast.makeText(getApplicationContext(), "Please allow the permission", Toast.LENGTH_LONG).show();
        }
    }
 }


}
公共类ViewListContents扩展AppCompatActivity实现View.OnClickListener{
数据库助手myDB;
ArrayList用户列表;
列表视图列表视图;
用户;
按钮btnExport;
公共静态int请求_权限=1;
布尔权限;
布尔保存;
位图;
进行对话进行对话;
线性布局pdflayout ll;
列出BMP;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewcontents\u布局);
myDB=新数据库助手(此);
userList=newarraylist();
btnExport=(按钮)findViewById(R.id.btnExport);
游标数据=myDB.getListContents();
int numRows=data.getCount();
如果(numRows==0){
Toast.makeText(ViewListContents.this,“数据库为空:(.”,Toast.LENGTH_LONG).show();
}否则{
int i=0;
while(data.moveToNext()){
user=新用户(data.getString(1)、data.getString(2)、data.getString(3)、data.getString(4));
添加(i,用户);
System.out.println(data.getString(1)+“”+data.getString(2)+“”+data.getString(3)+“”+data.getString(4));
System.out.println(userList.get(i.getCategory());
i++;
}
FourColumn_ListAdapter=新的FourColumn_ListAdapter(这个,R.layout.list_adapter_视图,用户列表);
listView=findViewById(R.id.listView);
setAdapter(适配器);
}
//init();
pdflayout\u ll=findviewbyd(R.id.ll\u pdflayout);
fn_permission();//权限检查
listener();//按钮单击调用
}
私有void侦听器(){
btnExport.setOnClickListener(这个);
}
@凌驾
公共void onClick(视图){
progressDialog=新建progressDialog(ViewListContents.this);
progressDialog.setMessage(“请稍候”);
ListAdapter=listView.getAdapter();
int itemscont=adapter.getCount();
int-allitemsheight=0;
bmps=新的ArrayList();
对于(int i=0;i