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.
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.
fs.readFile
wird auch akzeptiert.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
Uint8Array
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.