有什么方法可以获取 iframe 中加载的 PDF 内容的实际高度?
我在 iPad 设备中滚动 PDF 内容时遇到问题?我可以获得正文内容的高度使滚动成功,但仅适用于 HTML 页面。
this.contentWindow.document.body.scrollHeight
但是对于 PDF,它没有返回 PDF 文档的确切高度?有什么办法可以得到吗?
谢谢
彼得
有什么方法可以获取 iframe 中加载的 PDF 内容的实际高度?
我在 iPad 设备中滚动 PDF 内容时遇到问题?我可以获得正文内容的高度使滚动成功,但仅适用于 HTML 页面。
this.contentWindow.document.body.scrollHeight
但是对于 PDF,它没有返回 PDF 文档的确切高度?有什么办法可以得到吗?
谢谢
彼得
我在我的 iPad 上测试了它,它可以工作,也许它对你也有好处。mozilla 有一个 HTML5 js 项目,它呈现 pdf 文件并显示它们,您可以在 pdf 文件中获取页面的视口。 https://mozillalabs.com/en-US/pdfjs/ https://github.com/mozilla/pdf.js/blob/master/examples/helloworld/hello.js
PDFJS.getDocument('helloworld.pdf').then(function(pdf) {
// Using promise to fetch the page
pdf.getPage(1).then(function(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
//
// Prepare canvas using PDF page dimensions
//
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
//
// Render PDF page into canvas context
//
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
2020 年更新:pdf.js 的 API 略有变化:
PDFJS.getDocument('helloworld.pdf').promise.then(function(pdf) {
// Using promise to fetch the page
pdf.getPage(1).then(function(page) {
var viewport = page.getViewport({scale: 1.5});
//
// Prepare canvas using PDF page dimensions
//
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
//
// Render PDF page into canvas context
//
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
答案是否定的(不幸的是)。
因为在元素级别,如果显示的文档需要,PDF object
/ embed
s 不会自动增长以占用更多高度,因此它们的真实高度永远不会暴露给 DOM。
即使您通过将 PDF 指定为 an 的源来直接调用 PDF,iframe
您也会看到 iframe 具有与任何其他页面一样的 DOM 布局,无论如何都带有pdf的object
or 。embed
body
此 PDF '元素' 内是所有相应 PDF 插件的领域,无法通过javascript
. 可能有一些flash
,java
或浏览器插件可以让你与之交互,但我还没有听说过。
彼得,您无法在 iOS Safari 上的 iFrame 中获得 PDF 的高度,因为没有可用于苹果移动设备的 adobe reader safari 插件。您可以使用 HTML 5-Canvas 呈现 PDF 和开源客户端库,如 pdfjs...等...
如果没有这个,你可以获得高度[或宽度]的唯一方法是从服务器,使用 iTextSharp.dll 类型的组件并获取 pdf 页面的高度/宽度,稍后你可以乘以页数,这些你都可以轻松完成在服务器端。使用检索到的高度/宽度来设置 iFrame 的样式,然后在 iFrame 的源属性中提供该 PDF。iFrame 将拉伸,您将获得滚动效果。
或者
如果您有任何可以将 PDF 转换为图像的工具或组件,那么您只需在 HTML 上从服务器抛出图像,使用 javascript 您可以控制获取属性。我们有 MS-SSRS 来满足我们的报告需求,对于可在 iPad 上访问的一小部分应用程序,我们从 MS-SSRS 而不是 PDF 获取图像。我们采用这个选项的原因是,如果页面数量增加,那么像 PDF-JS 这样的客户端框架将无法在画布上呈现。
您有多种选择可以在 iPad 上处理 PDF。
pdf 查看器选项是否view=fit
适用于您要完成的工作(为 iframe 设置自动高度):
<iframe src="Path/MyPDF.pdf#view=fit"></iframe>
此解决方案在尝试获取高度之前将高度设置为自动(https://stackoverflow.com/a/11864824/1803682):
objIframe = document.getElementById('theIframeId');
objIframe.style.height = 'auto';
document.body.scrollHeight
最后 - 此处的博客文章:http ://dev.magnolia-cms.com/blog/2012/05/strategies-for-the-iframe-on-the-ipad-problem/和iScroll4可能值得一看。
这可以通过使用 JQuery 来解决。
让我们假设你有如下的 iframe 和一个 id
<iframe src="name.pdf" id="pdf_frame"></iframe>
现在通过使用 JQuery,我们可以将 iframe 的高度设为自动,因为您需要在 iframe 内显示 pdf。
$('#pdf_frame').css('height','auto');
你可以得到高度
document.body.scrollHeight