react-pdf-js - Uncaught (in promise) e {name: "InvalidPDFException", message: "Invalid PDF structure"}

Rba*_*bar 3 javascript pdf reactjs

我有故意(以最小化在第一任何错误)仅复制了用于反应-PDF-JS演示,加入pagepagesstate解决错误,添加封闭);在的端部render/return来解决另一个错误,和编辑的组件名称。尽管如此,我还是收到了下面的错误,并且不确定它的含义。它指向viewingPDF(这是我的 html 扩展名myapp.firebaseapp.com/viewingPDF)的第一行,所以它没有直接指向我的组件中的任何错误,我不确定如何修复它。

错误:

Uncaught (in promise) 
e
message: "Invalid PDF structure"
name : "InvalidPDFException"
__proto__ : Error at https://myapp.firebaseapp.com/static/js/main.9108db74.js:34:3985 at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:34:4013) at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:34:12954) at t (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27623) at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:56:12712) at t (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27623) at re (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:28006) at https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:28016 at n.(anonymous function).i (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27496) at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27500)
stack: "Error?    at https://myapp.firebaseapp.com/static/js/main.9108db74.js:34:3985?    at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:34:4013)?    at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:34:12954)?    at t (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27623)?    at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:56:12712)?    at t (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27623)?    at re (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:28006)?    at https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:28016?    at n.(anonymous function).i (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27496)?    at Object.<anonymous> (https://myapp.firebaseapp.com/static/js/main.9108db74.js:33:27500)"
__proto__: Object
constructor: Error()
message: ""
name: "Error"
toString: toString()
__proto__: Object
__defineGetter__: __defineGetter__()
__defineSetter__: __defineSetter__()
__lookupGetter__: __lookupGetter__()
__lookupSetter__: __lookupSetter__()
constructor: Object()
hasOwnProperty: hasOwnProperty()
isPrototypeOf: isPrototypeOf()
propertyIsEnumerable: propertyIsEnumerable()
toLocaleString: toLocaleString()
toString: toString()
valueOf: valueOf()
get __proto__: __proto__()
set __proto__: __proto__()
Run Code Online (Sandbox Code Playgroud)

这是我的组件实现(与上面的演示保持接近):

import React from 'react';
import PDF from 'react-pdf-js';

class ViewPDF extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      page: 0,
      pages: 3
    }
    this.onDocumentComplete = this.onDocumentComplete.bind(this);
    this.onPageComplete = this.onPageComplete.bind(this);
    this.handlePrevious = this.handlePrevious.bind(this);
    this.handleNext = this.handleNext.bind(this);
  }

  onDocumentComplete(pages) {
    this.setState({ page: 1, pages });
  }

  onPageComplete(page) {
    this.setState({ page });
  }

  handlePrevious() {
    this.setState({ page: this.state.page - 1 });
  }

  handleNext() {
    this.setState({ page: this.state.page + 1 });
  }

  renderPagination(page, pages) {
    let previousButton = <li className="previous" onClick={this.handlePrevious}><a href="#"><i className="fa fa-arrow-left"></i> Previous</a></li>;
    if (page === 1) {
      previousButton = <li className="previous disabled"><a href="#"><i className="fa fa-arrow-left"></i> Previous</a></li>;
    }
    let nextButton = <li className="next" onClick={this.handleNext}><a href="#">Next <i className="fa fa-arrow-right"></i></a></li>;
    if (page === pages) {
      nextButton = <li className="next disabled"><a href="#">Next <i className="fa fa-arrow-right"></i></a></li>;
    }
    return (
      <nav>
        <ul className="pager">
          {previousButton}
          {nextButton}
        </ul>
      </nav>
      );
  }

  render() {
    let pagination = null;
    if (this.state.pages) {
      pagination = this.renderPagination(this.state.page, this.state.pages);
    }
    return (
      <div>
        <PDF file="somefile.pdf" onDocumentComplete={this.onDocumentComplete} onPageComplete={this.onPageComplete} page={this.state.page} />
        {pagination}
      </div>
    );
  }
}

module.exports = ViewPDF;
Run Code Online (Sandbox Code Playgroud)

为了将代码剥离到最基本的内容并只获得 pdf 渲染,我或者将我的组件减少到以下内容。尽管如此,我还是遇到了同样的错误。

替代方案(简化为基础):

import React from 'react';
import PDF from 'react-pdf-js';

export default class ViewPDF extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      page: 0,
      pages: 3
    };

    this.onDocumentComplete = this.onDocumentComplete.bind(this);
    this.onPageComplete = this.onPageComplete.bind(this);
  }

  onDocumentComplete(pages) {
    this.setState({ page: 1, pages });
  }

  onPageComplete(page) {
    this.setState({ page });
  }

  render() {
    return (
      <div>
        <PDF file="somePdfToView.pdf"/>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

lec*_*tor 5

“无效的 PDF 结构”.. 我很确定该演示已经对该文件引用 ( <PDF file="somePdfToView.pdf"/>)采取了一些自由。请参阅react-pdf#props了解它应该是什么。

  • @Rbar 你是如何让导入工作的?我也在尝试“从 ../myPDF.pdf”导入 myPDF,但我的说它找不到模块。 (3认同)
  • 你搞定了!谢谢!在我的组件顶部交换导入语句的简单路径(例如`import myPDF from '../static/sample.pdf'`),然后替换`&lt;PDF file="somePdfToView.pdf"/&gt;`使用 `&lt;PDF file={myPDF}"/&gt;` 效果很好。非常感谢。 (2认同)