首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDF文档中的总页数

PDF文档中的总页数
EN

Stack Overflow用户
提问于 2019-01-13 13:19:07
回答 2查看 311关注 0票数 1

MATLAB提供了extractFileText函数,它允许我们从PDF文件中读取文本以及其他文件格式,并将提取的文本保存为字符串。

我们可以向这个函数传递一个额外的参数,以便从文档的特定页面中提取文本。

例如,要从示例exampleSonnets.pdf文件中提取第3、5和7页的文本:

代码语言:javascript
复制
str = extractFileText("exampleSonnets.pdf", 'Pages', [3 5 7]);

然而,这个函数并没有提供一种方法来找出PDF文档预先包含的总页数。

所以如果我们碰巧做了这样的事情:

代码语言:javascript
复制
str = extractFileText("exampleSonnets.pdf", 'Pages', [99 100]);

引发以下错误:

代码语言:javascript
复制
Error using extractFileText (line 95)
No page 100 in file. Maximum page number: 47.

警告我们,我们请求的页数超过了文档中的实际页数。

这很好。

但是,如何在不触发错误的情况下预先知道PDF文档中的总页数,以便安全地将搜索范围缩小到最大页数?

有这方面的功能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-13 13:43:44

我不知道是怎么让你这么做的。但是您可以使用try/catch直接处理这种情况,而不需要事先知道页面的数量。

如果您确实需要事先知道页面的数量,您只需遍历页面,直到遇到使用try/catch (为小pdfs工作)处理的错误为止,或者以类似的方式实现二进制搜索。

票数 2
EN

Stack Overflow用户

发布于 2019-01-13 14:46:43

flawr's idea其实很聪明!

实际上,由于最大页码包含在错误消息中,所以我们可以触发异常(故意请求任何可笑的大页码),捕获它,然后解析错误消息以恢复最大页码。

代码语言:javascript
复制
No page 100 in file. Maximum page number: 47.
                                           ^
                                   This is all we need

因此,我们甚至不需要遍历文档的每一页:)

我继续做了这个简单的numpages函数:

代码语言:javascript
复制
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

测试用例:

代码语言:javascript
复制
>> numpages("exampleSonnets.pdf")

ans =

    47

它起作用了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54169251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档