在空页

时间:2015-12-10 12:09:00

标签: android pdf android-canvas

我试图从我以编程方式创建的视图中创建PDF文件。似乎只有在将视图添加到我的主布局时才能正确创建pdf,但我不想这样做。这是我的测试代码:

RelativeLayout layout;

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

    ImageView imgView = (ImageView) findViewById(R.id.imageView);
    mainView = (RelativeLayout) findViewById(R.id.main_layout); 

    layout = new RelativeLayout(this);

    RelativeLayout.LayoutParams imgParams = new RelativeLayout.LayoutParams(800, 800);
    imgParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    imgParams.addRule(RelativeLayout.ALIGN_PARENT_START);

    ImageView newImg = new ImageView(this);
    newImg.setLayoutParams(imgParams);
    newImg.setImageDrawable(imgView.getDrawable());

    layout.addView(newImg);
}

private void create() {
    layout.layout(0, 0, 1000, 1000);

    layout.post(new Runnable() {
        @Override
        public void run() {
            createPdf();
        }
    });
}

private void createPdf() {
    OutputStream os = null;
    File file = null;

    PdfDocument pdfDoc = new PdfDocument();
    PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(1000, 1000, 1).create();
    PdfDocument.Page page = pdfDoc.startPage(pageInfo);

    layout.draw(page.getCanvas());

    pdfDoc.finishPage(page);

    try {
        file = new File(Environment.getExternalStorageDirectory(), "page.pdf");
        os = new BufferedOutputStream(new FileOutputStream(file));
        pdfDoc.writeTo(os);
        pdfDoc.close();
        os.close();

    } catch (IOException e) {

    }
}

这会创建一个空的pdf。如果我在create()中添加这两行代码,则可以:

    mainView.removeAllViews();
    mainView.addView(layout);

但我不想删除主视图中的内容。我怎样才能做到这一点?

编辑:

我找到了一个可能的解决方案。无论出于何种原因,它想要附加到在xml中静态定义的视图。因此,在xml中定义一个具有id的空视图组。您可以在onCreate()中获得引用,然后您基本上可以使用上面的代码,而是在此视图中使用addView()。哦,并将视图组设置为不可见,因为您不希望它被显示。我只在一台设备上测试过。

1 个答案:

答案 0 :(得分:1)

layout.measure(1000,1000); layout.layout(0,0,1000,1000);

我遇到了类似的问题,这为我解决了这个问题。

Android: inflating a layout and writting it to PDF produces a blank PDF