HTML에 PDF를 포함시키는 권장 방법은 무엇입니까?


1181

HTML에 PDF를 포함시키는 권장 방법은 무엇입니까?

  • iFrame?
  • 목적?
  • 끼워 넣다?

Adobe는 이에 대해 무엇을 말합니까?

필자의 경우 PDF가 즉시 생성되므로 플러시하기 전에 타사 솔루션에 업로드 할 수 없습니다.


6
pdf2htmlEX를 사용해보십시오 : github.com/coolwanglu/pdf2htmlEX
Tezcat

pdf2htmlEX repo의 wiki 에는 특정 솔루션뿐만 아니라 일반적인 전략에 대한 비교가 많이 있습니다 . 또한, 시도하지는 않았지만 이것은 유지 보수 포크 인 것 같습니다.
ShreevatsaR

답변:


541

아마도 가장 좋은 방법은 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를 사용하지 않는 것이 좋습니다. 특정 문서에서 방금 실험을 수행했으며 파이어 폭스 4에서는 처음 3 페이지 만 표시하지만 IE9에서는 렌더링 텍스트가 잘못되어 페이지의 일부 섹션이 오프셋됩니다. 기술적으로는 버그가 있습니다. 또한 그들은 당신이 인쇄 또는 문서를 구독 신청을 기대합니다! 본질적으로 그들은 이전에 무료 문서를 가져 와서 그 주위에 페이 월을 세우고 있습니다.
frankster

9
PDF.js 라이브러리는 실제로 매우 좋은 솔루션처럼 보이지만 링크 된 데모에는 페이지에 포함 된 것으로 표시되지 않습니다 (전체 페이지를 차지함). 그러나 HMTL5 캔버스를 사용하므로 포함하기 쉽고 빠릅니다 . 단점은 github.com/mozilla/pdf.js/blob/master/examples/helloworld/… 와 달리 일부 js를 사용하는 것입니다 <object>.
LarsH

33
pdf.js는 Chrome과 같은 태블릿 브라우저에서 제대로 작동하지 않습니다. 또한 더 큰 pdf 문서의 경우 매우 느리다는 것을 알았습니다.
Rocco 타코

10
나는 이것이 권장되고 있다고 믿을 수 없다. 온라인 데모에서 글꼴 렌더링을 보면 재기 있고 끔찍한 것처럼 보입니다. 어도비 리더에서 열었을 때 서브 픽셀 렌더링으로 훨씬 더 좋아 보인다.
speedplane

531

이것은 요점까지 쉽고 빠르며 타사 스크립트가 필요하지 않습니다.

<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가 깨진 플러그인 이미지를 얻는 것을 알고 싶어한다고 생각했습니다. 플러그인 페이지는 찾고있는 플러그인을로드하지 않습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
Shanimal

62
자동 다운로드 대신 자동으로 표시되도록하려면 pdf (포함 된대로) type='application/pdf'를 포함 태그에 추가하십시오
Hassek

31
pdf를 <object>표시 할 수없는 브라우저에서 대체 컨텐츠를 표시 할 수 있으므로 태그 를 사용하는 것이 좋습니다. 원하는 경우 <embed>태그를 태그에 넣을 수도 <object>있습니다. 참조 : stackoverflow.com/questions/1244788/embed-vs-object
Raphael

1
@raphaelcm 사실 앞에서 말했듯이 embed 태그를 사용하면 모든 주요 브라우저에서 작동합니다. 심지어 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>

중요한 것은 플래시 플레이어가 필요하지 않으며 JavaScript를 사용한다는 것입니다.


29
언급해야 할 한 가지는 표시 할 수있는 PDF 크기의 상한이 있다는 것입니다. 현재 10MB / 100 페이지라고 생각합니다. 추신 : 저는 시청자가 "비공식적"이라고 생각하지 않습니다. 그들은 심지어 당신을 위해 퍼가기 URL을 구성하는 방법 페이지도 가지고 있습니다 : docs.google.com/viewer
SuperElectric

30
이 옵션은 훌륭하게 작동하지만 PDF를 공개적으로 액세스 할 수 있도록해야합니다.
KoviNET

4
@riot_starter이 솔루션은 더 이상 작동하지 않습니다 .Google에서 완전히 로그 아웃하면 정상적으로로드되고 완전히 로그인하면 정상적으로로드되지만 사이에 있으면 (무엇이든지) 비밀번호를 묻습니다. 그리고 iframe의 경우로드되지 않습니다.
dwenaus

5
당신은 사이의 구글 문서 도구의 개인 정보를 설정할 수 있습니다 public, sign-in required하고 private. Google 문서의 모든 문서에 embed옵션 이 있다는 점을 고려하면 공식적인 기능 입니다.
b1nary.atr0phy

6
언급해야 할 또 다른 사항은 "최근 요청이 너무 많았습니다"경고입니다. 이는 제한 사항입니다.
kommradHomer 2016 년

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 사용자에게는 죄송합니다. 업그레이드해야합니다. 우리는 오래 전에 이러한 브라우저 지원을 중단했습니다. :(
Adrian P.

2
Chrome의 모바일 태블릿 버전에서는 작동하지 않습니다 .. 죄송합니다 ... 죄송합니다.
Rocco The Taco

1
확대 / 축소 및 스크롤 옵션의 경우 +1이지만 최신 Chrome 버전 (44)에서는 작동하지 않습니다 ... PDF 문서를로드하지 못했습니다.
NotJay

닫기 버튼을 추가 할 수 있습니까? 그리고 어떻게?
Roberto Sepúlveda Bravo

@RoccoTheTaco Seconded, 안드로이드 모바일 크롬에서 작동하지 않습니다
Anonymous

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 하미드

또한 코드 유효성 검사와 관련된 사용자에게는 유효성이 검사되지 않습니다.
NotJay

1
Chrome과 Firefox 에서 embed태그 자체를 사용하는 것으로 간주 unsafe되는 반면, 이는 저에게 효과적이었습니다 .
Richie Thomas

1
어떤 이유로 안드로이드 (크롬)에서는 PDF를 포함하지 않고 대신 다운로드를 제공합니다. iPhone (safari)에서는 PDF의 첫 페이지 만 표시합니다.
Ivan Rubinson

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가 한두 페이지 인 경우이 옵션을 사용하는 것이 좋습니다. 물론 공유 호스팅 환경에서는 사용할 수없는 옵션 인 웹 서버에 ImageMagick이 설치되어 있어야합니다 (그러면 Ghostscript가 필요함). 이와 같이 작동하는 PHP 플러그인 (imagick)도 있지만 고유 한 요구 사항이 있습니다.


또는 Mac에서 미리보기와 같은 응용 프로그램을 사용하여 이미지를 PNG로 변환하십시오.
개렛

2
프로그래밍 방식으로 할 수 있습니까?
Dan Mantyla

문서에 1 페이지 이상이 있으면 어떻게됩니까? 첫 페이지 만 보여줄 것 같아요
seb

@seb 그것은 오래되었지만 2 ~ 3 페이지 길이의 PDF에서 사용할 수있었습니다. 그것보다 훨씬 더 크게 나가는 것이 현명하지 않을 것이라고 생각합니다. 모바일 브라우저에는 이미지를 표시하기가 어렵다고 생각합니다. 이것이 바로 "빠르고 더러운"방법이라고 부르는 이유입니다. 그러나 PDF가 몇 페이지를 넘지 않는 한 좋은 방법입니다.
Dan Mantyla

1
당신이 젠드 라이브러리를 사용하여 PDF를 열 경우, 당신은 할 수 있습니다 foreach($pdf->pages as $page)각 페이지에 대한 이미지 생성
99 문제 - 구문이 아니다

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의 답변 에서처럼으로 전환 src하면 data작동합니다.
Mottie

1
Chrome 44를 사용하고 있는데 작동하지 않습니다. 또한 데이터를 src로 전환하려고했습니다.
NotJay

type = "application / pdf"는 문제를 해결합니다. 크롬에서 잘 작동합니다.
개빈 심슨

13

FDViewPDF2SWF (자체 xpdf 기반 )를 SWF 뷰어 와 결합 하여 서버에서 PDF 문서를 즉시 변환하고 포함 할 수 있습니다.

xpdf는 완벽한 PDF 변환기가 아닙니다. 더 나은 결과가 필요하면 Ghostview 는 PDF 문서를 다른 형식으로 변환하여 Flash 뷰어를보다 쉽게 ​​구축 할 수 있습니다.

그러나 간단한 PDF 문서의 경우 FDView가 합리적으로 작동해야합니다.


다른 곳에서 FDView를 사용할 수 있습니까? code4net.com이 사라진 것 같습니다.
Michael Myers

@Michael 쉽게 찾을 수 없습니다. 나는 누군가가 fdview를 다른 곳에서 다시 호스팅 할 수있는 기회 에이 답변을 남겨 둘 것입니다.
Adam Davis

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이 서버에 새로운 요청을하기 때문 입니다. PDF가 IFrame에 표시되므로 필요한 숨겨진 필드 pdfHelperTransferData (PDF 생성에 필요한 양식 데이터를 전송하기위한)가 더 이상 설정되지 않습니다. 이 기능 / 버그에 대해서는Chrome은 PDF를 다운로드 할 때 두 가지 요청을 보내고 그 중 하나를 취소합니다 .

이제 문제 자식 IE9 및 IE10이 남아 있습니다. 이를 위해 우리는 미리보기 솔루션을 포기하고 미리보기 대신 사용자에게 다운로드로 미리보기 버튼을 클릭하여 문서를 보냅니다. 우리는 많은 노력을 기울 였지만 솔루션을 찾았더라도 사용자의 작은 부분에 대한 추가 노력은 그만한 가치가 없었을 것입니다. 다운로드에 대한 솔루션은 여기에서 찾을 수 있습니다 . IFrame으로 새로 고치지 않고 PDF 다운로드

우리의 자바 스크립트 :

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"에는 어떤 종류의 값이 있습니까?
Kate

1
안녕 @ 케이트, 우리의 경우, 우리는 웹 양식에 사용자의 입력에 따라 PDF를 생성합니다. "transferData"는 웹 API에서 PDF 생성 기능에 JSON으로 전송 된 데이터를 포함합니다. 설명을 위해 더 많은 코드를 추가했습니다.
George Maharis

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/


이것은 매우 좋은 솔루션이었으며 부트 스트랩 스타일링과 함께 잘 작동했습니다. 그것은 모두 다른 부트 스트랩 요소 위에있었습니다.
netfed

Blob 파일을 사용해 보셨습니까? pdf.output('bloburl')lib jspdf에서 이것을 사용 했지만 IE11에서는 작동하지 않는 것 같습니다.
Hoang Tran Son

9

저장된 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>


8

Scribd는 더 이상 서버에서 문서를 호스팅 할 필요가 없습니다. 당신이 그들과 함께 계정을 만들면 게시자 ID를 얻을 수 있습니다. 자체 서버에 저장된 PDF 파일을로드하는 데 몇 줄의 JavaScript 코드 만 있으면됩니다.

자세한 내용은 개발자 도구를 참조하십시오 .


1
이 작업을 수행하는 방법을 보여주는 다른 링크를 게시 할 수 있습니까? 게시 한 링크에서 명확하지 않습니다.
SuperElectric

웹 사이트를 업데이트하고이 페이지를 변경 한 것 같습니다. 나는이 페이지가 내 원래의 글에서 내가 언급 한 내용을 가지고 있다고 생각한다 : scribd.com/developers/api?method_name=Javascript+API
Bjorn

나는 이것을 두 번 이상 좋아할 수 있으면 좋겠다. 웹 사이트 하단으로 스크롤하여 API를 클릭하여 예제를 봅니다.
Rocco 타코

1
가입이 스크라이브로 마감되었습니다.
랜스 피셔

4
<object width="400" height="400" data="helloworld.pdf"></object>

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

HTML에 동적으로 urlPDF 추가 :

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

3

고려해야 할 옵션 중 하나는 주목할만한 PDF입니다. PDF
에서 실시간 온라인 공동 작업을 계획하지 않는 한 무료 계획이 있습니다.

iframe모든 HTML에 다음 을 포함시키고 결과를 즐기십시오.

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

2

브라우저로 파일을 스트리밍하려면 스택 오버플로 질문을 참조하십시오. .NET 2.0을 사용하여 PDF 파일을 바이너리로 브라우저에 스트리밍하는 방법 -약간의 차이가 있지만 파일 시스템에서 파일을 제공하는지 여부에 관계없이 작동합니다. 또는 동적으로 생성됩니다.

언급 한대로, 참조 된 MSDN 기사는 세계를 다소 단순하게 보여 주므로 HTTPS통해 브라우저로 PDF를 성공적으로 스트리밍하고 공급해야하는 일부 헤더에 대해 PDF를 읽을 수 있습니다.

이 접근법을 사용하면 iframe이 가장 좋은 방법 일 것입니다. 파일을 스트리밍하는 웹 양식을 하나 만든 다음 src속성을 첫 번째 양식으로 설정 하여 iframe을 다른 페이지에 놓습니다 .


4
@downvoter가 10 살짜리 답변을 익명으로 내리는 이유를 설명해 주시겠습니까?
GalacticCowboy

1
  1. 입력 된 PDF 바이트의 블롭 구성
  2. 이 크로스 브라우저 해결 방법으로 패치 된 iframePDF.js를 사용하십시오.

iframe의 URI는 다음과 같아야합니다.

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

이제 FF, Chrome, IE 11 및 Edge는 모두 URL의 표준 Blob URI를 통해 전달 된 iframe의 뷰어에 PDF를 표시합니다.


0

당신이 당신의 자신의 호스트 PDF.JS하지 않으려면, 당신은 시도 할 수 DocDroid을 . Google 드라이브 PDF 뷰어와 유사하지만 맞춤 브랜딩이 가능합니다.


0

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>

-7

나는 이것이 잘 작동하고 브라우저는 파이어 폭스에서 처리합니다. IE를 확인하지 않았습니다 ...

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

이것은 무엇을 달성해야합니까? 질문에 어떻게 대답하는지 알 수 없습니다.
TRiG September

HTML에 PDF를 포함시킬 때 가장 좋은 방법은이 문서에 대한 링크를 갖는 것입니다. <a href=" server1.network/trifold_JonesChiro.pdf "target='_blank'> 클라이언트 포털 Trifold (샘플) </a> 와 같이 때로는 페이지를 열고 pdf와 tring을 배치하는 것이 확실한 대답입니다. HTML에서. 또한 pdf를 탭으로 열어 둘 수 있습니다.

따라서 권장 사항은 포함하지 않고 연결하는 것입니다. 괜찮습니다. 그러나 대답으로 이것은 분명하지 않습니다.
TRiG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.