2013-02-21 8 views
7

iframeに読み込まれたPDFコンテンツの実際の高さを取得する方法はありますか?PDFドキュメントの高さをiframeで取得する方法

iPADデバイスでPDFコンテンツをスクロールする際に問題がありますか?私は本文コンテンツの高さを得ることができますが、スクロールは成功しましたが、HTMLページだけが成功しました。

this.contentWindow.document.body.scrollHeight 

ただし、PDFドキュメントの正確な高さは返されませんか?それを得るための方法はありますか?

おかげ

ピーター

+0

* PDFドキュメントの正確な高さ*個々のPDFページの寸法は異なる場合があります。これは、文書の高さのようなものはありません。 – mkl

答えて

0

は、あなたが(Set auto height for iframe)を達成しようとしている何のためview=fit PDFビューアのオプションの作業を行います。

<iframe src="Path/MyPDF.pdf#view=fit"></iframe> 

また、このソリューションはしようとする前に、autoに高さを設定します高さ(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です。

+0

'viewFit'フラグは、プラグインがpdfをズームする方法です。この場合は、ページをビューの幅または高さに合わせるように指示しています。リンクでさえ、受け入れられた答えはスクロールバーを持つiframeを表示します!それはどのように受け入れられますか? Cssの高さが 'auto'の場合、プラグインがブラウザにどの程度の大きさの内容を伝えていないので(つまり、* default *に" auto "します)、どちらも機能しません。あなたがそれを働かせることができれば[このフィドル](http://jsfiddle.net/QmLv5/2/)を編集してください。基本的には、このように高さを抽出したい場合は、ウィンドウのみをスクロールする必要があります。 – Hashbrown

+0

@Hashbrown唯一の解決策は、遍在するpdfファイルのあるiScroll4のようなものだと考えるのは愚かなようです。 – Matthew

-1

これは、JQueryを使用して解決できます。

は、私たちは、あなたがIFRAME内のPDFファイルを表示する必要があるとして、今のjQueryを使用して、我々は自動車としてのiframeの高さを作ることができ、ID

<iframe src="name.pdf" id="pdf_frame"></iframe> 

で次のようにあなたはインラインフレームを持っていることを前提としています。

$('#pdf_frame').css('height','auto'); 

あなたは答えが(残念ながら)ではありません

document.body.scrollHeight 
+4

私はこれがあなたとあなたをアップアップした人のためにどのように働いたのかわかりません。私のために働いていないと、このコードがどのように働くのか理由を見ることができません。 –

2

として高さを得ることができます。

要素レベルで、PDF object/embedは、必要なドキュメントが必要な場合は自動的に拡張されないため、真の高さがDOMに公開されることはありません。

あなたがiframeのソースとして指定することにより、PDFを直接呼び出しても、あなたはとにかくbodyobjectまたはPDFのembedと、IFRAMEが他のページのようなDOMのレイアウトを持っていることがわかります。

このPDFの中で、「要素」はすべてのPDFプラグインの領域であり、javascriptでアクセスすることはできません。 flashjava、またはブラウザプラグインがありますが、そのプラグインとやり取りすることができますが、私はそれについて聞いていません。

+1

実際に@ノアム。それは少し修正が必要ですが、一般的には良いです。 –

+1

それはすごいです、私は解決策が必要だったので、質問を好む人の一人です。私は決して見つけたことがなく、理由を推論した後、私はこれをここに残しました。私は、JSライブラリがPDF自体をレンダリングしていることを知っていると思います。しかし、iframeについての質問に答えると、答えは出ません。 – Hashbrown

+0

よく見る。 pdf-jsを使用してpageCountとpageHeightを取得します。ドキュメントの高さを知ることができます。その値をiframe.style.heightに設定します。私はこれが本当の答えではないことを知っています。あなたは答えが実際に「正しい」ものです。しかし、pdf-jsはかなり良い 'ハック'です。 –

5

私のiPadでこれをテストしたところ、うまくいくかもしれません。 pdfファイルをレンダリングして表示するmozillaのHTML5 jsプロジェクトがあり、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); 
    }); 
}); 
+0

それは動作します!ありがとう。しかし、ここでの1つの問題は、このソリューションは100%クロスブラウザではありません(私はあなたに見ている古いIE)。したがって、ブラウザの検出機能も追加する必要があります。しかし、iPadの問題は修正されています。 –

2

ピーター は、アップルのモバイルデバイスのために利用可能なAdobe Readerのサファリプラグインが存在しないとして、あなたがiOSのサファリのiframe内にPDFの高さを得ることができる方法はありません。 HTML 5-Canvasを使用してPDFをレンダリングしたり、pdfjs ...などのソースクライアントサイドライブラリを開くことができます。

高さ[または幅]を取得する唯一の方法はサーバーからですが、iTextSharpを使用してください。 dllの種類のコンポーネントを取得し、pdfページの高さ/幅を取得します。これは後でページ数で掛けることができます。これらはサーバー側で簡単に行うことができます。取得した高さ/幅を使用してiFrameのスタイルを設定し、iFrameのソース属性でそのPDFを指定します。 iFrameが伸縮し、スクロール効果が得られます。

OR

あなたは、あなたがちょうどあなたが属性を得ることに制御することができますJavaScriptを使用して、HTML上のサーバから画像を投げるイメージにPDFに変換することができます任意のツールやコンポーネントを使用している場合。 私たちはMS-SSRSを使用してレポートを作成しています.APIでアクセスできるアプリケーションのほんの一部では、PDFではなくMS-SSRSから画像を取得しています。このオプションを採用したのは、ページ数が増えると、PDF-JSのようなクライアント側のフレームワークがキャンバス上に描画されなくなるためです。

iPadでPDFを処理するためのさまざまなオプションがあります。

+0

あなたの答えはありがたいですが、pdf-jsは良いenouthです。私たちはpdf-jsを使ってpdfの高さを取得しているので、すべてのレンダリングはネイティブのiPadのPDFディスプレーヤーによって行われています。 –