如何在HTML中嵌入PDF文件?
- 使用iFrame标签?
- 使用Object标签?
- 使用Embed标签?
Adobe官方对此有何建议?
在我的情况下,PDF文件是实时生成的,因此在刷新之前无法将其上传到第三方解决方案。
如何在HTML中嵌入PDF文件?
Adobe官方对此有何建议?
在我的情况下,PDF文件是实时生成的,因此在刷新之前无法将其上传到第三方解决方案。
这是快速、简单、直接且不需要任何第三方脚本的方法:
<embed src="http://example.com/the.pdf" width="500" height="375"
type="application/pdf">
更新(2021年2月3日)
Adobe现在提供了自己的PDF嵌入API。
(这需要在Adobe注册并获取clientID以在js中使用)
https://www.adobe.io/apis/documentcloud/dcsdk/pdf-embed.html
更新(1/2018):
Android 上的 Chrome 浏览器不再支持 PDF 嵌入。您可以通过使用 Google Drive PDF 查看器来解决此问题。
<embed src="https://drive.google.com/viewerng/
viewer?embedded=true&url=http://example.com/the.pdf" width="500" height="375">
<object>
标签,因为它可以在不能显示PDF的浏览器中显示备用内容。如果需要,甚至可以在<object>
标签中放置一个<embed>
标签。参考:https://dev59.com/p3M_5IYBdhLWcg3wvV9w - Raphael可能最好的方法是使用PDF.JS库。它是一个纯HTML5/JavaScript渲染器,可用于呈现PDF文档,无需任何第三方插件。
<object>
。https://github.com/mozilla/pdf.js/blob/master/examples/helloworld/hello.js - LarsH您也可以使用Google PDF查看器来实现此目的。据我所知,这不是Google的官方功能(如果我错了请指正),但是它对我来说非常好用和流畅。您需要先将PDF上传到某个地方,然后只需使用其URL即可:
<iframe src="https://docs.google.com/gview?url=http://example.com/mypdf.pdf&embedded=true" style="width:718px; height:700px;" frameborder="0"></iframe>
重要的是它不需要Flash播放器,而是使用JavaScript。通过在查询字符串中传递一些选项,您可以在浏览器中控制PDF的显示方式。我很高兴看到它能够工作,但是我发现它在IE8中无法正常使用 :(
它可以在Chrome 9和Firefox 3.6中运行,但在IE8中会显示消息“如果无法显示PDF,请插入您的错误消息。”
我尚未测试过上述任何浏览器的早期版本。但这是我的代码,以防对任何人有帮助。它将缩放设置为85%,删除滚动条、工具栏和导航窗格。如果我找到在IE中也有效的解决方法,我会更新我的帖子。
<object width="400" height="500" type="application/pdf" data="/my_pdf.pdf?#zoom=85&scrollbar=0&toolbar=0&navpanes=0">
<p>Insert your error message here, if the PDF cannot be displayed.</p>
</object>
同时使用<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>
看看这段代码- 将PDF嵌入HTML
<!-- Embed PDF File -->
<object src="YourFile.pdf" type="application/pdf" title="SamplePdf" width="500" height="720">
<a href="YourFile.pdf">shree</a>
</object>
data
替换src
确实有效。 - Mottie通过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" />';
?>
如果您需要快速解决方案,想要避免跨浏览器的PDF查看问题,并且PDF只有一页或两页,则这是一个不错的选择。当然,您需要在Web服务器上安装ImageMagick(它又需要Ghostscript),这可能在共享托管环境中不可用。还有一个PHP插件(称为Imagick),可以像这样使用,但需要满足其特定要求。
foreach($pdf->pages as $page)
循环遍历每个页面并为每个页面创建一个图像。 - 99 Problems - Syntax ain't one<embed src="example.pdf" width="1000" height="800" frameborder="0" allowfullscreen>
例子2
<iframe src="example.pdf" style="width:1000px; height:800px;" frameborder="0" allowfullscreen></iframe>
创建一个容器来存放你的PDF
<div id="example1"></div>
告诉PDFObject要嵌入哪个PDF文件,以及在哪里嵌入它。 <script src="/js/pdfobject.js"></script>
<script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script>
您可以选择使用 CSS 来指定视觉样式,包括尺寸、边框、边距等。
<style>
.pdfobject-container { height: 500px;}
.pdfobject { border: 1px solid #666; }
</style>
pdf.output('bloburl')
,但在IE11上似乎无法正常工作。 - Tran Son Hoang我们的问题是出于法律原因,我们不允许将PDF临时存储在硬盘上。此外,在浏览器中显示预览时,不应重新加载整个页面来显示PDF。
首先,我们尝试了PDF.js。它在Firefox和Chrome的查看器中使用Base64可以正常工作。然而,对于我们的PDF来说,速度太慢了。IE/Edge根本无法工作。
因此,我们尝试在HTML对象标记中使用Base64字符串。这在IE / Edge上仍然无法工作(可能与PDF.js相同的问题)。但在Chrome / Firefox / Safari上没有问题,所以我们选择了一种混合解决方案。Edge使用IFrame,对于所有其他浏览器使用对象标记。
当然,IFrame解决方案也适用于Chrome等浏览器。之所以我们没有在Chrome中使用此解决方案,是因为虽然PDF正确显示了,但是一旦您在预览中单击“下载”,Chrome就会向服务器发出新请求。所需的隐藏字段pdfHelperTransferData(用于发送PDF生成所需的表单数据)不再设置,因为PDF显示在IFrame中。关于此功能/错误,请参见Chrome发送两个请求以下载PDF(并取消其中一个)。
现在问题儿童IE9和IE10仍然存在。对于这些,我们放弃了预览解决方案,而是通过单击预览按钮将文档作为下载发送给用户(而不是预览)。我们已经尝试了很多,但即使我们找到了解决方案,为此微小的用户部分付出额外的努力也不值得。您可以在此处找到我们的下载解决方案:使用IFrame无需刷新下载PDF。
我们的Javascript:
var transferData = getFormAsJson()
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>
如果想检查 IE/Edge 浏览器的类型,请参见此处:如何使用 JavaScript 检测 Internet Explorer (IE) 和 Microsoft Edge? 希望这些发现可以为其他人节省时间。