【问题标题】:Inline PDF viewer内联 PDF 查看器
【发布时间】:2011-07-31 23:57:45
【问题描述】:

是否有 PDF 查看器,我可以将其嵌入到我的 HTML 中,并且可以根据需要设置样式。

实际上我需要展示一些 PDF 文件的页面并自定义我自己的 UI(翻页和评论的几个按钮)。

如果有任何 Ruby 解决方案(据我了解,这实际上与编程无关),那就太好了。

我想显示 pdf 因为:

  • 用户可以复制文本
  • 文本采用原始布局

所以我不想将其显示为图像或转换后的文本。但我想以简单的设计显示页面。没有 Flex 之类的。

【问题讨论】:

  • 不是把PDF转成HTML,而是把PDF嵌入到HTML页面中
  • @peteorpeter,顺便说一句,该链接在我的收藏夹中 :)
  • 啊,我现在看到了您问题中的区别。也就是说,根据@Marc B 的回答,您无法控制 browser 插件。我认为您需要在后端将 PDF 转换为 Web 标准格式(HTML/CSS、Canvas/SVG) - 实质上是在服务器端制作插件。
  • 我无法正确转换为 HTML

标签: html ruby pdf


【解决方案1】:

不需要外部库。许多浏览器已经支持多种方式来查看 pdf。像对象,iframe,嵌入。您可以使用带有 iframe 后备的对象,作为下载时的后备:

<object data="/pdf/sample-3pp.pdf#page=2" type="application/pdf" height="100%" width="100%">
<iframe src="/pdf/sample-3pp.pdf#page=2" style="border: none;" height="100%" width="100%">
This browser does not support PDFs. Please download the PDF to view it: <a href="/pdf/sample-3pp.pdf">Download PDF</a>
</iframe>
</object>

Source

【讨论】:

    【解决方案2】:

    您也可以将 PDF 转换为 HTML5 并使用 IDRSolutions 的 PDF2HTML5 产品显示这些页面。输出可以放在您自己的 CMS 中,您可以添加自己的 GUI,也可以使用现有选项。您可以查看free converter 上的潜在输出并根据需要试用它,它是一个 100% 的 Java 库,尽管可能有问题,也可能没有问题。

    注意:为了透明起见,值得一提的是,我目前是该产品的开发人员,因此非常熟悉它的功能。

    还值得注意的是 pdf.js 并不总是与实际的 pdf 完全匹配,但很难获得完全匹配并仍然保留您想要的一些关键功能。但是,它在大多数情况下确实做得很好。

    【讨论】:

    • 另外需要注意的是,pdf.js 不会被 Google 等搜索引擎索引,出站链接也不会像这个转换器那样被索引。
    【解决方案3】:

    是的,可以使用 HTML5!

    https://github.com/mozilla/pdf.js/

    这是一个纯 JavaScript 库,它使用 HTML5 函数打开 PDF 文件并将其呈现在页面中。 我在以下浏览器中成功测试了该库:

    • IE9 和当前版本的 Google Chrome、Firefox、Safari
    • IE8及以下不支持pdf.js(缺少HTML5功能)

    用法

    在 HTML 文件中包含 javascript 库并添加一个 -element(是 HTML5 元素,因此它仅适用于 HTML5 浏览器):

    <body>
      <canvas id="the-canvas" style="border:1px solid black;"/>
    </body>
    

    使用与此类似的 javascript 调用在此画布内呈现 PDF:

    PDFJS.getDocument('your-file-goes-here.pdf').then(function(pdf) {
      pdf.getPage(1).then(function(page) {
        var scale = 1.5;
        var viewport = page.getViewport(scale);
    
        var canvas = document.getElementById('the-canvas');
        var context = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;
    
        var renderContext = {
          canvasContext: context,
          viewport: viewport
        };
        page.render(renderContext);
      });
    });
    

    【讨论】:

      【解决方案4】:
      • 考虑到兼容性,最好使用正版adobe软件渲染pdf。第三方渲染器在大多数情况下都能正常工作,但偶尔会在格式的某些方面遇到问题。您可以从adobe网站下载pdf阅读器,在网络浏览器上做一个简单的设置,让浏览器使用正版pdf渲染器打开一个pdf文件。至少在 Firefox 上,您可以做到这一点。

      • 如果您想在不使用 Web 浏览器的情况下以编程方式显示 pdf 文件,这意味着您需要一个与 pdf 渲染器配合使用的 GUI 工具包。我只知道 ruby/gnome2 上的 poppler。我曾经能够将它与 ruby​​ 1.8 一起使用,但由于我已经转移到 ruby​​ 1.9,所以我没有尝试过。 ruby 的其他标准 GUI 工具包有 wxrubyfxrubyruby/qtshoes 等,但我是不知道哪一个有 pdf 渲染器。

      如果没有帮助,请见谅。

      【讨论】:

        【解决方案5】:

        与您所问的最接近的是Google Doc Viewer。它至少不需要 JavaScript 以外的任何东西。

        【讨论】:

          【解决方案6】:

          据我所知,唯一能帮助您做到这一点的是 Adob​​e Flashpaper(可能有开源替代品?不确定)。

          这里的例子:

          【讨论】:

          • 我在儿童花园时使用flashpaper!它还活着:)。我认为 Flash 国家有更现代的东西
          • 我不知道,我已经看到了许多闪存纸的实现。就像我所说的“内联”内容,除非您远离 pdf 类型的文档,否则这就是流程。
          【解决方案7】:

          除了一些内置 PDF 查看器的浏览器(想到 Chrome)之外,PDF 显示由外部插件处理,您无法控制。除了通过 iframe 之外,您不能将 PDF 嵌入到页面中,即使这样,它也是浏览器的完全外部应用程序,不受 css 样式规则的约束。

          我不明白 Ruby 与此有什么关系,因为那将是服务器端操作,而您正在谈论客户端准备。您可以使用 Ruby(或大多数其他语言)来提取 PDF 的文本,但您明确表示您不想这样做。

          【讨论】:

          • 是的,我的意思是 Ruby 可以作为 Rails 或其他任何东西的现成插件。那么有哪些插件可以推荐呢?也许有办法获得一些开源插件并自己扩展它?
          • 嗯……你是不是建议你自己写一个浏览器 PDF渲染插件?
          • 如果您要在 route 中使用自定义插件,那么您几乎是自找麻烦。任何说“请安装这个随机程序,以便您可以查看我们精彩的内容”的网站几乎都是网络其余部分的直接“我离开这里”。特别是当它只是查看一些 PDF 时。
          • “除了通过 iframe 之外,您不能将 PDF 嵌入页面” — blogs.adobe.com/pdfdevjunkie/2007/08/… 怎么样? (我自己没试过。)
          • @Paul:仍然需要浏览器直接支持 PDF 渲染或 Acrobat 等外部插件。您可以&lt;embed&gt; 一个 zip 文件,但这并不意味着它会正确显示。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-20
          • 2017-10-07
          • 2012-12-13
          • 2011-05-25
          相关资源
          最近更新 更多