Zwei Methoden zum Implementieren der automatischen Seitennummerierung beim Vue-Seitendruck

Zwei Methoden zum Implementieren der automatischen Seitennummerierung beim Vue-Seitendruck

In diesem Artikelbeispiel wird der spezifische Code von Vue zur automatischen Seitennummerierung beim Drucken von Seiten zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

1. Elemente zum Drucken per Referenz abrufen

1. Kapseln Sie eine JS-Datei ein

// Klassenattribute und Methodendefinitionen drucken/* eslint-disable */
const Print = Funktion (dom, Optionen) {
  if (!(diese Instanz von Print)) returniere neues Print(dom, Optionen);

  diese.Optionen = diese.erweitern({
    'keinDrucken': '.keinDrucken'
  }, Optionen);

  wenn ((Typ von dom) === "Zeichenfolge") {
    Dies.dom = document.querySelector(dom);
  } anders {
    dies.istDOM(dom)
    dies.dom = dies.isDOM(dom) ? dom : dom.$el;
  }

  dies.init();
};
Drucken.prototype = {
  init: Funktion () {
    var Inhalt = this.getStyle() + this.getHtml();
    dies.writeIframe(Inhalt);
  },
  erweitern: Funktion (Objekt, Objekt2) {
    für (var k in obj2) {
      obj[k] = obj2[k];
    }
    gibt Objekt zurück;
  },

  getStyle: Funktion () {
    var str = "",
      Stile = document.querySelectorAll('Stil, Link');
    für (var i = 0; i < Stile.Länge; i++) {
      str += Stile[i].äußeresHTML;
    }
    str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>";
    str += "<style>html,body,div{height: auto!important;font-size:12px}</style>";

    gibt str zurück;
  },

  getHtml: Funktion () {
    var Eingaben = document.querySelectorAll('Eingabe');
    var textareas = document.querySelectorAll('textarea');
    var wählt = document.querySelectorAll('Auswählen');

    für (var k = 0; k < Eingaben.Länge; k++) {
      wenn (Eingaben[k].Typ == "Kontrollkästchen" || Eingaben[k].Typ == "Radio") {
        wenn (Eingaben[k].checked == true) {
          inputs[k].setAttribute('aktiviert', "aktiviert")
        } anders {
          Eingaben[k].removeAttribute('aktiviert')
        }
      } sonst wenn (Eingaben[k].Typ == "Text") {
        Eingaben[k].setAttribute('Wert', Eingaben[k].Wert)
      } anders {
        Eingaben[k].setAttribute('Wert', Eingaben[k].Wert)
      }
    }

    für (var k2 = 0; k2 < Textbereiche.Länge; k2++) {
      wenn (Textbereiche[k2].Typ == 'Textbereich') {
        Textbereiche[k2].innerHTML = Textbereiche[k2].Wert
      }
    }

    für (var k3 = 0; k3 < selects.length; k3++) {
      wenn (wählt[k3].Typ == 'select-one') {
        var Kind = wählt[k3].Kinder;
        für (var i in Kind) {
          wenn (Kind[i].tagName == 'OPTION') {
            wenn (Kind[i].selected == true) {
              Kind[i].setAttribute('ausgewählt', "ausgewählt")
            } anders {
              Kind[i].removeAttribute('ausgewählt')
            }
          }
        }
      }
    }
    gib this.dom.outerHTML zurück;
    // Das zu druckende Element umschließen // Fix: https://github.com/xyl66/vuePlugs_printjs/issues/36
    // lass outerHTML = this.wrapperRefDom(this.dom).outerHTML
    // äußeresHTML zurückgeben;
  },
  // Schleife zum übergeordneten Element und umschließe das Element, das gedruckt werden soll // Verhindere, dass der CSS-Selektor am Anfang der Stammebene wirksam wird wrapperRefDom: function (refDom) {
    let prevDom = null
    lass currDom = refDom
    // Bestimmen Sie, ob sich das aktuelle Element im Textkörper befindet. Wenn nicht im Dokument, geben Sie den Knoten direkt zurück, wenn (!this.isInBody (currDom)) return currDom

    während (aktuellerDom) {
      wenn (vorherigerDom) {
        let-Element = currDom.cloneNode(false)
        element.appendChild(vorherigerDom)
        vorherigerDom = Element
      } anders {
        vorherigerDom = currDom.cloneNode(true)
      }

      currDom = currDom.übergeordnetesElement
    }

    Zurück zum vorherigen Dom
  },

  writeIframe: Funktion (Inhalt) {
    var w, doc, iframe = Dokument.createElement('iframe'),
      f = Dokument.Body.AnhängenUntergeordnetesElement(iframe);
    iframe.id = "meinIframe";
    //iframe.style = "Position:absolut;Breite:0;Höhe:0;oben:-10px;links:-10px;";
    iframe.setAttribute('Stil', 'Position:absolut;Breite:0;Höhe:0;oben:-10px;links:-10px;');
    w = f.Inhaltsfenster || f.Inhaltsdokument;
    doc = f.Inhaltsdokument || f.Inhaltsfenster.document;
    doc.öffnen();
    doc.write(Inhalt);
    doc.schließen();
    var _this = dies
    iframe.onload = Funktion(){
      _this.toPrint(w);
      setzeTimeout(Funktion () {
        Dokument.Body.RemoveChild(iframe)
      }, 100)
    }
  },

  toPrint: Funktion (Rahmenfenster) {
    versuchen {
      setzeTimeout(Funktion () {
        Rahmenfenster.Fokus();
        versuchen {
          wenn (!frameWindow.document.execCommand('print', false, null)) {
            Rahmenfenster.drucken();
          }
        } fangen (e) {
          Rahmenfenster.drucken();
        }
        Rahmenfenster.schließen();
      }, 10);
    } fangen (Fehler) {
      console.log('err', err);
    }
  },
  //Überprüfen Sie, ob ein Element ein Nachkomme des Body-Elements und nicht das Body-Element selbst ist. isInBody: function (node) {
    return (Knoten === Dokument.Body) – false: Dokument.Body.contains(Knoten);
  },
  isDOM: (Typ des HTML-Elements === „Objekt“)?
    Funktion (Objekt) {
      gibt ein Objekt der Instanz des HTMLElements zurück;
    } :
    Funktion (Objekt) {
      returniere Objekt && Objekttyp === 'Objekt' && Objekt.Knotentyp === 1 && Objekttyp.Knotenname === 'Zeichenfolge';
    }
};
const MyPlugin = {}
MyPlugin.install = Funktion (Vue, Optionen) {
  // 4. Instanzmethode hinzufügen Vue.prototype.$printPage = Print
}
Standard-MyPlugin exportieren

2. Legen Sie die Datei in einen Ordner im Projekt

3. Globale Referenz in main.js

4. Seitennutzung

Hinweis: Wenn Sie den Inhalt nicht drucken möchten, stellen Sie die Klasse einfach auf „No-Print“ ein.

2. Verwenden Sie die im Browser integrierte Methode window.print(), um HTML-Inhalte zum Drucken abzurufen

Nachteile: Der Stil kann nur auf das Etikett geschrieben werden, sonst wird er nicht wirksam

1. Kapseln Sie eine JS-Datei ein

Export-Standardfunktion printHtml(html) {
  lass Stil = getStyle();
  : Container = getContainer(html);
 
  Dokument.Body.AppendChild(Stil);
  Dokument.Body.AnhängenUntergeordnetesElement(Container);
  getLoadPromise(container).then(() => {
    fenster.drucken();
    Dokument.Body.removeChild(Stil);
    Dokument.Body.RemoveChild(Container);
  });
}
 
//Druckstil festlegen Funktion getStyle() {
let styleContent = `#Druckcontainer {
    Anzeige: keine;
}
@media drucken {
    body > :nicht(.print-container) {
        Anzeige: keine;
    }
    html,
    Körper {
      Rand: 0 0,2cm;
      Anzeige: Block !wichtig;
      Höhe: automatisch;
    }
    #Druckcontainer {
        Anzeige: Block;
    }
    @Seite {
      Rand: 0,25 cm 0;
    }
}`;
  let style = document.createElement("Stil");
  style.innerHTML = Stilinhalt;
  Rückgabestil;
}
 
// Lösche den Druckinhalt Funktion cleanPrint() {
  let div = document.getElementById('Druckcontainer')
  wenn (!!div) {
    Dokument.QuerySelector('body').removeChild(div)
  }
}
 
//Erstellen Sie ein neues DOM und füllen Sie den zu druckenden Inhalt in das DOM
Funktion getContainer(html) {
  sauberDrucken()
  let container = document.createElement("div");
  container.setAttribute("id", "Druckcontainer");
  Container.innerHTML = html;
  Rücknahmebehälter;
}
 
// Rufe die Druckmethode auf, nachdem das Bild vollständig geladen ist. Funktion getLoadPromise(dom) {
  let imgs = dom.querySelectorAll("img");
  imgs = [].slice.call(imgs);
 
  wenn (Bildlänge === 0) {
    gibt Promise.resolve() zurück;
  }
 
  lass fertigeAnzahl = 0;
  gib ein neues Versprechen zurück (Auflösen => {
    Funktion check() {
      fertigeAnzahl++;
      if (finishedCount === imgs.length) {
        lösen();
      }
    }
    imgs.forEach(img => {
      img.addEventListener("laden", prüfen);
      img.addEventListener("Fehler", prüfen);
    })
  });
}

2. Legen Sie die Datei in einen Ordner im Projekt

3. Direkter Import der Seite

4. Seitennutzung

Hinweis: Für Inhalte, die nicht gedruckt werden müssen, stellen Sie einfach die Stilanzeige ein: keine auf dem Etikett;

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue + Element realisiert die Funktion zum Drucken von Seiten
  • Vue-Formular-Formularübermittlung + asynchrone Ajax-Anforderung + Paging-Effekt
  • Vue.js implementiert Tabellenfunktionen für die Filterung, Suche, Sortierung und Paginierung mehrerer Bedingungen
  • Vue.js implementiert die Paging-Abfragefunktion
  • Vuejs2.0 implementiert ein einfaches Paging-Beispiel
  • Vue.js realisiert die Entwicklung unendlicher Lade- und Paging-Funktionen
  • Beispielcode zum Schreiben eines Pagers mit Vue
  • Implementierung des Paging-Problems von Vue + Element-UI
  • So kapseln Sie Paging-Komponenten basierend auf Vue
  • Paginierung basierend auf vue.js

<<:  Navicat stellt eine Verbindung zu MySQL8.0.11 her und es tritt ein Fehler 2059 auf

>>:  Methoden und Schritte zum Bereitstellen einer GitLab-Umgebung basierend auf Docker

Artikel empfehlen

100 Möglichkeiten, die Farbe eines Bildes mit CSS zu ändern (sammelnswert)

Vorwort „Wenn es um Bildbearbeitung geht, denken ...

Einführung in das Versionsverwaltungstool Rational ClearCase

Rational ClearCase ist ein Tool für das Softwarek...

Ausführliche Erläuterung der HTML-Grundlagen (Teil 2)

1. Liste Der Listen-UL- Container wird mit einer ...

Dieser Artikel zeigt Ihnen, was Vite mit der Anfrage des Browsers macht

Inhaltsverzeichnis Funktionsprinzip: Was macht de...

Join-Operation in MySQL

Arten von Verknüpfungen 1. Innerer Join: Die Feld...

Lösung zum automatischen Stoppen des MySQL-Dienstes

Dieser Artikel stellt hauptsächlich die Lösung fü...

Einführung in die MySQL-Optimierung für die Unternehmensproduktion

Im Vergleich zu anderen großen Datenbanken wie Or...

Was wir von Googles neuer Benutzeroberfläche (Bilder und Text) lernen können

Die bedeutendste Website-Änderung im Jahr 2011 bet...

CSS Clear Float Clear:Both Beispielcode

Heute werde ich mit Ihnen über das Löschen von Fl...

Sammlung einer Zusammenfassung der HTML-Iframe-Nutzung

Detaillierte Analyse der Iframe-Nutzung <iframe...

Beispiel zum Deaktivieren der Browser-Cache-Konfiguration im Vue-Projekt

Beim Freigeben eines Projekts müssen Sie häufig d...