React-pdf: onLoadSuccess no disparado con datos Uint8Array

Creado en 21 feb. 2018  ·  4Comentarios  ·  Fuente: wojtekmaj/react-pdf

Estoy usando react-pdf en un entorno específico (electron), por lo que no puedo cargar el archivo a través de http / https pero desde fs.
Parece que onLoadSuccess no se dispara, ¿es normal?
Necesito obtener el número de páginas antes de renderizar la primera página.

question

Todos 4 comentarios

¡Definitivamente no es normal! ¿El archivo se carga perfectamente de otra manera? ¿Puedes compartir tu implementación de React-PDF aquí?

Sí, el archivo está perfectamente cargado.

Probé la versión estable y la alfa 3.

¿Me perdí algo?

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

¡Eso se ve perfectamente bien! ¡Me pregunto si obtiene al menos una devolución de llamada onSourceSuccess ...!
Por cierto, creo que no necesitas hacer tanto trabajo.

  1. Creo que todo lo que obtenga de fs.readFile también será aceptado.
  2. file={this.file} también debería estar bien.

También una pista, componentWillMount quedará obsoleto pronto, intente cargar un documento en componentDidMount :)

gracias por la pista, he cambiado a componentDidMount


    1. Sí, funciona sin el Uint8Array


    1. No, tengo un error cuando intento cargar directamente el archivo sin pasar el objeto.

Encontré un truco, solo necesito saber el número de páginas después de haber cargado la primera página, así que estoy esperando el renderSuccess de la primera página para obtener el número de páginas en el estado del documento. Estoy un poco ocupado con mi proyecto, así que no tuve tiempo para depurarlo. No estoy seguro de que sea porque estoy usando electron o porque estoy cargando un archivo local. De todos modos, los mantendré informados cuando tenga tiempo de depurar esto.

¿Fue útil esta página
0 / 5 - 0 calificaciones