使用对象标记在html中嵌入PDF文件

fbcarpbf  于 2023-11-15  发布在  其他
关注(0)|答案(4)|浏览(139)

我正在把一个pdf文档嵌入到我的html代码中。为此我写了这段代码。

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org
  2. /TR/html4/loose.dtd">
  3. <html lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  6. <title></title>
  7. </head>
  8. <body>
  9. <object height="100%" width="100%" type="application/pdf" data="yii.pdf#toolbar=1&amp;navpanes=0&amp;scrollbar=1&amp;page=1&amp;view=FitH">
  10. <p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/pdf/sample.pdf">click here to download the PDF file.</a></p>
  11. </object>
  12. </body>
  13. </html>

字符串
但结果是空的页面上FF4和IE9嵌入PDF文件,但它的容器是非常小的几乎30%的页面。如果我删除第一行,即DOCTYPE两个浏览器呈现PDF文件,因为它应该。以下代码工作正常。

  1. <html lang="en">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  4. <title></title>
  5. </head>
  6. <body>
  7. <object height="100%" width="100%" type="application/pdf" data="yii.pdf#toolbar=1&amp;navpanes=0&amp;scrollbar=1&amp;page=1&amp;view=FitH">
  8. <p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/pdf/sample.pdf">click here to download the PDF file.</a></p>
  9. </object>
  10. </body>
  11. </html>


我想在我的页面中使用doctype,这样其他页面就可以正常工作了。有没有办法修复包含doctype的第一个代码?

9cbw7uwe

9cbw7uwe1#

这基本上是@tXK的答案(+1),但有工作(战斗测试)代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>Preview</title>
  6. <style type="text/css">
  7. html, body {
  8. margin: 0;
  9. padding: 0;
  10. border: 0;
  11. height: 100%;
  12. overflow: hidden;
  13. }
  14. iframe {
  15. width: 100%;
  16. height: 100%;
  17. border: 0
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <iframe src=""></iframe>
  23. </body>
  24. </html>

字符串

展开查看全部
wswtfjt7

wswtfjt72#

有三种方法来显示一个PDF在HTML:使用嵌入,对象,或iframe.不幸的是,使用iframe将不允许Adobe JavaScript * 内的PDF* 张贴消息到HTML中的JS,因为hostContainer是未定义的.因此,我被迫使用嵌入或对象.幸运的是thirtydot的风格代码也适用于对象.这里是我的工作代码.

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>Preview</title>
  6. <style type="text/css">
  7. html, body {
  8. margin: 0;
  9. padding: 0;
  10. border: 0;
  11. height: 100%;
  12. overflow: hidden;
  13. }
  14. object {
  15. width: 100%;
  16. height: 100%;
  17. border: 0
  18. }
  19. </style>
  20. <script language="javascript">
  21. function handleMessage(msg) {
  22. alert('got message '+msg);
  23. }
  24. function setupHandler() {
  25. document.getElementById("myPdf").messageHandler = { onMessage: handleMessage };
  26. }
  27. </script>
  28. </head>
  29. <body onLoad="setupHandler();">
  30. <object id="myPdf" type="application/pdf" data="file_with_actions.pdf">
  31. Unable to open the PDF file.
  32. </object>
  33. </body>
  34. </html>

字符串
你可以阅读更多关于JavaScript的东西here

展开查看全部
vom3gejh

vom3gejh3#

我会尝试使用<iframe>元素。
如果没有,也许把它变成闪光灯,然后嵌入闪光灯。
另外,试试<!doctype html>,看看它能做什么,这是HTML5的标准doctype

j1dl9f46

j1dl9f464#

我刚刚挣扎了8个小时试图在对象标签中显示PDF。这里有一些事情可能会阻止它工作。在我的情况下,我使用Play Framework作为Scala lang的后端框架。这里有一些常规的事情来检查是否有问题显示<object>标签中的东西。
1.确保您可以查看您的PDF。例如,如果您应该返回PDF的端点是http://localhost:9000/report,则手动检查它是否实际工作。
1.应用正确的CSP rules. object-src在这里很重要。关于CSP here的更多有用信息。
1.确保type在object tag. <object data="application/pdf" ...中是正确的。还值得检查data="<url here>"实际上是正确输入的。如果使用动态链接,请确保您使用的框架没有阻止(可能)危险的URL。在这种情况下,URL必须进行 * 消毒 *。
1.正确配置CORS规则
1.在响应中返回正确的标题。
HTTP响应头示例:

  1. Content-Disposition: "inline; filename: report.pdf"
  2. Content-Type: "application/pdf"
  3. X-Frame-Options: "SAMEORIGIN"

字符串
“X-Frame-Options HTTP响应标头可用于指示是否应允许浏览器以<frame><iframe><embed><object>呈现页面
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
1.确保你的服务器没有恶意的头文件(见#5)。在我的情况下,这就是原因,因为Play Framework initially sets X-Frame-Options to "DENY"。检查你的服务器的配置文件。
1.确保你的标签在html中是可见的。不是不可见的或者在其他元素下面(见CSS z-index)。确保它有高度和宽度设置。
1.确保没有插件-如广告拦截器-或其他一些安全软件阻止pdf,请求和/或嵌入式元素,如<object><iframe>

展开查看全部

相关问题