使用itextg在android studio中创建多个页面pdf

时间:2018-04-15 10:35:22

标签: android listview pdf itextg

你好,你好朋友.....我在这里是因为我想从android listview创建多页pdf我已成功实现将所有listview项目转换为pdf,即使它们并非全部可见使用itextg问题如果列表视图中的项目或列表视图的捕获图像超出了pdf页面的长度,那么我面临的是它切割的其余项目...... 所以我想要的是创建一个多页pdf,如果第一页已满,然后在secod图像中写下其余的图像部分....我希望我很快就会响应.........这些是通过捕获所有listview项目来创建pdf的代码....

//method wich generate pdf of the attendance data
    private void save_as_pdf() {
        //First Check if the external storage is writable
        String state = Environment.getExternalStorageState();
        if (!Environment.MEDIA_MOUNTED.equals(state)) {
            // Toast.makeText(context,"")
        }

        //Create a directory for your PDF
        final File pdfDir = new File(Environment.getExternalStorageDirectory() + "/Documents", "attendance_report");
        if (!pdfDir.exists()) {

            pdfDir.mkdir();
        }

        //take  screen shoot of the entire listview of the attendance report
        ListView listview = studentlist;
        ListAdapter adapter = listview.getAdapter();
        int itemscount = adapter.getCount();
        int allitemsheight = 0;
        List<Bitmap> 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);
        bigcanvas.drawColor(getResources().getColor(R.color.white));
        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;
        }

        //Now create the name of your PDF file that you will generate
        File pdfFile = new File(pdfDir, "report_for( " + course + "," + semister + section + "," + date + ").pdf");


        try {
            com.itextpdf.text.Document document = new com.itextpdf.text.Document();

            PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
            document.addTitle("Attendance Report Generated For course:" + course + "  Semester:" + semister + "  Section:" + section + "  Date:" + date);
            document.addHeader("Header", "Department Of Information Science");
            document.addCreator("Department Of Information Science");
            document.addCreationDate();
            document.bottomMargin();
            document.setPageCount(3);
            document.open();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bigbitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            addImage(document, byteArray);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private void addImage(com.itextpdf.text.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();
        }
    }

1 个答案:

答案 0 :(得分:0)

//take screen shot all records from listview
    for (int i = 0; i < itemscount; i++) {
        listview.setSelection(i);
        View childView = adapter.getView(i, null, listview);
        ViewGroup.LayoutParams lp = childView.getLayoutParams();
        if (lp == null) {
            lp = new ViewGroup.LayoutParams(-2,-2);
        }
        lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;
        childView.setLayoutParams(lp);
        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();
}