我需要某种算法,它会尝试在PDF的指定页面上找到可用空间。
我正在寻找的空间是100x100像素的正方形。我想从右下方开始搜索,连续向左移动,然后逐渐向上移动行,直到找到合适的空间(自由空间/空格)或返回错误,没有自由空间。
任何人都知道在Android中存在这种可能性吗?如果没有,我该如何实施呢?
修改
我最近对此进行了相当多的研究,我是否正确地假设,在文档呈现之前找不到自由点?因为如果我得到它,那么每个矢量和每个物体都应放在它的位置,只是为了找到自由空间?意思是,没有向量相交的地方?
答案 0 :(得分:1)
您肯定需要渲染PDF。你可以使用像poppler这样的东西,然后搜索白色区域。这是一个使用poppler的开源Android应用程序,您可以将其修改/用作灵感:
http://code.google.com/p/apdfviewer/
获得渲染的PDF后,您可以使用Boyer-Moore string search algorithm之类的内容来查找空间。即在1D你试图在“+++ ...... ++ ..... + ...........”中找到字符串“.......”。 =白色,+ =不是白色。
在2D中它会更复杂,我能想到的最有效的事情就是这样:
如果你明白我的意思......就像这样:
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);
}
}
嗯,我已经可以看到这个代码有些问题......但希望你能得到这个想法。我希望算法已经存在但不幸的是我不知道它的名称。