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.
¡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.
fs.readFile
también será aceptado.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
Uint8Array
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.