So generieren Sie PDFs und laden sie im Vue-Frontend herunter

So generieren Sie PDFs und laden sie im Vue-Frontend herunter

Idee: Konvertieren Sie die HTML-Seite mit html2canvas in ein Bild und generieren Sie dann mit jspdf Base64 des Bildes in einer PDF-Datei.

1. Installation und Einführung

//Konvertiere das Seiten-HTML in ein Bild npm install html2canvas --save  
// Aus dem Bild ein PDF erstellen
npm installiere jspdf --save

Führen Sie die definierte Implementierungsmethode ein und registrieren Sie sie in der Hauptdatei main.js des Projekts

importiere htmlToPdf aus „@/utils/htmlToPdf“;
// Die Verwendung der Methode Vue.use() ruft die Installationsmethode in der Toolmethode Vue.use(htmlToPdf) auf.

Portal: Prinzip und Verwendung von Vue.use() in Vue

2. So verpacken und exportieren Sie PDF-Dateien

Konfigurationsdetails

pdf = neues jsPDF('p', 'pt', [pdfX, pdfY]);
Der erste Parameter: l: horizontal p: vertikal Der zweite Parameter: Maßeinheit („pt“, „mm“, „cm“, „m“, „in“ oder „px“);
Der dritte Parameter: kann folgendes Format haben, der Standard ist „a4“. Für ein benutzerdefiniertes Format übergeben Sie die Größe einfach als numerisches Array, etwa: [592,28, 841,89];
		   a0 bis a10
		   b0 - b10
		   c0 bis c10
  		   dl
		   Brief
		   Regierungsbrief
		   Rechtliches
		   Junior-Rechtsanwalt
		   Hauptbuch
		   Boulevardzeitung
		   Kreditkarte

pdf.addPage() fügt dem PDF-Dokument eine neue Seite hinzu, die Standardgröße ist A4. Die Parameter sind wie folgt:

pdf.addImage() fügt dem PDF ein Bild hinzu. Die Parameter sind wie folgt:

Eine PDF-Seite löschen

let targetPage = pdf.internal.getNumberOfPages(); //Gesamtseitenzahl abrufen pdf.deletePage(targetPage); //Zielseite löschen

PDF-Dokument speichern

pdf.save(`test.pdf`);

Kapselung der Methode zum Exportieren von PDF-Dateien (utils/htmlToPdf.js)

// Seite ins PDF-Format exportieren. html2Canvas von „html2canvas“ importieren.
JsPDF aus „jspdf“ importieren
Standard exportieren{
  installieren (Vue, Optionen) {
    Vue.prototype.getPdf = Funktion () {
      // Wenn es beim Herunterladen der PDF-Datei nicht oben auf der Seite steht, ist der PDF-Stil falsch. Gehen Sie daher zurück zum Anfang der Seite und laden Sie es dann herunter. let top = document.getElementById('pdfDom');
      wenn (oben != null) {
        top.scrollIntoView();
        oben = null;
      }
      let title = this.exportPDFtitle;
      html2Canvas(document.querySelector('#pdfDom'), {
        allowTaint: wahr
      }).dann(Funktion (Leinwand) {
        // Breite und Höhe der Leinwand abrufen let contentWidth = canvas.width;
        Lassen Sie contentHeight = canvas.height;
	      // Die Höhe der Leinwand, die von einer PDF-Seite generiert wird, auf der die HTML-Seite angezeigt wird;
        let Seitenhöhe = Inhaltsbreite / 841,89 * 592,28;
	      //Höhe der HTML-Seite ohne PDF-Generierung let leftHeight = contentHeight;
	      // Seitenoffset let position = 0;
	      // Die Breite und Höhe des von der HTML-Seite im PDF generierten Canvas-Bildes (in diesem Fall: horizontales A4-Blatt [841,89, 592,28], die vertikale Größe muss geändert werden)
        sei imgWidth = 841,89;
        let imgHeight = 841,89 / Inhaltsbreite * Inhaltshöhe;
        : Lassen Sie pageData = canvas.toDataURL('image/jpeg', 1.0);
        let PDF = neues JsPDF('l', 'pt', 'a4');
        // Es müssen zwei Höhen unterschieden werden: eine ist die tatsächliche Höhe der HTML-Seite und die andere ist die Höhe der generierten PDF-Seite. // Wenn der Inhalt den Bereich einer PDF-Seite nicht überschreitet, ist keine Seitennummerierung erforderlich if (leftHeight < pageHeight) {
          PDF.addImage(Seitendaten, 'JPEG', 0, 0, Bildbreite, Bildhöhe)
        } anders {
          während (linkeHöhe > 0) {
            PDF.addImage(Seitendaten, „JPEG“, 0, Position, Bildbreite, Bildhöhe)
            linkeHöhe -= Seitenhöhe;
            Position -= 592,28;
            // Vermeiden Sie das Hinzufügen leerer Seiten, wenn (leftHeight > 0) {
              PDF.addPage();
            }
          }
        }
        PDF.speichern(Titel + '.pdf')
      })
    }
  }
}

Anwendung in verwandten Komponenten

<Vorlage>
  <div Klasse="wrap" >
    <div id="pdfDom" style="padding: 10px;">
      <el-Tabelle
        :data="Tabellendaten"
        Grenze>
        <el-table-column prop="date" label="Datum" width="250"></el-table-column>
        <el-table-column prop="name" label="Tabelle" width="250"></el-table-column>
        <el-table-column prop="address" label="Adresse"></el-table-column>
      </el-Tabelle>
    </div>
    <button type="button" style="margin-top: 20px;" @click="btnClick">PDF exportieren</button>
  </div>

</Vorlage>
 
<Skript>
Standard exportieren {
  Daten() { 
    zurückkehren {
      exportPDFtitle: "Name der PDF-Datei zum Seitenexport",
      Tabellendaten: [
         {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Huoju Avenue, Bezirk Jiulongpo, Chongqing“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Huoju Avenue, Bezirk Jiulongpo, Chongqing“
        },{
          Datum: '2016-05-03',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-02',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-04',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-01',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-08',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-01',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-08',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Jiangjun Avenue, Bezirk Jiangning, Nanjing“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Jiangjun Avenue, Bezirk Jiangning, Nanjing“
        },, {
          Datum: '2016-05-04',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-01',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-08',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        },{
          Datum: '2016-05-01',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-08',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Nr. 1518, Jinshajiang Road, Bezirk Putuo, Shanghai“
        }, {
          Datum: '2016-05-08',
          Name: 'Wang Xiaohu',
          Adresse: „Cultural Avenue, Bezirk Hongshan, Wuhan“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Cultural Avenue, Bezirk Hongshan, Wuhan“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Cultural Avenue, Bezirk Hongshan, Wuhan“
        }, {
          Datum: '2016-05-06',
          Name: 'Wang Xiaohu',
          Adresse: „Jiangjun Avenue, Bezirk Jiangning, Nanjing“
        }, {
          Datum: '2016-05-07',
          Name: 'Wang Xiaohu',
          Adresse: „Cultural Avenue, Bezirk Hongshan, Wuhan“
        },
      ]
    } 
  }, 
  Methoden: {
    btnClick(){
      dies.$nextTick(() => {this.getPdf();})
    },
  },  
}
</Skript>  

Wirkung

Zu optimierende Teile

  1. Beim Blättern wird der Seiteninhalt abgeschnitten (Sie können gerne eine Nachricht zur Diskussion hinterlassen).
  2. Auf einer neuen Seite beginnen andere Inhalte; Idee: Überzähligen Inhalt berechnen und Höhe der letzten Seite belegen (eingestellter Abstand = Seitenhöhe - Überzählige Höhe).

Zusammenfassen

Dies ist das Ende dieses Artikels zum Generieren und Herunterladen von PDFs im Vue-Frontend. Weitere relevante Inhalte zum Generieren und Herunterladen von PDFs im Vue-Frontend finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue implementiert PDF-Export, um Probleme wie unscharfe generierte Leinwände zu lösen (empfohlen)
  • So implementieren Sie die PDF-Dateivorschau in Vue
  • Vue implementiert Online-Vorschau von PDF-Dateien und Download (pdf.js)
  • Detaillierte Erläuterung des PDF der globalen Vue2.0-Komponenten
  • Vue implementiert die Online-Vorschaufunktion von PDF-Dokumenten
  • Beispielcode zum Drucken von Webseiten als PDF in Vue
  • Vue exportiert die Seite als Bild oder PDF
  • Implementierungsideen zum Exportieren von Vue-Seiten in das PDF-Format
  • Detaillierte Erklärung zur Verwendung von vue-pdf in vue
  • So exportieren Sie Vue-Seiten in PDF-Dateien

<<:  Beschreibung der Nginx-Zugriffsprotokoll- und Fehlerprotokollparameter

>>:  Die HTML-Eingabedateisteuerung begrenzt den Typ der hochgeladenen Dateien

Artikel empfehlen

Diagramm des Prozesses zur Implementierung eines Richtungsproxys durch Nginx

Dieser Artikel stellt hauptsächlich den Prozess d...

Detaillierte Erklärung der markierten Union-Typen in TypeScript 2.0

Inhaltsverzeichnis Erstellen von Zahlungsmethoden...

Vorschläge zur Optimierung der Webseiten-Kopfzeile

Logo-Optimierung: 1. Das Logobild sollte so klein...

Zusammenfassung zur Anwendung dekorativer Elemente im Webdesign

<br />Vorwort: Bevor Sie dieses Tutorial les...

js zur Realisierung von Login- und Registrierungsfunktionen

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erläuterung des Vue-Router-Routings

Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...

Schritte zum Exportieren der Felder und zugehörigen Attribute von MySQL-Tabellen

Müssen die Felder und Eigenschaften der Tabelle i...

Lernen Sie, benutzerdefinierte Hooks in React zu erstellen

1. Was sind benutzerdefinierte Hooks Wiederverwen...

10 Tipps für das User Interface Design mobiler Apps

Tipp 1: Konzentriert bleiben Die besten mobilen A...

Methode zur Optimierung von MySQL-Gruppenabfragen

MySQL behandelt GROUP BY- und DISTINCT-Abfragen i...

Schritte zum Reparieren einer Beschädigung der Datei grub.cfg im Linux-System

Inhaltsverzeichnis 1. Einführung in die grub.cfg-...

Design: Ein eigenwilliger Designer

<br />In meiner jahrelangen professionellen ...