1398 Stimmen

Empfohlene Methode zum Einbetten von PDF in HTML?

Welche Methode wird empfohlen, um PDF in HTML einzubetten?

  • iFrame?
  • Objekt?
  • Einbetten?

Was sagt Adobe selbst dazu?

In meinem Fall wird die PDF-Datei im laufenden Betrieb generiert, so dass sie vor dem Flushen nicht in eine Drittanbieterlösung hochgeladen werden kann.

9 Stimmen

Versuchen Sie pdf2htmlEX: github.com/coolwanglu/pdf2htmlEX

1 Stimmen

Es gibt einen großartigen Vergleich nicht nur von spezifischen Lösungen, sondern auch von allgemeinen Strategien, im Wiki des pdf2htmlEX-Repos . Außerdem habe ich es noch nicht ausprobiert, este scheint eine beibehaltene Abzweigung zu sein.

26voto

amIT Punkte 1

Schauen Sie sich diesen Code an - Um das PDF in HTML einzubetten

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

10 Stimmen

Das scheint nicht zu funktionieren. Ich erhalte immer einen leeren grauen Bildschirm anstelle der PDF-Datei. Aber das Umschalten src para data wie in @Gayle's Antwort, funktioniert.

1 Stimmen

Ich verwende Chrome 44 und es funktioniert nicht. Ich habe auch versucht, Daten zu src zu wechseln.

2 Stimmen

Type="application/pdf" behebt das Problem. Funktioniert gut in Chrome.

22voto

Dan Mantyla Punkte 1752

Konvertieren Sie es mit ImageMagick in PNG, und zeigen Sie das PNG an (schnell und schmutzig).

<?php
  $dir = '/absolute/path/to/my/directory/';
  $name = 'myPDF.pdf';
  exec("/bin/convert $dir$name $dir$name.png");
  print '<img src="$dir$name.png" />';
?>

Dies ist eine gute Option, wenn Sie eine schnelle Lösung benötigen, Probleme bei der browserübergreifenden Anzeige von PDF-Dateien vermeiden wollen und wenn die PDF-Datei nur ein oder zwei Seiten umfasst. Natürlich muss ImageMagick (das wiederum Ghostscript benötigt) auf Ihrem Webserver installiert sein, eine Option, die in Shared-Hosting-Umgebungen möglicherweise nicht verfügbar ist. Es gibt auch ein PHP-Plugin (namens imagick), das funktioniert wie diese aber sie hat ihre eigenen speziellen Anforderungen.

1 Stimmen

Oder konvertieren Sie das Bild mit einer Anwendung in PNG, z. B. mit Preview auf dem Mac.

2 Stimmen

Aber kann man das auch programmatisch machen?

0 Stimmen

Was ist, wenn das Dokument mehr als 1 Seite hat? Ich vermute, Sie zeigen dann nur die erste Seite an

15voto

Ahmedakhtar11 Punkte 486

Sie können die relative Position der gespeicherten PDF-Datei wie folgt verwenden:

Beispiel1

<embed src="example.pdf" width="1000" height="800" frameborder="0" allowfullscreen>

Beispiel2

<iframe src="example.pdf" style="width:1000px; height:800px;" frameborder="0" allowfullscreen></iframe>

1 Stimmen

Chrome versteht, dass Embed wie Flash ist und blockiert es automatisch. iFrame mit Bootstrap ist eine gute Option.

13voto

Userino Punkte 963

Unser Problem ist, dass aus rechtlichen Gründen es ist nicht erlaubt, eine PDF-Datei vorübergehend auf der Festplatte zu speichern . Außerdem sollte nicht die gesamte Seite neu geladen werden, wenn ein PDF als Vorschau im Browser angezeigt wird.

Zuerst haben wir PDF.jS ausprobiert. Es funktionierte mit Base64 im Viewer für Firefox und Chrome. Allerdings war es für unsere PDF-Datei inakzeptabel langsam. IE/Edge funktionierte überhaupt nicht.

Deshalb haben wir es mit einer Base64-Zeichenkette in einem HTML-Objekt-Tag versucht. Dies funktionierte wiederum nicht mit IE/Edge (vielleicht das gleiche Problem wie bei PDF.js). In Chrome/Firefox/Safari wiederum kein Problem. Deshalb haben wir uns für eine Hybridlösung entschieden. IE/Edge verwenden wir einen IFrame und für alle anderen Browser das Object-Tag.

Die IFrame-Lösung würde natürlich auch für Chrome und Co. funktionieren. Der Grund, warum wir diese Lösung für Chrome nicht verwendet haben, ist, dass das PDF zwar korrekt angezeigt wird, Chrome stellt eine neue Anfrage an den Server, sobald Sie in der Vorschau auf "Download" klicken . Das erforderliche Hidden-Field pdfHelperTransferData (zum Senden unserer Formulardaten, die für die PDF-Erzeugung benötigt werden) ist nicht mehr gesetzt, da das PDF in einem IFrame angezeigt wird. Für diese Funktion/Fehler siehe Chrome sendet beim Herunterladen einer PDF-Datei zwei Anfragen (und bricht eine davon ab) .

Jetzt bleiben die Problemkinder IE9 und IE10. Für diese haben wir eine Vorschaulösung aufgegeben und senden das Dokument einfach durch Anklicken des Vorschau-Buttons als Download an den Benutzer (statt der Vorschau). Wir haben viel ausprobiert, aber selbst wenn wir eine Lösung gefunden hätten, hätte sich der Mehraufwand für diesen kleinen Teil der Nutzer nicht gelohnt. Unsere Lösung für den Download finden Sie hier: PDF-Download ohne Aktualisierung mit IFrame .

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

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

Um den Browsertyp für IE/Edge zu überprüfen, siehe hier: Wie kann ich Internet Explorer (IE) und Microsoft Edge mit JavaScript erkennen? Ich hoffe, diese Erkenntnisse ersparen jemand anderem die Zeit.

0 Stimmen

Es tut mir leid, aber ich verstehe nicht, was für einen Wert die Variable "transferData" hat?

1 Stimmen

Hallo @Kate, in unserem Fall generieren wir die PDF-Datei auf der Grundlage einer Benutzereingabe in unserem Webformular. "transferData" enthält die Daten, die als JSON an die PDF-Generierungsfunktion in der Web-API gesendet werden. Ich habe zur Verdeutlichung eine weitere Codezeile hinzugefügt.

13voto

  1. Erstellen Sie einen Container für Ihre PDF-Datei

    <div id="example1"></div>
  2. Informieren Sie PDFObject welche PDF-Datei eingebettet werden soll und wo sie eingebettet werden soll

    <script src="/js/pdfobject.js"></script>
    <script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script>
  3. Sie können optional CSS verwenden, um die visuelle Gestaltung, einschließlich Abmessungen, Rahmen, Ränder usw., festzulegen.

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

Quelle: https://pdfobject.com/

0 Stimmen

Dies war eine sehr gute Lösung und funktionierte gut in Verbindung mit dem Bootstrap-Styling. Es ging alles über andere Bootstrap-Elemente.

0 Stimmen

Haben Sie es mit einer Blob-Datei versucht? Ich habe dies mit pdf.output('bloburl') von lib jspdf, aber es scheint im IE11 nicht zu funktionieren.

0 Stimmen

Das ist eine gute Lösung, aber sie funktioniert nicht einmal mit dem neuesten iPhone Safari-Browser :(

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X