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

Verwenden Sie PSSH zur Stapelverwaltung von Linux-Servern

pssh ist eine in Python implementierte Open-Sourc...

Mehrere Möglichkeiten zum Berechnen des Alters anhand des Geburtstags in MySQL

Ich habe MySQL vorher nicht sehr oft verwendet un...

Verwenden von nginx + fastcgi zum Implementieren eines Bilderkennungsservers

Hintergrund Ein spezielles Gerät wird verwendet, ...

Detailliertes Tutorial zur VMware-Installation des Linux CentOS 7.7-Systems

So installieren Sie das Linux CentOS 7.7-System i...

Überwachen Sie die Größenänderung eines DOM-Elements über Iframe

Ein während des Entwicklungsprozesses häufig auft...

Kostenloses Tool zur Überprüfung der Richtigkeit von HTML-, CSS- und RSS-Feeds

Ein Trick zum Umgang mit dieser Art von Fehlern be...

MySQL-Implementierung für pessimistisches und optimistisches Sperren

Inhaltsverzeichnis Vorwort Tatsächlicher Kampf 1....

Erfahren Sie in einem Artikel mehr über TypeScript-Datentypen

Inhaltsverzeichnis Grundtypen jeder Typ Arrays Tu...

Zusammenfassung einiger Tipps zum MySQL-Indexwissen

Inhaltsverzeichnis 1. Grundkenntnisse der Indizie...

So schreiben Sie mithilfe von Filtern transparentes CSS für Bilder

So schreiben Sie mithilfe von Filtern transparente...