React-pdf: onLoadSuccess wird nicht mit Uint8Array-Daten ausgelöst

Erstellt am 21. Feb. 2018  ·  4Kommentare  ·  Quelle: wojtekmaj/react-pdf

Ich verwende React-PDF in einer bestimmten Umgebung (Elektron), sodass ich die Datei nicht über http/https laden kann, sondern von fs.
Es scheint, dass der onLoadSuccess nicht ausgelöst wird, ist das normal?
Ich muss die Anzahl der Seiten vor dem Rendern der ersten Seite abrufen.

question

Alle 4 Kommentare

Definitiv nicht normal! Lädt die Datei sonst einwandfrei? Können Sie Ihre Implementierung von React-PDF hier teilen?

Ja, die Datei ist perfekt geladen.

Versucht auf der stabilen Version und der 3 Alpha.

Habe ich etwas verpasst?

export default class PDFPlayer extends PureComponent {

  state = {
    fileLoaded: 0,
    numPages: null,
    pageNumber: 1,
  }

  componentWillMount() {
    const { filePath } = this.props;
    if (fs.existsSync(filePath)) {
      fs.readFile(filePath, (err, file) => {
        if (err) { console.log(err); }
        this.file = new Uint8Array(file);
        this.setState({ fileLoaded: 1 });
      });
    }
  }

  onLoadSuccess = (pdf) => {
    console.log('onDocumentLoad', pdf);
    this.setState({ numPages: pdf.numPages });
  }

  onRenderSuccess = (page) => {
    console.log(page.originalHeight);
  }

  render() {
    const { fileLoaded } = this.state;
    if (!fileLoaded) return null;
    return (
      <div style={{ ...styles.container, height: document.body.offsetHeight }}>
        <Document
          ref={(doc) => { this.document = doc; }}
          file={{ data: this.file }}
          onLoadSuccess={this.onLoadSuccess}
        >
          <Page onRenderSuccess={this.onRenderSuccess} pageNumber={1} />
        </Document>
      </div>
    );
  }
}

Das sieht vollkommen in Ordnung aus! Ich frage mich, ob Sie zumindest einen onSourceSuccess-Rückruf erhalten...!
Übrigens denke ich, dass Sie nicht so viel Arbeit machen müssen.

  1. Ich glaube, alles, was Sie von fs.readFile wird auch akzeptiert.
  2. file={this.file} sollte auch in Ordnung sein.

Auch ein Hinweis, ComponentWillMount wird bald veraltet, versuchen Sie, ein Dokument auf ComponentDidMount zu laden :)

danke für den Hinweis, ich habe mich in componentDidMount geändert


    1. Ja, es funktioniert ohne das Uint8Array


    1. Nein, ich habe einen Fehler, wenn ich versuche, die Datei direkt zu laden, ohne das Objekt zu übergeben.

Ich habe einen Hack gefunden, ich muss nur die Anzahl der Seiten wissen, nachdem ich die erste Seite geladen habe, also warte ich auf den renderSuccess der ersten Seite, um die Anzahl der Seiten im Dokumentstatus zu erhalten. Ich bin mit meinem Projekt etwas beschäftigt, daher habe ich nicht die Zeit, dies zu debuggen. Ich bin mir nicht sicher, ob es daran liegt, dass ich ein Elektron verwende oder eine lokale Datei lade. Wie auch immer, ich werde Sie auf dem Laufenden halten, wenn ich die Zeit habe, dies zu debuggen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen