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
}
});