使用pdfjs自带的viewer预览pdf文件可以支持跨域

本文介绍如何使用xhr2和createObjectUrl解决PDFJS预览跨域文件的问题,通过自定义xhrPdf函数和修改viewer.js,实现跨域PDF文件的本地化加载,从而在网页中顺利预览。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pdfjs默认不支持预览跨域文件,但可以使用xhr2+createObejectUrl解决,具体改动如下:

//添加xhrPdf函数,这个函数写在哪里都可以
function xhrPdf(url,callback) {
 
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);//get请求,请求地址,是否异步
    xhr.responseType = "blob";    // 返回类型blob
    xhr.onload = function () {// 请求完成处理函数
        if (this.status === 200) {

            var blob = this.response;// 获取返回值
            var href = window.URL.createObjectURL(blob);
            callback(href)
            // location.href=href
            // location.href='viewer.html?file='+url

            // blobToDataURL(blob,function(data){
            //     console.log(data)

            // })

        }
    
    // 发送ajax请求
    xhr.send();

}

修改viewer.js里面的内容:
第一处修改为:

window.webViewerLoad=function webViewerLoad(fileUrl) {//调整了此行
  var config = getViewerConfiguration();
  window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;
  window.PDFViewerApplicationOptions = pdfjsWebAppO
<think>好的,用户想在Vue2项目中预览相对路径的PDF文件。首先,我需要回顾一下Vue2中常用的PDF预览方法。根据用户提供的引用资料,有两种主要方式:使用pdfjs-dist库和vue-pdf组件。 首先看引用[1]提到的pdfjs方式,是通过打开新窗口预览,可能需要处理文件路径的问题。而引用[2]中的vue-pdf组件使用的是绝对路径,用户现在需要处理的是相对路径,可能需要调整路径配置。 用户的问题是如何在Vue2中实现相对路径的PDF预览。需要先确定相对路径的位置。通常,Vue项目中的静态资源放在public目录下,或者通过assets目录管理。但开发环境和生产环境的路径可能不同,所以需要确保路径正确。 对于pdfjs-dist的使用,可能需要将PDF文件放在public文件夹下,比如public/static/example.pdf。然后在代码中通过相对路径访问,比如使用process.env.BASE_URL来动态获取基础路径。或者使用require来引入资源,确保路径正确解析。 而vue-pdf组件的问题在于它默认使用绝对路径,但用户可能需要根据项目结构调整路径。比如,如果PDF文件放在public/static目录下,src可以设置为“/static/example.pdf”,这在开发和生产环境下都能正确指向。但如果是相对路径,可能需要使用构建工具的动态路径处理,或者通过require来引入。 另外,可能需要考虑问题,尤其是当PDF文件不在同一名下时,但用户的问题是相对路径,所以假设文件在项目内部。此外,vue-pdf的兼容性和版本是否支持Vue2也是一个问题,需要确认安装正确的版本。 总结可能的解决方案:一是使用pdfjs-dist库,通过动态生成正确的相对路径URL;二是配置vue-pdf组件,正确指向相对路径的位置。需要检查两种方法的路径处理方式,并给出具体的代码示例。同时,注意是否需要使用public目录和如何正确引用路径,避免路径错误导致的404问题。</think>在Vue2项目中实现相对路径PDF文件预览,可以通过以下两种主流方案实现: ### 方案一:使用pdfjs-dist原生库(推荐) 1. **安装依赖** ```bash npm install pdfjs-dist@2.3.200 # 兼容Vue2的版本 ``` 2. **组件实现** ```vue <template> <div ref="pdfViewer"></div> </template> <script> import * as pdfjsLib from 'pdfjs-dist/build/pdf' import 'pdfjs-dist/web/pdf_viewer.css' export default { props: ['src'], mounted() { this.loadPDF() }, methods: { async loadPDF() { const container = this.$refs.pdfViewer const loadingTask = pdfjsLib.getDocument({ url: require('@/assets/' + this.src) // 处理相对路径 }) const pdf = await loadingTask.promise const page = await pdf.getPage(1) const viewport = page.getViewport({ scale: 1.5 }) const canvas = document.createElement('canvas') canvas.height = viewport.height canvas.width = viewport.width container.appendChild(canvas) page.render({ canvasContext: canvas.getContext('2d'), viewport: viewport }) } } } </script> ``` *路径处理说明*:使用`require()`动态解析相对路径,需确保文件存放在`src/assets/`目录下[^1] ### 方案二:使用vue-pdf插件 1. **安装依赖** ```bash npm install vue-pdf@4.3.0 # 兼容Vue2的版本 ``` 2. **组件配置** ```vue <template> <pdf :src="pdfSrc"></pdf> </template> <script> import pdf from 'vue-pdf' export default { components: { pdf }, data() { return { pdfSrc: '' } }, mounted() { this.pdfSrc = require('@/assets/' + this.$route.query.file) // 动态路径绑定 } } </script> ``` ### 路径配置要点 1. **开发环境**:建议将PDF文件存放在`src/assets/pdf/`目录 2. **生产环境**:需确保打包后的文件路径正确: ```javascript // vue.config.js module.exports = { chainWebpack: config => { config.module .rule('pdf') .test(/\.pdf$/) .use('file-loader') .loader('file-loader') .options({ name: 'assets/pdf/[name].[hash:8].[ext]' }) } } ``` ### 两种方案对比 | 特性 | pdfjs-dist | vue-pdf | |--------------------|-----------------------------|-----------------------| | 渲染方式 | 支持Canvas/SVG | 基于pdf.js封装 | | 功能扩展 | 完全控制底层API | 预设常用功能 | | 路径处理复杂度 | 需手动处理动态路径 | 自动处理打包路径 | | 多页文档支持 | 需要自行实现分页逻辑 | 自带分页组件 | 相关问题
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值