MATLAB提供了extractFileText函数,它允许我们从PDF文件中读取文本以及其他文件格式,并将提取的文本保存为字符串。
我们可以向这个函数传递一个额外的参数,以便从文档的特定页面中提取文本。
例如,要从示例exampleSonnets.pdf文件中提取第3、5和7页的文本:
str = extractFileText("exampleSonnets.pdf", 'Pages', [3 5 7]);然而,这个函数并没有提供一种方法来找出PDF文档预先包含的总页数。
所以如果我们碰巧做了这样的事情:
str = extractFileText("exampleSonnets.pdf", 'Pages', [99 100]);引发以下错误:
Error using extractFileText (line 95)
No page 100 in file. Maximum page number: 47.警告我们,我们请求的页数超过了文档中的实际页数。
这很好。
但是,如何在不触发错误的情况下预先知道PDF文档中的总页数,以便安全地将搜索范围缩小到最大页数?
有这方面的功能吗?
发布于 2019-01-13 13:43:44
我不知道是怎么让你这么做的。但是您可以使用try/catch直接处理这种情况,而不需要事先知道页面的数量。
如果您确实需要事先知道页面的数量,您只需遍历页面,直到遇到使用try/catch (为小pdfs工作)处理的错误为止,或者以类似的方式实现二进制搜索。
发布于 2019-01-13 14:46:43
flawr's idea其实很聪明!
实际上,由于最大页码包含在错误消息中,所以我们可以触发异常(故意请求任何可笑的大页码),捕获它,然后解析错误消息以恢复最大页码。
No page 100 in file. Maximum page number: 47.
^
This is all we need因此,我们甚至不需要遍历文档的每一页:)
我继续做了这个简单的numpages函数:
function [num] = numpages(filename)
% Queried page number. Any big number should do.
bignum = 1e6;
try
extractFileText(filename, 'Pages', bignum);
catch ME
if strcmp(ME.identifier, 'textanalytics:extractFileText:NoSuchPage')
% Extract the Maximum page number from the exception message.
num = str2double(extractBetween(ME.message, "number: ", "."));
else
% Not the exception we are interested in. Rethrow it.
rethrow(ME);
end
end
end测试用例:
>> numpages("exampleSonnets.pdf")
ans =
47它起作用了!
https://stackoverflow.com/questions/54169251
复制相似问题