Android: PdfDocument generates empty pdf

前端 未结 4 1531
无人及你
无人及你 2020-12-14 19:20
        PdfDocument document = new PdfDocument();
        // crate a page description
        PageInfo pageInfo = new PageInfo.Builder(300, 300, 1).create();
                


        
4条回答
  •  佛祖请我去吃肉
    2020-12-14 20:00

    i have the have, but after a lot of test, i realise that my View was with 0 heigth and 0 width, since i was using a TextView. So i managed to wait till view (TextView) will load and after start creating document, take a look at the code, hope you will fix it:

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
    
         final TextView tv = (TextView) findViewById(R.id.textView1);
            ViewTreeObserver vto = tv.getViewTreeObserver(); 
            vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
                @Override 
                public void onGlobalLayout() { 
                    Toast.makeText(MainActivity.this, tv.getWidth() + " x " + tv.getHeight(), Toast.LENGTH_LONG).show();    
    
                    try {
                        File file1 = new File("/mnt/sdcard/test/");
                        if(!file1.exists()){
                            file1.mkdirs();
                        }
    
                        File file = new File("/mnt/sdcard/test", "filename"+System.currentTimeMillis()+".pdf");
                        PrintAttributes printAttrs = new PrintAttributes.Builder().
                                setColorMode(PrintAttributes.COLOR_MODE_COLOR).
                                setMediaSize(PrintAttributes.MediaSize.ISO_A4).
                                setResolution(new Resolution("zooey", PRINT_SERVICE, 450, 700)).
                                setMinMargins(Margins.NO_MARGINS).
                                build();
                        PdfDocument document = new PrintedPdfDocument(MainActivity.this, printAttrs);
                         PageInfo pageInfo = new PageInfo.Builder(450, 700, 1).create();
                         Page page = document.startPage(pageInfo);
    
                         if (page != null) {
    
                               View view = findViewById(R.id.textView1);//getContentView();                          
                               view.layout(0, 0, view.getWidth(),
                                       view.getHeight());
                               Log.i("draw view", " content size: "+view.getWidth()+" / "+view.getHeight());
                               view.draw(page.getCanvas());
                               // Move the canvas for the next view.
                               page.getCanvas().translate(0, view.getHeight());
                           }    
    
                         document.finishPage(page);
                         os = new FileOutputStream(file);
                                document.writeTo(os);
                                document.close();
                                os.close();
                                Log.i("done", file.getAbsolutePath().toString());
    
                            } catch (IOException e) {
                                throw new RuntimeException("Error generating file", e);
                            }
    
                    tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                } 
            });
    
    }
    

    the magic inside:

     final TextView tv = (TextView) findViewById(R.id.textView1);
            ViewTreeObserver vto = tv.getViewTreeObserver(); 
            vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
                @Override 
                public void onGlobalLayout() { 
             // create document here
    } 
            });
    

提交回复
热议问题