【问题标题】:How to count the number of pages in a PDF from R?如何计算来自 R 的 PDF 中的页数?
【发布时间】:2016-11-16 19:00:22
【问题描述】:

有没有办法从 R 计算 PDF 文件的页数?如果没有,是否有另一种独立于操作系统的方法来做到这一点?到目前为止,我找到的唯一答案是this,它是特定于 Windows 7 的。

我正在尝试在 R 和 knitr 中编译一些报告,聚合来自先前脚本的 PDF 绘图输出,该脚本自动处理数百个数据集。一些数据集很糟糕,最终破坏了绘图功能。由于 plot 函数包含在 pdf 函数中,因此会生成一个空的 PDF 文件,该文件会被报告找到并中断 pdflatex。尝试修改分析脚本以避免一开始就生成这些 PDF 已被证明是困难的,并且是非常特定于案例的。我真的很想有一些可以嵌入到报告中的功能,在包含之前检查 PDF 是否有 >=1 页。我更喜欢基于 R 的解决方案,尽管 bash、LaTeX、knitr 或 pdflatex 解决方案也可能就足够了。

编辑:另外,正如我链接到的上一个答案中提到的,我尝试使用 Rpoppler (here) 但无法编译。我在没有管理员访问权限的 CentOS 6 环境中使用 R 版本 3.3.0。

【问题讨论】:

  • 查看pdftools pkg
  • 我现在正在尝试pdftools,但到目前为止我无法在 CentOS 6 中编译它,而且由于这是一个服务器,我没有管理员权限来尝试安装它的系统依赖项。
  • 我不确定这是否有帮助,但您可以使用 system 从 R 进行系统级调用,因此您可以使用 pdfinfo(例如,pdfinfo file.pdf | grep 'Pages')。 jk。 Centos 似乎没有附带 pdfinfo(我猜它在 poppler 库中?)。无视我。
  • @Tad Dallas 我试过了,将Pages: # 输出返回到 R 并解析和测试给定的数字,到目前为止它可以工作。谢谢。不过,我仍然对 R 或其他更通用的答案感兴趣,因为这在我的 Mac 上的 OS X 上不起作用,因此从长远来看它不会像需要的那样便携。
  • 紧。您应该可以install poppler on OS X,因此命令将保持不变。无论如何,任何 R 解决方案都会调用这些库,对吗?身份证。

标签: r pdf


【解决方案1】:

其他建议和代码似乎不必要地不透明或复杂。一旦安装了pdftoolspdf_info 命令将返回一个 pages 字段:

    library(pdftools)
    # returns number of pages
    # assumes your_file_name.pdf is in working directory
    pdf_info("your_file_name.pdf")$pages  
    
    # to see other available metadata in pdf_info object, use names()
    names(pdf_info("your_file_name.pdf")) 

【讨论】:

    【解决方案2】:

    下面的脚本对我有用。

    #########################################
    #GET PDF PAGE NUMBER :: R - JULY 16
    ##########################################
    
    ##SOURCE
    #----pdftools package
    #https://cran.rstudio.com/web/packages/pdftools
    
    #Requirement
    #brew install poppler
    ## TO AVOID ERROR ::: configure: error: cannot determine poppler-glib compile/link flags
    
    #INSTALL PACKAGES
    #install.packages("pdftools", dependencies=TRUE)  #only once
    
    #IN/OUT FILES
    in_put_pdf="pathTo/test.pdf"
    out_put_pdf="pathTo/testCopy.pdf"
    
    #LOAD LIBS
    library(pdftools)
    
    #Copy of the original file
    file.copy(file.path(Sys.getenv("PATH_TO_PDF_FILE"), in_put_pdf), out_put_pdf)
    
    #Many informations about the file are displayed here
    info <- pdf_info(out_put_pdf)
    text <- pdf_text(out_put_pdf)
    fonts <- pdf_fonts(out_put_pdf)
    files <- pdf_attachments(out_put_pdf)
    
    
    #To get the number of pages
    numberOfPageInPdf = info[2]
    numberOfPageInPdf
    

    希望能有所帮助。祝你好运。

    【讨论】:

    • 这看起来很有希望,但我仍然无法在我的主服务器上安装 pdftools 包,因此我可能需要一段时间才能对其进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2014-06-29
    • 1970-01-01
    • 2023-03-28
    • 2015-08-04
    相关资源
    最近更新 更多