【问题标题】:How to check that a PDF file has some link with Ruby/Rspec?如何检查 PDF 文件是否与 Ruby/Rspec 有链接?
【发布时间】:2019-04-05 13:20:45
【问题描述】:

我正在使用prawnpdf/pdf-inspector 来测试在我的 Rails 应用程序中生成的 PDF 内容是否正确。

我想检查 PDF 文件是否包含带有特定 URL 的链接。我查看了yob/pdf-reader,但没有找到与该主题相关的任何有用信息

是否可以使用 Ruby/RSpec 测试 PDF 中的 URL?

我想要以下内容:

expect(urls_in_pdf(pdf)).to include 'https://example.com/users/1'

【问题讨论】:

  • 您面临的具体问题是什么?因为您使用pdf-inspector,所以您拥有pdf的整个文本,对吗?
  • @DoktorOSwaldo 我想检查 PDF 中包含的链接是否具有正确的 HREF
  • 是的,那你不应该只搜索文本中的<a href='url'>标签吗?
  • @DoktorOSwaldo pdf-inspector 和 pdf-reader 无法从 PDF 内容中读取 href。如果 PDF 包含 <a href='url'>URL</a> 之类的链接,则 pdf 阅读器仅返回解析文本中的 URL

标签: ruby pdf rspec pdf-generation


【解决方案1】:

https://github.com/yob/pdf-reader 包含一个用于每个页面的方法,称为文本。 做类似的事情

    pdf = PDF::Reader.new("tmp/pdf.pdf")
    assert pdf.pages[0].text.include? 'https://example.com/users/1'

假设您要查找的内容在第一页

【讨论】:

    【解决方案2】:

    由于pdf-inspector 似乎只返回文本,您可以尝试直接使用pdf-readerpdf-inspector 无论如何都会使用它)。

    reader = PDF::Reader.new("somefile.pdf")
    
    reader.pages.each do |page|
      puts page.raw_content # This should also give you the link
    end
    

    无论如何,我只是快速浏览了一下 github 页面。我不确定raw_content 究竟返回了什么。但是也有一种底层方法可以直接访问pdf的对象:

    reader  = PDF::Reader.new("somefile.pdf")
    puts reader.objects.inspect
    

    这样肯定是可以得到网址的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 2014-05-23
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多