【发布时间】:2020-01-18 02:19:26
【问题描述】:
PdfDocument 是一个可以从 Android 视图生成 PDF 的类。您只需将视图添加到PdfDocument,然后将 PDF 保存到内存中。
但是,我不想添加已经在屏幕中渲染的视图,因为这样的视图只适用于智能手机屏幕,并且我想为打印机生成 PDF 文档。
因此,我想传递一个不渲染的视图。虽然我当然可以这样做,但如何确定尺寸和比例?如何在我的 PDF 中控制它?
更新:
按照clotodex的以下答案,我做到了:
LayoutInflater inflater = getLayoutInflater();
View linearview;
linearview = inflater.inflate(R.layout.printed_order,
findViewById(android.R.id.content),
false);
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(2480, 3508, 0).create();
PdfDocument.Page page = document.startPage(pageInfo);
linearview.draw(page.getCanvas());
document.finishPage(page);
OutputStream outStream;
File file = new File(getExternalFilesDir(null), "pedido.PDF");
try {
outStream = new FileOutputStream(file);
document.writeTo(outStream);
document.close();
outStream.flush();
outStream.close();
但我得到一个空的 PDF。如果我这样做了
View view = findViewById(android.R.id.content);
view.draw(page.getCanvas());
代替
linearview.draw(page.getCanvas());
我得到了我正在进行的活动,这证实了一切都是正确的,除了我试图打印的视图。
【问题讨论】:
-
“但我不知道这个错误来自 2 个布局中的哪一个”——嗯,它与其中一个中的第 18 行相关。追踪起来应该不会太难。或者,编辑您的问题并发布布局,也许有人可以指出哪一个有问题。
-
@CommonsWare 谢谢,我找到了。你能看看我的更新吗?
-
使用
inflater.inflate(R.layout.printed_order, null);,因为您不希望它出现在您的活动布局中。但是,您可能需要在draw()之前调用measure()和layout(),以匹配所需的页面大小(以像素为单位)。