当前位置: 首页 > news >正文

PDF 组件里文字没渲染出来,只显示了线条(或者空白)

PDF 组件里文字没渲染出来,只显示了线条(或者空白),但浏览器直接打开完全正常,这是 Vue3 中 PDF.js 系列组件非常典型的问题。

方案 1:修复中文字体渲染(必试)

这是 90% 中文字体不显示问题的解决方法。

1. 配置 PDF.js 的字体映射

如果你用的是vue3-pdf-app,它底层依赖 PDF.js,可以直接配置字体:

<template> <div style="height: 800px;"> <vue3-pdf-app :src="pdfUrl" /> </div> </template> <script setup> import { Vue3PdfApp } from 'vue3-pdf-app' import 'vue3-pdf-app/dist/index.css' import pdfjsLib from 'pdfjs-dist/build/pdf' import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry' // 关键:配置 worker 和字体 pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker // 开启字体解析(针对中文) pdfjsLib.disableWorker = false pdfjsLib.cMapUrl = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.4.120/cmaps/' pdfjsLib.cMapPacked = true const pdfUrl = '你的PDF地址' </script>
2. 后端生成 PDF 时嵌入字体(根治方案)

最彻底的解决方法是在后端生成 PDF 时,把中文字体嵌入进去,这样前端无论用什么阅读器都能正常显示。

  • Java iText:FontFactory.register("simhei.ttf");并设置BaseFont.EMBEDDED
  • Puppeteer:确保 PDF 使用的字体在服务器上存在,或使用系统字体
  • Wkhtmltopdf:添加--enable-local-file-access并指定字体路径

方案 2:改用 iframe 预览(最快验证+兜底方案)

如果不想折腾字体问题,直接用浏览器原生的 iframe,100% 兼容中文字体,不会出现渲染问题:

<template> <iframe :src="pdfUrl" width="100%" height="800px" frameborder="0" /> </template> <script setup> const pdfUrl = '你的PDF地址' </script>

✅ 优点:零依赖、零配置、永远兼容中文字体
❌ 缺点:无法自定义样式、工具栏有限


方案 3:检查后端响应头

让后端确认返回的 PDF 响应头包含以下内容:

Content-Type: application/pdf Content-Disposition: inline; filename="report.pdf" Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, OPTIONS

如果是 Spring Boot 后端,可以这样配置:

@GetMapping("/api/pdf")publicResponseEntity<Resource>getPdf(){// ... 读取文件流HttpHeadersheaders=newHttpHeaders();headers.setContentType(MediaType.APPLICATION_PDF);headers.setContentDispositionFormData("inline","report.pdf");returnnewResponseEntity<>(resource,headers,HttpStatus.OK);}

http://www.jsqmd.com/news/898723/

相关文章:

  • 营收暴增68%,利润却腰斩,宇树科技的IPO是“真香”还是“惊吓”?
  • 2026年BarTender公司推荐:五大王牌排名实测 - 资讯纵览
  • ROS2 Foxy下,用C++搞定六轴IMU数据解析与Rviz2实时姿态显示的完整流程
  • 3分钟搞定:Mac免费读写NTFS硬盘的终极指南
  • 合肥白蚁防治公司|合肥专业灭白蚁认准净安虫控,无损治蚁+超长质保防复发 - 资讯纵览
  • 软硬协同噪声抑制:从硬件滤波到智能优化VMD的工程实践
  • 主板南北桥芯片:从核心枢纽到外围管家,一文读懂其协同与分工
  • Adobe-GenP 3.0:免费解锁Adobe Creative Cloud的终极指南
  • 气象数据处理实战:用CDO和grib_copy搞定GRIB文件合并与格式转换(附避坑要点)
  • 【小白也能学会】企业微信机器人关联 OpenClaw 配置方法(包含安装包)
  • pot-desktop跨平台翻译工具终极指南:15种语音朗读功能深度解析
  • VMware Workstation Pro 17免费激活终极指南:解锁完整虚拟化体验的5个关键
  • 深度解析:C 语言中的内存对齐与边界安全
  • SigmaStudio调音实战:用ADAU1701的16个EQ滤波器例程,手把手教你调出专业级音效
  • nvme-cli架构深度解析:现代NVMe管理工具的设计哲学与实践
  • 无锡灭老鼠|本地11年专业灭鼠,典雅虫控从根源解决鼠患不反弹 - 资讯纵览
  • 数据可视化平台Superset(部署实战篇)
  • 混合量子-经典UNet:用8量子比特突破图像分割参数壁垒
  • 排版这么这么好看的网络工具箱离线版,谁能不爱,这两天又有优化
  • 20260527 紫题训练
  • STM32H743模拟SMBUS读取BQ40Z50电量,我踩过的坑和波形图都在这了
  • 科研效率翻倍!大模型辅助文献检索与筛选:1天搞定1周工作量
  • RTX 4090 Ti vs A100 规格对比表 ai算力对比,来源https://hmc-tech.com/
  • 越秀区搬家公司电话 异地搬家省钱全攻略(2026 最新) - 从来都是英雄出少年
  • 【ECC 内存技术】在关键业务系统中的实战应用
  • 保姆级教程:在RK3588开发板上搞定GT9XX触摸屏驱动(附常见问题修复)
  • 网络工程师的英语水平,到底需要到什么程度?
  • 2026年溶解氧检测仪信誉与价值评估:从口碑积累到性价比的技术解读 - 品牌推荐大师1
  • 高频SSVEP脑机接口:基于相位同步梳状滤波器的鲁棒解码方案
  • DDrawCompat:让经典游戏在现代Windows上完美运行的终极兼容方案