React-pdf: onLoadSuccess non déclenché avec les données Uint8Array

Créé le 21 févr. 2018  ·  4Commentaires  ·  Source: wojtekmaj/react-pdf

J'utilise react-pdf dans un environnement spécifique ( electron ) donc je ne peux pas charger le fichier via http/https mais depuis fs.
Il semble que le onLoadSuccess ne se déclenche pas, est-ce normal ?
J'ai besoin d'obtenir le nombre de pages avant de rendre la première page.

question

Tous les 4 commentaires

Certainement pas normal ! Le fichier se charge-t-il parfaitement autrement ? Pouvez-vous partager votre implémentation de React-PDF ici ?

Oui, le fichier est parfaitement chargé.

Essayé sur la version stable et la 3 alpha.

J'ai raté quelque chose ?

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>
    );
  }
}

Ça a l'air tout à fait correct ! Je me demande si vous obtenez au moins un rappel onSourceSuccess... !
Au fait, je pense que vous n'avez pas besoin de faire autant de travail.

  1. Je crois que tout ce que vous obtenez du formulaire fs.readFile sera également accepté.
  2. file={this.file} devrait également convenir.

Également un indice, componentWillMount devient bientôt obsolète, essayez de charger un document sur componentDidMount :)

merci pour l'astuce, j'ai changé en componentDidMount


    1. Oui ça marche sans le Uint8Array


    1. Non, j'ai une erreur lorsque j'essaye de charger directement le fichier sans passer l'objet.

J'ai trouvé un hack , j'ai juste besoin de connaître le nombre de pages après avoir chargé la première page , donc j'attends le renderSuccess de la première page pour obtenir le nombre de pages dans l'état du document. Je suis un peu occupé sur mon projet donc je n'ai pas eu le temps de le déboguer. Je ne suis pas sûr que ce soit parce que je fonctionne sur électron ou parce que je charge un fichier local. Quoi qu'il en soit, je vous tiendrai au courant dès que j'aurai le temps de déboguer.

Cette page vous a été utile?
0 / 5 - 0 notes