2

我正在为我的学校制作一个应用程序,人们可以检查他们是否有时间表更改。此处列出了所有时间表更改:http ://www.augustinianum.eu/roosterwijzigingen/14062012.pdf 。我想在该页面中搜索关键字(在 EditText 中输入的用户组)。我已经找到了如何让应用程序检查 edittext 是否与某个字符串匹配,所以现在我只需将该页面上的所有文本下载到一个字符串中。但问题是它不是一个简单的网页,而是一个PDFpage。我听说您需要一个特殊的 pdf 库或其他东西来从 PDF 中提取文本,然后将该文本放入一个字符串中,然后使用contains(). 但是我对此有一些疑问:

  • 这个 PDF 是用 PDF 创建器制作的,它不是扫描页面左右。例如,您实际上可以选择文本或使用 CTRL+F 搜索关键字。所以我想知道是否真的需要提取 PDF 和东西,或者是否有更简单的方法。

  • 我希望应用程序每隔一小时检查一次更改。所以它还必须每小时(大约 8 页)下载 PDF 并提取文本,这会消耗很多汁​​液吗?

  • 我听说有很多图书馆可以做我想做的事。那么我应该使用哪个?(如果可能的话,我想要一个免费的:))

  • 谁能向我解释如何在我的代码中使用它?(我不是很有经验,所以请保持简单一点:))

非常感谢你们!!!

4

2 回答 2

4

不幸的是,我没有使用 java,您必须自己在 java 代码中实现它。现在我会告诉你,我最终是如何做到的:

1)我通过您的链接获取了文件。PHP 是通过@fopen("http://...") 来做的。

2)我将它作为二进制文件打开(这很重要)并提取了两部分:

2.1) Data 3 0 obj部分,代表创建和修改日期。我是通过正则表达式做到的。这很简单,我在上面提到过。

2.1)来自 5 0 obj 的数据流,表示放气后的数据。重要的!Microsoft Excel 插入两个字节0D 0A作为换行符。当您通过正则表达式过滤内容时,不要忘记它。开头和结尾的这些字节不必包含在提取的字符串中。

3)我通过函数$uncompressed = @gzuncompress($compressed)对编码的东西进行膨胀并将其放入外部文件中。你可以在那里看到结果

4)最有趣的部分。文本格式的文件内的原始数据。它看起来像[(V)-4(RI)16(J)] TJ,意味着VRIJ。您可以在PDF Reference v1.7第 5 部分中阅读有关 PDF 文本的信息。

5)我相信,正则表达式可以帮助您提取或/和转换数据。

重要提示:我说的是“来自 5 0 obj 的数据流”,但对象的数量“是变化的主题”。您必须从字典->页面->页面->内容链控制对对象的引用。您可以在我上面提到的手册中找到“面包屑”的描述。

不幸的是,Excel 没有在 PDF 中嵌入任何表格结构,但您可以找到文本部分的坐标并对其进行解释。无论如何,这是一团糟。

亲爱的梅林,你觉得这很难吗?不,亲爱的,它不是。这并不难,因为没有 unicode 符号。PDF 中的 unicode 真的很糟糕!

祝你好运!

于 2012-07-31T23:43:27.040 回答
1

此 PDF 由 Microsoft Excel 制作,并带有日期戳:

3 0 obj
<</Author(Janszen, Jan) 
/CreationDate(D:20120613153635+02'00') 
/ModDate(D:20120613153635+02'00') 
/Producer(˛ˇMicrosoftÆ ExcelÆ 2010) 
/Creator(˛ˇMicrosoftÆ ExcelÆ 2010)>>
endobj

您可以使用几乎任何编程语言通过 URL 获取文件并提取“ModDate”内容。新的 ModDate 意味着信息更新。要提取此信息,您不需要任何库 - 这是文件中的文本,第 9、10 和 11 行。

请 Jan Janszen 将您添加到分发列表中。文件中的数据被编码。您必须使用大量编程技术来获取源和恢复信息。

于 2012-07-23T04:30:20.010 回答