码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • react-pdf(Failed to load PDF file) react h5嵌入app展示pdf失败解决


    进来的你肯定经历了下面的折磨

    在这里插入图片描述
    按照我们的测试结论,大部分问题是出现在ios手机上的。
    直接上结论:
    ① 增加 pdfjs 线程GlobalWorkerOptions的地址

    import { Document, Page, pdfjs } from 'react-pdf';
    pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
    
    • 1
    • 2

    ②把pdf地址由url转为base64 再塞给组件,降低组件内部因pdf资源获取问题导致渲染失败的概率;

    const blobToBase64 = (blob) => {
            return new Promise((resolve, reject) => {
              const fileReader = new FileReader();
              fileReader.onload = (e) => {
                resolve(e.target.result);
              };
              // readAsDataURL
              fileReader.readAsDataURL(blob);
              fileReader.onerror = () => {
                Toast.show('blobToBase64 error')
                reject(new Error('blobToBase64 error'));
              };
            });
          }
    
        const fetchUrl = (pdfUrl) => {
            fetch(pdfUrl)
            .then((response) => response.blob())
            .then((res) => {
                let blob = new Blob([res],{type: 'application/pdf'});
                const fileURL = URL.createObjectURL(blob)
                // window.open(fileURL)
                blobToBase64(blob).then(res=> {
                    setUrl(res)
                    // console.log(res)
                }).catch(err => {
                    Toast.show('文件解析失败,请返回重试')
                })
            })
        }
        
        useEffect(() => {
            function getPdfUrl() {
                let pdf = `${state.appData?.pdfUrl}`
                fetchUrl(pdf)
            }
            getPdfUrl()
            return () => {
            }
        }, [state.appData?.pdfUrl]);
    
          <Document
              file={url} // 文件地址
              className="pdf-viewer-show"
          >
              {Array.from(new Array(numPages), (el, index) => (
                  <Page
                      key={`page_${index + 1}`}
                      pageNumber={index + 1}
                      renderAnnotationLayer={false}
                      renderTextLayer={false}
                  />
              ))}
          </Document>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    参考:
    react-pdf在部分iOS手机上加载pdf失败问题解决

    react-pdf: 在你的React应用程序中显示PDF,就像它们是图像一样容易。
    一点思考:

    1. 最开始测试的时候没问题,一上线出了问题很烦躁,看到了 react-pdf在部分iOS手机上加载pdf失败问题解决
      ,才心情缓和点,开始按照作者的方式进行处理。
    2. 虽然作者的方式并没有很好的指引我,但是坚定了我解决问题的信息,直到我看到了react-pdf: 在你的React应用程序中显示PDF,就像它们是图像一样容易。。
    3. 当我看到 file可以是URL、base64内容、Uint8Array 等等。
      这句话,我如梦初醒,茅塞顿开,url请求势必会出现问题,何况内部pdf处理还需要时间,不如直接给他把资源请求过来转为base64,在交给组件处理。
    4. 果然解决了。

    附录:
    使用react-pdf或jspdf后文件中的部分文字和签名无法展示

    查看公众号信息:

  • 相关阅读:
    打卡web基础学习
    HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)
    【云原生之Docker实战】使用Docker部署Owncloud开源个人云盘系统
    Typescript高级: 深入理解extends keyof语法
    websocket链接断开服务器报错java.io.EOFException解决办法
    基于Adaboost的数据分类算法matlab仿真
    测试人经验谈:需求不明确也能写出测试用例
    VueComponent 笔记
    Vue3:分析elementplus表格第一列序号hover变多选框实现思路
    java毕业设计云音乐后端内容管理系统Mybatis+系统+数据库+调试部署
  • 原文地址:https://blog.csdn.net/Li_Ning21/article/details/133308495
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号