当我从 ListView 使用 itextg 创建 pdf 时,只会出现相同的 listview 子项

When I create pdf with itextg from ListView only the same listview child appears

我正在尝试从列表视图项目创建 pdf。这是我的列表视图:

这是结果:

下面是我的代码:

ListView def = (ListView) findViewById(R.id.ist);
ListAdapter adapter = def.getAdapter();
int itemscount = adapter.getCount();
/*int itemsposition = adapter.getItem(position);*/
Toast.makeText(getApplicationContext(), itemscount + " temaxia", Toast.LENGTH_LONG).show();
int allitemsheight = 0;
List<Bitmap> bmps = new ArrayList<Bitmap>();

for (int i = 0; i < itemscount ; i++) {
    View childView = adapter.getView(i, null, def);
    /*View childView = def.getChildAt(1);*/
    childView.measure(View.MeasureSpec.makeMeasureSpec(def.getWidth(),
        View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    childView.layout(0, 0, childView.getMeasuredWidth(),
        childView.getMeasuredHeight());
    childView.setDrawingCacheEnabled(true);
    childView.buildDrawingCache();
    childView.getDrawingCache();
    /*bmps.add(childView.getDrawingCache());
    allitemsheight+=childView.getMeasuredHeight();*/
    Bitmap bigbitmap = Bitmap.createBitmap(def.getMeasuredWidth(),
        childView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

    Canvas bigcanvas = new Canvas(bigbitmap);
    def.draw(bigcanvas);
    Paint paint = new Paint();
    bigcanvas.drawBitmap(bigbitmap,0,childView.getMeasuredHeight(),paint);
    bigbitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    Image myImg = Image.getInstance(stream.toByteArray());
    myImg.scalePercent(45, 60);
    myImg.setAlignment(Image.ALIGN_CENTER);

    // add image to document
    doc.add(myImg);
    doc.add( new Paragraph());
}

我只是找不到为什么尽管它在 for 循环内,但它只在第一个位置获得子视图。谁能帮我?谢谢

我将所有概念更改为:从所有子视图创建一个大图像,然后将其剪切为多个页面 A4 size.See 下面....注意第一个文档永远不会打开也永远不会关闭,但是之后创建图像文档正确打开和关闭......
文件 file = new File(dir, flname + ".pdf"); FileOutputStream fOut = new FileOutputStream(文件); FileOutputStream fOut2 = new FileOutputStream(文件);

                    pdfWriter.getInstance(doc, fOut);

                    // open the document
                   /* doc.open();*/
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();

                    //////////////////////

                    ListView def = (ListView) findViewById(R.id.ist);


                    ListAdapter adapter = def.getAdapter();
                    int itemscount = adapter.getCount();
                    /*int itemsposition = adapter.getItem(position);*/
                    Toast.makeText(getApplicationContext(), itemscount + " temaxia", Toast.LENGTH_LONG).show();
                    View childView =null;
                    int allitemsheight = 0;

                    List<Bitmap> bmps = new ArrayList<Bitmap>();
                    for (int i = 0; i < itemscount ; i++) {
                        childView = adapter.getView(i,null,def);
                        /*childView = def.getChildAt(i);*/
                        childView.measure(View.MeasureSpec.makeMeasureSpec(def.getWidth(),
                                View.MeasureSpec.EXACTLY),
                                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                        childView.layout(0, 0, childView.getMeasuredWidth(),
                                childView.getMeasuredHeight());
                        childView.setDrawingCacheEnabled(true);
                        childView.buildDrawingCache();
                        /*childView.getDrawingCache();*/
                        bmps.add(childView.getDrawingCache());

                        allitemsheight+=childView.getMeasuredHeight();

                    }
                    Bitmap bigbitmap = Bitmap.createBitmap(def.getMeasuredWidth(),
                            allitemsheight , Bitmap.Config.ARGB_8888);
                    Paint paint = new Paint();
                    Canvas bigcanvas = new Canvas(bigbitmap);

                    for (int i = 0; i < bmps.size(); i++) {
                        Bitmap bmp = bmps.get(i);
                        bigcanvas.drawBitmap(bmp, 0, iHeight, paint);
                        /*bigcanvas.drawColor(Color.WHITE);
                        def.draw(bigcanvas);*/

                        iHeight+=bmp.getHeight();
                        bmp.recycle();
                        bmp=null;


                    }
                    bigbitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                    Image myImg = Image.getInstance(stream.toByteArray());
                    myImg.scalePercent(45, 60);
                    myImg.setAlignment(Image.ALIGN_CENTER);



                    /*if(myImg.getWidth() >= doc.getPageSize().getWidth() || myImg.getHeight() >= doc.getPageSize().getHeight()){
                        myImg.scaleToFit(doc.getPageSize());
                        doc.newPage();
                    }
                    myImg.setAbsolutePosition((doc.getPageSize().getWidth() - myImg.getScaledWidth()) / BaseField.BORDER_WIDTH_MEDIUM, (doc.getPageSize().getHeight() - myImg.getScaledHeight()) / BaseField.BORDER_WIDTH_MEDIUM);

                    doc.add(myImg);
                    doc.add( new Paragraph());*/


                    ///////////////////////////////////////
                    /////////////////////////////////////////
                    /////////////////////////////////////
                    Document document = new Document();
                    PdfWriter pdfWriter2 = PdfWriter.getInstance(document, fOut2);

                    document.open();

                    PdfContentByte content = pdfWriter2.getDirectContent();
                    myImg.scaleAbsolute(PageSize.A4);
                    myImg.setAbsolutePosition(0, 0);

                    float width = PageSize.A4.getWidth();
                    float heightRatio = myImg.getHeight() * width / myImg.getWidth();
                    int nPages = (int) (heightRatio / PageSize.A4.getHeight());
                    float difference = heightRatio % PageSize.A4.getHeight();

                    while (nPages >= 0) {
                        document.newPage();
                        content.addImage(myImg, width, 0, 0, heightRatio, 0, -((--nPages * PageSize.A4.getHeight()) + difference));
                    }
                    document.close();



                } catch (DocumentException de) {
                    Log.e("PDFCreator", "DocumentException:" + de);
                } catch (IOException e) {
                    Log.e("PDFCreator", "ioException:" + e);
                } finally {
                    /*doc.close();*/
                }