推荐将PDFembedded到HTML中的方法?

在HTML中embeddedPDF的推荐方法是什么?

  • 的iFrame?
  • 目的?
  • embedded?

Adobe对此有何看法?

在我的情况下,PDF即时生成,所以在冲洗之前不能上传到第三方解决scheme。

可能最好的方法是使用PDF.JS库。 这是一个没有任何第三方插件的PDF文档的纯HTML5 / JavaScript渲染器。

在线演示: http : //mozilla.github.com/pdf.js/web/viewer.html

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

这很简单,很简单,不需要任何第三方脚本:

 <embed src="http://example.com/the.pdf" width="500" height="375" type='application/pdf'> 

您也可以为此使用Google PDF查看器。 据我所知,这不是一个官方的谷歌function(我对此是错误的吗?),但它非常好,顺利地为我工作。 您需要先将您的PDF上传到某个地方,然后使用其URL:

 <iframe src="http://docs.google.com/gview?url=http://example.com/mypdf.pdf&embedded=true" style="width:718px; height:700px;" frameborder="0"></iframe> 

重要的是它不需要Flash播放器,它使用JavaScript。

您可以通过在查询string中传递一些选项来控制PDF在浏览器中的显示方式。 我很高兴这个工作,直到我意识到它不工作在IE8。 🙁

它适用于Chrome 9和Firefox 3.6,但是在IE8中显示“如果PDF无法显示,请在此处插入错误消息”。

不过,我还没有testing任何上述浏览器的旧版本。 但是,这里是我的代码,以防万一它帮助任何人。 这将缩放设置为85%,删除滚动条,工具栏和导航窗格。 我会更新我的post,如果我碰到一些在IE中工作的东西。

 <div id="pdf"> <object width="400" height="500" type="application/pdf" data="/my_pdf.pdf?#zoom=85&scrollbar=0&toolbar=0&navpanes=0" id="pdf_content"> <p>Insert your error message here, if the PDF cannot be displayed.</p> </object> </div> 

使用<object><embed>将为您提供更广泛的浏览器兼容性。

 <object data="http://yoursite.com/the.pdf" type="application/pdf" width="750px" height="750px"> <embed src="http://yoursite.com/the.pdf" type="application/pdf"> <p>This browser does not support PDFs. Please download the PDF to view it: <a href="http://yoursite.com/the.pdf">Download PDF</a>.</p> </embed> </object> 

通过ImageMagick将其转换为PNG,并显示PNG(快速和肮脏)。

 <?php $dir = '/absolute/path/to/my/directory/'; $name = 'myPDF.pdf'; exec("/bin/convert $dir$name $dir$name.png"); print '<img src="$dir$name.png" />'; ?> 

如果您需要快速解决scheme,希望避免跨浏览器PDF查看问题,以及PDF是否只有一两页,这是一个不错的select。 当然,你需要在你的web服务器上安装ImageMagick(反过来需要Ghostscript),这个选项在共享主机环境中可能是不可用的。 还有一个PHP插件(称为imagick),这样的工作,但它有它自己的特殊要求。

FDView将PDF2SWF (其本身基于xpdf )与SWF查看器相结合,因此您可以在服务器上即时转换和embeddedPDF文档。

xpdf不是一个完美的PDF转换器。 如果你需要更好的结果,那么Ghostview有一些能力将PDF文档转换成其他格式,你可以更容易地build立一个Flash查看器。

但对于简单的PDF文件,FDView应该工作得很好。

看看这个代码 – 在HTML中embeddedPDF

 <!-- Embed PDF File --> <object data="YourFile.pdf" type="application/x-pdf" title="SamplePdf" width="500" height="720"> <a href="YourFile.pdf">shree</a> </object> 

Scribd不再要求您将文档托pipe在其服务器上。 如果你创build一个帐户,所以你得到一个发布者ID。 它只需要几行JavaScript代码来加载存储在您自己的服务器上的PDF文件。

有关更多详细信息,请参阅Developer Tools

您应该考虑的一个选项是显着的PDF
它有一个免费的计划,除非你打算在pdf上进行实时在线协作

将以下iframeembedded到任何html并享受结果:

 <iframe width='1000' height='800' src='http://bit.ly/1JxrtjR' frameborder='0' allowfullscreen></iframe> 
  1. 创build一个容器来保存您的PDF

     <div id="example1"></div> 
  2. 告诉PDFObject要embedded的PDF,以及在哪里embedded它

     <script src="/js/pdfobject.js"></script> <script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script> 
  3. 您可以select使用CSS指定视觉样式,包括尺寸,边框,边距等。

     <style> .pdfobject-container { height: 500px;} .pdfobject { border: 1px solid #666; } </style> 

来源: https : //pdfobject.com/

要将文件stream式传输到浏览器,请参阅堆栈溢出问题如何使用.NET 2.0将二进制PDF文件stream式传输到浏览器 – 请注意, 只需稍作变动,无论您是从文件系统提供文件或dynamic生成。

这就是说,所引用的MSDN文章采取了一个相当简单的世界观,所以你可能希望阅读成功streamPDF到浏览器通过HTTPS以及您可能需要提供的一些头。

使用这种方法,iframe可能是最好的方法。 有一个stream式传输文件的networking表单,然后将iframe放在另一个页面上,其src属性设置为第一个表单。

 <object width="400" height="400" data="helloworld.pdf"></object> 

PdfToImageServlet使用ImageMagick的convert命令。

用法示例: <img src='/webAppDirectory/PdfToImageServlet?pdfFile=/usr/share/cups/data/default-testpage.pdf'>

我们面临的问题是,由于法律原因,我们无法保存任何数据。 因此,我们需要使用stream和类似的工具,而不将PDF保存到Filesystem。 由于几个原因,下载或显示PDF文件时不应该重新加载页面。

首先,我们使用了PDF.JS,因为@lubos hasko的build议:我们成功地使用了Base64与查看器。 这工作在Firefox和Chrome。 但无论如何非常缓慢。 IE / Edge并没有为我们工作。

在Microsoft浏览器(IE / Edge)中,在对象标签中显示PDF-Base64string不适用于我们,但在Chrome / Firefox / Safari中很好。 对于IE11 / Edge,我们使用IFrame来显示PDFstream。 它运行良好,维护工作量保持在限度内。 对于IE9 / IE10,我们只是将文件作为下载stream发送,因为这些浏览器与iframe结合使用效果不佳。 用户没有在模式框预览中显示PDF的好处,这对于使用这些浏览器的客户(约1%)是适用的。 你可以在这里find我们的下载解决scheme: 下载PDF格式而不用IFrame刷新 。

我们不在所有浏览器中使用IFrame解决scheme的原因是,虽然PDF在所有经过testing的浏览器中都能正确显示,但只要您希望在Chrome浏览器中下载PDF,Chrome就会再次向服务器function发出请求。 PDF阅读器。 隐藏字段pdfHelperTransferData不再设置,因为PDF显示在IFrame中,所以服务器端函数中的参数为 。 对于这个“function/错误”,请参阅此Chrome在下载PDF时发送两个请求(并取消其中一个请求) 。

我们的Javascript

 if (isMicrosoftBrowser()) { // Case IE / Edge (because doesn't recoginzie Pdf-Base64 use Iframe) var form = document.getElementById('pdf-helper-form'); $("#pdfHelperTransferData").val(transferData); form.target = "iframe-pdf-shower"; form.action = "serverSideFunctonWhichWritesPdfinResponse"; form.submit(); } else { // Case non IE use Object tag instead of iframe $.ajax({ url: "serverSideFunctonWhichRetrivesPdfAsBase64", type: "post", data: { downloadHelperTransferData: transferData }, success: function (result) { $("#object-pdf-shower").attr("data", result); } }) } 

我们的HTML

 <div id="pdf-helper-hidden-container" style="display:none"> <form id="pdf-helper-form" method="post"> <input type="hidden" name="pdfHelperTransferData" id="pdfHelperTransferData" /> </form> </div> <div id="pdf-wrapper" class="modal-content"> <iframe id="iframe-pdf-shower" name="iframe-pdf-shower"></iframe> <object id="object-pdf-shower" type="application/pdf"></object> </div> 

要检查Microsoft浏览器,请参阅实例: 如何使用JavaScript检测Internet Explorer(IE)和Microsoft Edge? 我希望这些发现可以帮助别人节省一些时间。

如果你不想自己托pipePDF.JS,你可以试试DocDroid 。 它与Google Drive PDF查看器类似,但允许自定义品牌。

我发现这工作得很好,浏览器在Firefox中处理它。 我还没有检查IE …

 <script>window.location='url'</script>