在Android上的PDF页面上查找可用空间

时间:2012-02-09 08:52:53

标签: android pdf

我需要某种算法,它会尝试在PDF的指定页面上找到可用空间。

我正在寻找的空间是100x100像素的正方形。我想从右下方开始搜索,连续向左移动,然后逐渐向上移动行,直到找到合适的空间(自由空间/空格)或返回错误,没有自由空间。

任何人都知道在Android中存在这种可能性吗?如果没有,我该如何实施呢?

修改

我最近对此进行了相当多的研究,我是否正确地假设,在文档呈现之前找不到自由点?因为如果我得到它,那么每个矢量和每个物体都应放在它的位置,只是为了找到自由空间?意思是,没有向量相交的地方?

1 个答案:

答案 0 :(得分:1)

您肯定需要渲染PDF。你可以使用像poppler这样的东西,然后搜索白色区域。这是一个使用poppler的开源Android应用程序,您可以将其修改/用作灵感:

http://code.google.com/p/apdfviewer/

获得渲染的PDF后,您可以使用Boyer-Moore string search algorithm之类的内容来查找空间。即在1D你试图在“+++ ...... ++ ..... + ...........”中找到字符串“.......”。 =白色,+ =不是白色。

在2D中它会更复杂,我能想到的最有效的事情就是这样:

  1. 沿着行搜索,直至找到足够的空间。
  2. 转到下一行并沿着它搜索到您在上面一行中的位置。
  3. 如果您在此之前找到空格,请重复步骤2,然后继续。
  4. 如果你明白我的意思......就像这样:

    void search(int row, int space_pos, int space_height_so_far)
    {
      for (int x = find_next_space(row, 0); x < space_pos; x = find_next_space(row, x+1))
      {
         search(row+1, x, 0);
      }
      if (is_space(row, space_pos))
      {
         if (space_height_so_far > ?)
            cout << "Space found at " << row << ", " << space_pos << endl;
         else
            search(row+1, previous_space_pos, space_height_so_far);
      }
    }
    

    嗯,我已经可以看到这个代码有些问题......但希望你能得到这个想法。我希望算法已经存在但不幸的是我不知道它的名称。