Ich habe den folgenden HTML-Code:
<!DOCTYPE html>
<html>
<body>
<p>don't print this to pdf</p>
<div id="pdf">
<p><font size="3" color="red">print this to pdf</font></p>
</div>
</body>
</html>
Alles, was ich tun möchte, ist, als PDF zu drucken, was auch immer im div mit der ID "pdf" zu finden ist. Dies muss mit JavaScript erfolgen. Das "pdf" -Dokument sollte dann automatisch mit dem Dateinamen "foobar.pdf" heruntergeladen werden.
Ich habe dazu jspdf verwendet, aber die einzige Funktion, die es hat, ist "Text", der nur Zeichenfolgenwerte akzeptiert. Ich möchte HTML an jspdf senden, nicht an Text.
javascript
jspdf
John Crawford
quelle
quelle
fromHTML
Funktion; Siehe das Beispiel "HTML Renderer" unter: mrrio.github.io/jsPDFAntworten:
jsPDF kann Plugins verwenden. Damit HTML gedruckt werden kann, müssen Sie bestimmte Plugins einschließen und daher Folgendes tun:
Wenn Sie bestimmte Elemente ignorieren möchten, müssen Sie sie mit einer ID markieren, die Sie dann in einem speziellen Elementhandler von jsPDF ignorieren können. Daher sollte Ihr HTML folgendermaßen aussehen:
Anschließend verwenden Sie den folgenden JavaScript-Code, um das erstellte PDF in einem PopUp zu öffnen:
Für mich wurde ein schönes und ordentliches PDF erstellt, das nur die Zeile "Print to pdf" enthielt.
Bitte beachten Sie, dass die speziellen Element-Handler nur IDs in der aktuellen Version behandeln, die auch in einem GitHub-Problem angegeben ist . Es sagt aus:
Daher hat das Ersetzen von '#ignorePDF' durch Klassenselektoren wie '.ignorePDF' bei mir nicht funktioniert. Stattdessen müssen Sie für jedes Element, das Sie ignorieren möchten, denselben Handler hinzufügen:
Aus den Beispielen geht auch hervor, dass es möglich ist, Tags wie 'a' oder 'li' auszuwählen. Für die meisten Fälle könnte dies jedoch etwas zu uneingeschränkt sein:
Eine sehr wichtige Sache, die Sie hinzufügen sollten, ist, dass Sie alle Ihre Stilinformationen (CSS) verlieren. Glücklicherweise kann jsPDF h1, h2, h3 usw. gut formatieren, was für meine Zwecke ausreichte. Außerdem wird nur Text innerhalb von Textknoten gedruckt, was bedeutet, dass die Werte von Textbereichen und dergleichen nicht gedruckt werden. Beispiel:
quelle
<div>
, die eine von Hunderten sein könnte - also muss er alle unerwünschten DOM-Elemente markieren ?Dies ist die einfache Lösung. Dies funktioniert für mich. Sie können das Javascript-Druckkonzept verwenden und es einfach als PDF speichern.
quelle
Sie können autoPrint () verwenden und die Ausgabe wie folgt auf 'dataurlnewwindow' setzen:
quelle
Wenn Sie ein PDF einer bestimmten Seite herunterladen müssen, fügen Sie einfach eine Schaltfläche wie diese hinzu
Verwenden Sie window.print (), um Ihre gesamte Seite zu drucken, nicht nur ein Div
quelle
document.querySelector("#myIframe").contentWindow.print()
Wie bereits erwähnt, sollten Sie jsPDF und html2canvas verwenden . Ich habe auch eine Funktion in jsPDF-Ausgaben gefunden, die Ihr PDF automatisch in mehrere Seiten ( Quellen ) aufteilt.
quelle
Eine Möglichkeit ist die Verwendung der Funktion window.print (). Was keine Bibliothek erfordert
Vorteile
1. Keine externe Bibliothek erforderlich.
2.Wir können auch nur ausgewählte Körperteile drucken.
3. Keine CSS-Konflikte und JS-Probleme.
4.Core HTML / JS-Funktionalität
--- Fügen Sie einfach den folgenden Code hinzu
CSS zu
JS-Code - Rufen Sie die Bewlow-Funktion beim Klicken auf
Hinweis: Verwenden Sie! Important in jedem CSS-Objekt
Beispiel -
quelle
Ich benutze jspdf und html2canvas für das CSS-Rendering und exportiere Inhalte von bestimmten div, da dies mein Code ist
quelle
http://...domain.../path.css
oder so. Es erstellt ein separates HTML-Dokument und hat keinen Hauptkontext.Das hat mir seit Jahren gedient:
quelle
<body >
es braucht: PWenn Sie eine Tabelle exportieren möchten, können Sie sich dieses Exportbeispiel ansehen, das vom Shield UI Grid-Widget bereitgestellt wird.
Dazu erweitern Sie die Konfiguration wie folgt:
quelle
Verwenden Sie pdfMake.js und dieses Gist .
(Ich habe das Gist hier zusammen mit einem Link zum Paket html-to-pdfmake gefunden , das ich am Ende nicht benutze.)
Nach
npm install pdfmake
und Speichern des Gist inhtmlToPdf.js
benutze ich es wie folgt:Bemerkungen:
pdfMake
's erhalten kann)getBuffer()
Funktion erhalten kann) über den Browser . Das generierte PDF ist für diese Art von HTML besser geeignet als für andere Lösungen, die ich ausprobiert habe.jsPDF.fromHTML()
den in der akzeptierten Antwort vorgeschlagenen Ergebnissen erhalten habe , da diese Lösung leicht durch Sonderzeichen in meinem HTML-Code verwechselt wird, die anscheinend als eine Art Markup interpretiert werden und das resultierende PDF völlig durcheinander bringen.jsPDF.from_html()
Funktion, nicht zu verwechseln mit der aus der akzeptierten Antwort) ist für mich keine Option, da ich möchte, dass der Text in der generierten PDF-Datei einfügbar ist, während Canvas-basierte Lösungen Bitmap-basierte PDFs generieren.quelle
Ich konnte jsPDF dazu bringen, dynamisch erstellte Tabellen aus einem div zu drucken.
Funktioniert hervorragend mit Chrome und Firefox ... die Formatierung ist im Internet Explorer in die Luft gesprengt.
Ich habe auch diese aufgenommen:
quelle
Um div als PDF zu erfassen, können Sie die Lösung https://grabz.it verwenden. Es verfügt über eine JavaScript-API, die einfach und flexibel ist und es Ihnen ermöglicht, den Inhalt eines einzelnen HTML-Elements wie div oder span zu erfassen
Um es zu implementieren, müssen Sie zuerst einen App-Schlüssel und ein Geheimnis erhalten und das (kostenlose) SDK herunterladen .
Und jetzt ein Beispiel.
Angenommen, Sie haben den HTML-Code:
Um zu erfassen, was sich unter der Funktions-ID befindet, müssen Sie:
Bitte beachten Sie die
target: #feature
.#feature
ist Sie CSS-Selektor, wie im vorherigen Beispiel. Wenn die Seite geladen wird, wird jetzt an derselben Stelle wie das Skript-Tag ein Bild-Screenshot erstellt, der den gesamten Inhalt der Features div und nichts anderes enthält.Andere Konfigurationen und Anpassungen, die Sie am Div-Screenshot-Mechanismus vornehmen können, finden Sie hier
quelle