【问题标题】:REACT PDF: Cannot use the packages to show static PDF fileREACT PDF:无法使用包显示静态 PDF 文件
【发布时间】:2018-02-04 20:04:58
【问题描述】:

我正在尝试在 React 应用程序中显示静态 pdf。我尝试了很多包:

反应-pdf

react-pdf-js

react-pdf-js-无限

简单反应-pdf

pdfjs-dist

react-pdf-pages

他们经常说我们可以很容易地使用 URL 或 pdf 文件作为 PDF 组件的 props,但我不能使用。

我有两个主要错误。

  1. 因为我想使用 myPDF 作为组件的道具,所以我写了这个:

    从'path/to/pdf_file'导入myPDF;

然后,render_some_component pdf:{myPDF}

这是错误:

ModuleParseError in 模块解析失败:意外令牌 (1:0) 您可能需要适当的加载程序来处理此文件类型。 (此二进制文件的源代码省略)

(当我评论那行时,这种错误消失了)

我在 webpack 配置中使用了文件加载器,我尝试了很多不同的方法,但都失败了。

  1. 我直接将 pdf 文件用于这样的道具:

    render_some_component pdf:{'path/to/pdf_file'}

    • 在控制台中:

警告:设置假工人。

11:23:55.962 pdf.worker.js:349 警告:忽略十六进制字符串中的无效字符“33”

11:23:55.963 pdf.worker.js:349 警告:忽略十六进制字符串中的无效字符“79”

... 有很多这样的“忽略无效字符”,它总是以:

localhost/:1 Uncaught (in promise) InvalidPDFException {name: "InvalidPDFException", message: "Invalid PDF structure"}

  • 在网络中,标头,我看到了:

请求网址:http://localhost:3000/myPdfFile.pdf

请求方法:GET

状态码:200 OK

远程地址:127.0.0.1:3000

  • 但在网络响应中,我只看到 HTML 布局。

我认为 pdf 文件已正确加载,但包无法识别其 PDF 结构。

除了两个主要错误外,我还有一个与包中使用的 Worker 相关的错误,但我不知道如何修复它:

未捕获的 DOMException:无法构造 'Worker'

(这与 Chrome 有关,因为人们说 Chrome 不允许本地服务器中的 Worker)

非常感谢任何帮助,因为我已经在 4 天内陷入困境。

【问题讨论】:

    标签: reactjs pdf relative-path importerror webpack-file-loader


    【解决方案1】:

    你能澄清一下你的主要任务是什么吗? 如果我理解正确,您想显示应用程序的一部分中已经存在的 PDF 文件?您不想使用 JavaScript 创建新的 PDF。

    如果您只想显示 PDF,您是否尝试过使用 iframe? 像这样的:

    <iframe
       title="file"
       style={{ width: '100%', height: '100%' }}
       src={downloadURL}
    />
    

    您还可以在此处使用从组件所在位置到文件的相对路径,或使用文件的完整 URL。

    【讨论】:

    • 它对我来说就像魔法一样!非常感谢你,塔里克。可惜只搜了一些react pdf包。
    • 我可以使用本地服务器中文件的 URL。我不能从我的组件所在的位置使用文件的相对路径。所以它无法在 Heroku 服务器上显示静态 pdf。当我在后端使用 Django 时,我正在考虑将 Django 服务静态文件设置为能够从 Heroku 服务器获取 URL 以提供 iframe。有没有更好的解决方案? @Tarik,您是否需要为 webpack 中的 pdf 文件使用一些加载器才能使用相对路径?
    • 您需要使用加载器。检查一下stackoverflow.com/questions/36643649/… 如果您使用相对路径,则 PDF 需要可从您的代码调用,如果您通过 URL 调用它,则需要从 Web 调用它,因此您的两个建议都应该有效。您只需选择最适合您需求的那一款。
    • 感谢您的链接,@Tarik。我已经尝试过该链接和其他一些链接,但我失败了。再说一次,我一直在为 PDF 文件设置一些文件加载​​器。我正在尝试设置 Django PDF 服务。
    • 完美解决方案。真的谢谢你! react-pdf 包没有提供足够的手册来说明如何从后端发送数据。
    猜你喜欢
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2016-03-07
    • 2021-10-26
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多