React-pdf: onLoadSuccess не запускается с данными Uint8Array

Созданный на 21 февр. 2018  ·  4Комментарии  ·  Источник: wojtekmaj/react-pdf

Я использую response-pdf в определенной среде (электронном), поэтому я не могу загрузить файл через http / https, но из fs.
Вроде не запускается onLoadSuccess, это нормально?
Мне нужно получить количество страниц до рендеринга первой страницы.

question

Все 4 Комментарий

Определенно ненормально! В противном случае файл загружается идеально? Можете ли вы поделиться здесь своей реализацией React-PDF?

Да, файл отлично загружается.

Пробовал на стабильном выпуске и на 3 альфе.

Я что-то пропустил?

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

Выглядит прекрасно! Интересно, получите ли вы хотя бы обратный вызов onSourceSuccess ...!
Между прочим, я думаю, что вам не нужно проделывать такую ​​большую работу.

  1. Я верю, что все, что вы получите в форме fs.readFile , также будет принято.
  2. file={this.file} тоже должно быть в порядке.

Также подсказка, что componentWillMount скоро устареет, попробуйте загрузить документ на componentDidMount :)

спасибо за подсказку, я перешел на componentDidMount


    1. Да, это работает без Uint8Array


    1. Нет, при попытке загрузить файл напрямую без передачи объекта возникает ошибка.

Я нашел взлом, мне просто нужно знать количество страниц после того, как я загрузил первую страницу, поэтому я жду, пока renderSuccess первой страницы не получит количество страниц в состоянии документа. Я немного занят своим проектом, поэтому у меня не было времени отладить его. Я не уверен, что это потому, что я использую электрон или загружаю локальный файл. В любом случае, я буду держать вас в курсе, когда у меня будет время отладить это.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги