【问题标题】:Total number of pages in a PDF documentPDF 文档的总页数
【发布时间】:2019-06-07 17:13:08
【问题描述】:

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 文档中的总页数,而不触发错误,以便我可以安全地将搜索范围缩小到最大页数?

有这个功能吗?

【问题讨论】:

    标签: matlab pdf


    【解决方案1】:

    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
    

    有效!

    【讨论】:

      【解决方案2】:

      我不知道有什么方法可以让你这样做。但是你可以使用try/catch直接处理这种情况,而不需要事先知道页数。

      如果您确实需要事先知道页数,您可以遍历页面,直到遇到您使用 try/catch 处理的错误(适用于小型 pdf)或实施例如以类似的方式进行二分搜索。

      【讨论】:

      • 这是一个非常好的解决方法!我把你的想法变成了代码并发布了this answer。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 2015-12-10
      • 1970-01-01
      相关资源
      最近更新 更多