HTMLにPDFを埋め込むための推奨される方法は?


1182

HTMLにPDFを埋め込むための推奨される方法は何ですか?

  • iFrame?
  • オブジェクト?
  • 埋め込む?

アドビはそれについて何と言っていますか?

私の場合、PDFはオンザフライで生成されるため、フラッシュする前にサードパーティのソリューションにアップロードすることはできません。


6
pdf2htmlEXを試す:github.com/coolwanglu/pdf2htmlEX
Tezcat

pdf2htmlEXリポジトリのwikiに、特定のソリューションだけでなく一般的な戦略の優れた比較があります。また、試したことはありませんが、これはメンテナンスされたフォークのようです。
ShreevatsaR

回答:


540

おそらく最良の方法は、PDF.JSライブラリを使用することです。これは、サードパーティのプラグインなしのPDFドキュメント用の純粋なHTML5 / JavaScriptレンダラーです。

オンラインデモ:http : //mozilla.github.com/pdf.js/web/viewer.html

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


12
別の回答で述べたように、scribdは実際にはpdf2swfを使用してPDFファイルを変換します
Peter Craig

8
scribdを使用しないことを強くお勧めします。特定のドキュメントで実験を行ったばかりで、Firefox 4では最初の3ページしか表示されませんが、IE9ではレンダリングテキストが間違っています-ページの一部のセクションがオフセットされています。技術的に言えば、それはバギーです。さらに、彼らはあなたがドキュメントを印刷またはダウンロードするために購読することを期待しています!基本的に、彼らは以前は無料だったドキュメントを取得し、その周りにペイウォールを設置しています。
フランクスター、2011年

9
PDF.jsライブラリは実際には非常に優れたソリューションのように見えますが、リンクされたデモはページに埋め込まれていることを示していません(ページ全体を占めています)。しかし、それはHMTL5キャンバスを使用しているため、簡単に埋め込むことができ、高速です。欠点としてgithub.com<object>
mozilla

33
pdf.jsは、Chromeなどのタブレットブラウザーではうまく機能しません。また、大きなPDF文書の場合は非常に遅くなることもわかりました。
Rocco The Taco 2013

10
これが推奨されているとは思えません。オンラインデモのフォントレンダリングを見てください。フォントがギザギザで恐ろしく見えます。Adobe Readerで開くと、サブピクセルレンダリングの方がはるかに良く見えます。
スピードプレーン2014

532

これは、要は、迅速、簡単で、サードパーティのスクリプトを必要としません。

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

更新(2018年1月):

AndroidのChromeブラウザーはPDF埋め込みをサポートしなくなりました。GoogleドライブのPDFビューアを使用してこれを回避できます

<embed src="https://drive.google.com/viewerng/
viewer?embedded=true&url=http://example.com/the.pdf" width="500" height="375">

30
フォールバックを含めることができるように、<object>タグを使用することをお勧めします。
Jonathon Hill

1
開発者はMac / Firefoxが壊れたプラグインイメージを取得することを知りたいと思いました。プラグインページは、探しているプラ​​グインをロードしません。これを回避する方法はありますか?
シャニマル

63
PDFを自動ダウンロードする代わりに表示されるようにしたい場合は(たまたまですが)type='application/pdf'埋め込みタグに追加します
Hassek

32
<object>PDFを表示できないブラウザーで代替コンテンツを表示できるため、タグを使用する方が適切です。必要に応じて<embed><object>タグをタグに配置することもできます。参照:stackoverflow.com/questions/1244788/embed-vs-object
Raphael

1
@raphaelcm実際、前に言ったように、埋め込みタグを使用するだけで、すべての主要なブラウザーで機能します。IE 7および8でも
Batfan

361

この目的でGoogle PDFビューアを使用することもできます。私の知る限り、これは公式のGoogle機能ではありませんが(これは間違っていますか?)、とてもうまくスムーズに機能します。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を使用していることです。


29
言及すべき1つのことは、表示できるPDFのサイズには上限があるということです。現在は10MB / 100ページだと思います。PS:視聴者が「非公式」だとは思いません。:彼らもハウツーページあなたのための埋め込みURLを構築していdocs.google.com/viewer
SuperElectric

30
このオプションは適切に機能しますが、PDFをパブリックにアクセス可能にする必要があります。
KoviNET 2012

4
@riot_starterこのソリューションは機能しなくなります。Googleから完全にログアウトしている場合は正常にロードされます。完全にログインしている場合は正常にロードされますが、その間にいる場合は(何であれ)パスワードを要求されます。また、iframeの場合は読み込まれません。
dwenaus 2013

5
あなたが間のいずれかのGoogleドキュメントのプライバシーを設定することが許可されているpublicsign-in requiredprivate。Googleドキュメントのドキュメントにはembedオプションがあることを考えると、これは間違いなく公式の機能です。
b1nary.atr0phy 2013

6
もう1つ言及する必要があるのは、「最近リクエストが多すぎる」という警告です。これは制限事項です。
kommradHomer 2013年

116

クエリ文字列でいくつかのオプションを渡すことにより、ブラウザでの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>

6
はブラウザ機能を使用しており、複雑なサードパーティのソリューションではないため、これが最良のソリューションです。最新のすべてのブラウザー(IE9、FF、またはChrome)では、PDFは適切に埋め込まれるはずです。IE 6/7ユーザーには申し訳ありません。彼らはアップグレードする必要があります。これらのブラウザのサポートはずっと前に停止しました。:(
エイドリアンP.

2
私のChromeのモバイルタブレット版では機能しません。残念ながら、すばやい修正でした。
Rocco The Taco 2013

1
+1はズームとスクロールのオプションに対応しますが、最新のChromeバージョン(44)では機能しません... PDFドキュメントのロードに失敗しました。
NotJay

閉じるボタンを追加することは可能ですか?そしてどうやって?
ロベルト・セプルベダブラボー

@RoccoTheTaco Seconded、Androidのモバイルクロムでは機能しない
匿名の

66

との両方<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>

4
PDFアドオンがインストールされていないか、古くなっている場合、これはブラウザーでは機能しません
Umair Hamid

また、これはコード検証に関係するものに対しては検証されません。
NotJay

1
これは私にとってはうまくいきましたが、embedタグを単独で使用することはunsafeChromeとFirefoxで考えられていました。
リッチートーマス

1
Android(クロム)での何らかの理由で、PDFは埋め込まれず、代わりにダウンロードが提案されます。iPhone(safari)では、PDFの最初のページのみが表示されます。
Ivan

21

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が1ページまたは2ページのみの場合に適しています。もちろん、WebサーバーにImageMagickをインストールする必要があります(Ghostscriptも必要です)。これは、共有ホスティング環境では使用できないオプションです。このように機能するPHPプラグイン(imagickと呼ばれます)もありますが、独自の特別な要件があります。


または、Macのプレビューなどのアプリケーションを使用して画像をPNGに変換します。
Garrett

2
しかし、それをプログラムで行うことはできますか?
Dan Mantyla 2012

ドキュメントに複数のページがある場合はどうなりますか?その場合、最初のページのみが表示されると思います
seb

@seb久しぶりですが、2〜3ページのPDFで使用できました。それよりはるかに大きくするのは賢明ではないでしょう。モバイルブラウザーはそのような画像を表示するのに苦労していると思います。これが私がそれを「迅速かつダーティ」な方法と呼んだ理由ですが、PDFが数ページ以下である限り、私はそれは良い方法だと思います。
Dan Mantyla、2014年

1
zendライブラリを使用してPDFを開いた場合、a foreach($pdf->pages as $page)を実行して各ページの画像を作成できます
99の問題-構文は1つではありません

19

このコードを見てください-HTMLにPDFを埋め込むには

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

6
これは機能していないようです。PDFではなく、常に空白の灰色の画面が表示されます。しかし、@ Gayleの回答のように、に切り替えsrcdataも機能します。
Mottie、2011年

1
Chrome 44を使用していますが、機能しません。また、データをsrcに切り替えてみました。
NotJay 2015

1
type = "application / pdf"は問題を修正します。クロムでうまく動作します。
Gavin Simpson、

13

FDViewPDF2SWF(それ自体はxpdfに基づいています)をSWFビューアと組み合わせて、サーバー上でオンザフライでPDFドキュメントを変換して埋め込むことができます。

xpdfは完全なPDFコンバーターではありません。より良い結果が必要な場合、GhostviewにはPDFドキュメントを他のフォーマットに変換する機能があり、Flashビューアをより簡単に構築できる場合があります。

しかし、単純なPDF文書の場合、FDViewは適度に機能するはずです。


FDViewはどこでも利用できますか?code4net.comが消えたようです。
マイケルマイヤーズ

@Michael簡単に見つけることはできません。この回答は、誰かがfdviewを別の場所で再ホストする可能性がある場合には残しておきます。
アダムデービス

12

私たちの問題は、法律上の理由により、ハードディスクにPDFを一時的に保存することが許可されていないことです。また、ブラウザでプレビューとしてPDFを表示する場合、ページ全体を再読み込みしないでください。

まず、PDF.jSを試しました。FirefoxおよびChromeのビューアでBase64と連携しました。ただし、PDFでは許容できないほど低速でした。IE / Edgeはまったく機能しませんでした。

したがって、HTMLオブジェクトタグのBase64文字列を使用して試してみました。これもIE / Edgeでは機能しませんでした(PDF.jsと同じ問題かもしれません)。Chrome / Firefox / Safariでも問題ありません。そのため、ハイブリッドソリューションを選択しました。IE / EdgeではIFrameを使用し、他のすべてのブラウザーではオブジェクトタグを使用します。

もちろん、IFrameソリューションはChromeと共同でも機能します。このソリューションをChromeで使用しなかった理由は、PDFは正しく表示されますが、プレビューで[ダウンロード]をクリックするとすぐChromeがサーバーに新しいリクエストを送信するためです。必須の隠しフィールドpdfHelperTransferDataPDFがIFrameに表示されるため、(PDF生成に必要なフォームデータを送信するため)は設定されなくなりました。この機能/バグについては、ChromeはPDFをダウンロードするときに2つのリクエストを送信します(そして、そのうちの1つをキャンセルします)

現在、問題のある子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を検出するにはどうすればよいですか?これらの調査結果が他の誰かの時間を節約することを願っています。


申し訳ありませんが、わかりません。変数 "transferData"にはどのような値がありますか?
ケイト

1
@Kateさん、こんにちは。私たちの場合、Webフォームでのユーザーの入力に基づいてPDFを生成します。"transferData"には、Web APIのPDF生成関数にJSONとして送信されるデータが含まれています。わかりやすくするために、コードを1行追加しました。
ジョージマハリス

10

次のように、保存されたPDFの相対位置を使用できます。

例1

<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>


10
  1. PDFを保持するコンテナーを作成する

    <div id="example1"></div>
  2. 教えてPDFObjectを埋め込むためにどのPDF、およびそれをどこに埋め込むこと

    <script src="/js/pdfobject.js"></script>
    <script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script>
  3. オプションでCSSを使用して、寸法、境界線、マージンなどの視覚的なスタイルを指定できます。

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

ソース:https : //pdfobject.com/


これは非常に優れたソリューションであり、ブートストラップスタイリングと組み合わせてうまく機能しました。それはすべて他のブートストラップ要素の上に行きました。
ネットフィード

blobファイルで試しましたか?pdf.output('bloburl')lib jspdfでこれを使用しましたが、IE11では動作しないようです。
ホアントランソン

8

Scribdでは、サーバーでドキュメントをホストする必要がなくなりました。それらでアカウントを作成すると、発行者IDが取得されます。わずか数行のJavaScriptコードで、独自のサーバーに保存されているPDFファイルをロードできます。

詳細については、開発者ツールを参照してください。


1
これがどのように行われるかを示す別のリンクを投稿できますか?投稿したリンクからは明確ではありません。
SuperElectric 2011

彼らは彼らのウェブサイトを更新し、このページを変更したようです。このページには、元の投稿で言及していた内容が含まれていると思います。scribd.com
Bjorn

私はこれが何度も好きになることができればいいのに、それは完璧に機能します。Webサイトの下部までスクロールし、APIをクリックして例を表示します。
Rocco The Taco 2013

1
サインアップはscribdのため閉鎖されました。
ランスフィッシャー


4

ImageMagickのconvertコマンドを使用したPdfToImageServlet

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


4

これは、AXIOSとVue.jsで行った方法です。

        axios({
            url: `urltoPDFfile.pdf`,
            method: 'GET',
            headers: headers,
            responseType: 'blob'
        })
        .then((response) => {
            this.urlPdf = URL.createObjectURL(response.data)
        })
        .catch((error) => {
            console.log('ERROR   ', error)
        })

urlPDFをHTMLに動的に追加します。

<object width='100%' height='600px' :data='urlPdf' type='application/pdf'></object>

3

考慮すべきオプションの1つは注目すべきPDF
です。PDFでリアルタイムのオンラインコラボレーションを行うことを計画しているのでない限り、無料のプランがあります。

以下iframeを任意のhtmlに埋め込み、結果をお楽しみください。

<iframe width='1000' height='800' src='http://bit.ly/1JxrtjR' frameborder='0' allowfullscreen></iframe>

2

ファイルをブラウザーにストリーミングするには、Stack Overflowの質問を参照してください。PDF ファイルをバイナリとして.NET 2.0を使用してブラウザーにストリーミングする方法 -多少の違いはありますが、ファイルシステムからファイルを提供しているかどうかに関係なく機能するはずです。または動的に生成されます。

そうは言っても、参照されているMSDNの記事は世界をかなり単純化した見方をしているため、HTTPS介してPDFをブラウザーに正常にストリーミングすること、および提供する必要があるヘッダーの一部を読むことをお勧めします。

そのアプローチを使用すると、おそらくiframeが最善の方法です。ファイルをストリーミングする1つのWebフォームをsrc用意し、属性を最初のフォームに設定して別のページにiframeを配置します。


4
@downvoterは、なぜあなたが匿名で10年前の回答に反対票を投じているのかを説明しますか?
GalacticCowboy

1
  1. 入力PDFバイトのblobを作成します
  2. このクロスブラウザーの回避策でパッチされたiframePDF.jsを使用します

iframeのURIは次のようになります。

/viewer.html?file=blob:19B579EA-5217-41C6-96E4-5D8DF5A5C70B

これで、FF、Chrome、IE 11、およびEdgeはすべて、URLの標準のblob URIを介して渡されたiframeのビューアにPDFを表示します。


1

私はReactでPDFをプレビューする必要があったので、いくつかのライブラリーを試した後、私の最適な解決策はデータをフェッチしてそれをebmedすることでした。

const pdfBase64 = //fetched from url or generated with jspdf or other library

  <embed
    src={pdfBase64}
    width="500"
    height="375"
    type="application/pdf"
  ></embed>

0

自分でPDF.JSをホストしたくない場合は、DocDroidを試すことができます。GoogleドライブのPDFビューアに似ていますが、カスタムブランディングが可能です。


-7

これは問題なく動作し、ブラウザはFirefoxで処理します。IEを確認していません...

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

これは何を達成することになっていますか?それが質問にどのように答えるかはわかりません。
TRiG 2018

HTMLにPDFを埋め込むとき、このドキュメントへのリンクを作成するのが最善の方法です。<a href=" server1.network/trifold_JonesChiro.pdf "target='_blank'> Client Portal Trifold(sample)</a>のように、ページを開いてpdfとtringを表示して配置するのは、正しい答えになる場合がありますHTMLで。また、PDFをタブで開いたままにすることもできます。
Wynn

だからあなたの推奨は、埋め込むのではなく、リンクすることですか?それは結構ですが、答えとしてこれは非常に不明確です。
TRiG 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.