【问题标题】:Android: inflating a layout and writting it to PDF produces a blank PDFAndroid:膨胀布局并将其写入 PDF 会产生空白 PDF
【发布时间】:2014-07-31 09:43:26
【问题描述】:

当用户在 Activity 中选择共享按钮时,我想填充布局,填充它,然后使用新的打印 API 将该布局写入 pdf。

在我的片段中

@TargetApi(Build.VERSION_CODES.KITKAT)
  public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    switch (item.getItemId()) {
      case R.id.menu_item_share_context:
        LayoutInflator inflator = getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View container = inflator.inflate(R.layout.person_share, null, false);
        TextView name = (TextView)topContainer.findViewById(R.id.person_name);
        name.setText("Test Name");
        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(612, 792, 1).create()
        PdfDocument.Page page = document.startPage(pageInfo)
        container.draw(page.getCanvas());
        document.finishPage(page)

        // write pdf
        ...

不幸的是,这会输出一个空白的 pdf 文档。但是,当我使用屏幕上已经存在的视图(在 onCreateView(..) 中膨胀)时,它会按预期显示在 pdf 中。

我将不胜感激。

【问题讨论】:

  • 你的布局还没有通过布局和测量通道,所以我猜你的container的宽度和高度都是0。
  • @CommonsWare 谢谢。关于如何使其通过布局和测量通道的任何想法?或者我可以设置一个明确的宽度和高度吗?

标签: android android-layout pdf android-print-framework


【解决方案1】:

如果我的理论是正确的——你的膨胀布局的宽度和高度仍然为零——你可以调用 measure()layout() 来手动调整大小和位置:

root.measure(800, 480);
root.layout(0, 0, 800, 480);

给定一个名为rootView,这将使它(及其子项,如果有)填充一个800 像素宽×480 像素高的空间(例如,WVGA 设备、横向、全屏) .在您的情况下,您应该能够在Canvas 上调用getWidth()getHeight() 来确定用于measure()layout() 的大小。

FWIW,就个人而言,我会生成 HTML 并将其用作打印的基础,而不是布局文件。这是我在this sample project 中演示的技术之一。

【讨论】:

  • 调用“测量”和“布局”有效。谢谢通讯。
  • 根据您对生成 HTML 并使用它进行打印的评论,是否可以从 web 视图创建 PDF 文件并直接保存而不打印?我无法从您的示例项目中弄清楚如何做到这一点。
  • @James:“是否可以从 web 视图创建 PDF 文件并直接保存而不打印?” ——我不相信。抱歉,我以为您的目标是打印,而不仅仅是生成 PDF。
  • 好的,谢谢。可能是stackoverflow.com/questions/20511639/…
  • 我不知道为什么没有人批准这个答案或给予更多的支持。我遇到了同样的问题,这为我解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多