前端处理pdf文件流,展示pdf

**场景:**后端传pdf文件流,前端在页面中展示pdf

request请求为:

javascript 复制代码
//使用get请求
export async function getRequest(INSTSN, REGISTESN) {
  const url = '/api/getPdf?INSTSN=' + INSTSN + '&REGISTESN=' + REGISTESN
  const method = 'get'
  const headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }
  const responseType = 'arraybuffer'
  const response = await service.request({
    url,
    method,
    headers,
    responseType,
  })
  return response;
}

调用请求,处理返回的数据显示pdf

自动下载pdf,打开打印界面,跳转到pdf界面

javascript 复制代码
async getReport() {
        //得到需要的参数
      const INSTSN = INSTSN;
      const REGISTESN = REGISTESN;
      try {
        //通过get请求,从后端返回得到pdf的数据
        const response = await getReport(INSTSN, REGISTESN);
        const binaryData = [response];
        const blob = new Blob(binaryData, { type: 'application/pdf' });
        const pdfUrl = URL.createObjectURL(blob);
        if (pdfUrl) {
          this.handlePrint(pdfUrl);
        }
      } catch (error) {
        console.error('加载 PDF 失败:', error);
        alert('无法打开 PDF,请检查控制台!');
      }
    },
    //处理生成的url,打开pdf
    handlePrint(pdfUrl) {
       // 创建一个隐藏的 a 标签用于下载 PDF
       const a = document.createElement('a');
       a.href = pdfUrl;
       a.download = 'report.pdf';
       a.style.display = 'none';
       document.body.appendChild(a);
      // // 触发下载
       a.click();
       // 移除 a 标签
       document.body.removeChild(a);
      // 打开 PDF 并直接调用打印功能
      const newWindow = window.open(pdfUrl);
       if (newWindow) {
         newWindow.onload = function () {
           newWindow.print();
         };
       }
      // 释放之前创建的临时 URL
      URL.revokeObjectURL(pdfUrl);
    }

打开打印界面,转到pdf界面,不会自动下载

javascript 复制代码
async getReport() {
        //得到需要的参数
      const INSTSN = INSTSN;
      const REGISTESN = REGISTESN;
      try {
        //通过get请求,从后端返回得到pdf的数据
        const response = await getReport(INSTSN, REGISTESN);
        const binaryData = [response];
        const blob = new Blob(binaryData, { type: 'application/pdf' });
        const pdfUrl = URL.createObjectURL(blob);
        if (pdfUrl) {
          this.handlePrint(pdfUrl);
        }
      } catch (error) {
        console.error('加载 PDF 失败:', error);
        alert('无法打开 PDF,请检查控制台!');
      }
    },
    //处理生成的url,打开pdf
    handlePrint(pdfUrl) {
       // 创建一个隐藏的 a 标签用于下载 PDF
       //const a = document.createElement('a');
       //a.href = pdfUrl;
       //a.download = 'report.pdf';
       //a.style.display = 'none';
       //document.body.appendChild(a);
      // // 触发下载
       //a.click();
       // 移除 a 标签
       //document.body.removeChild(a);
      // 打开 PDF 并直接调用打印功能
      const newWindow = window.open(pdfUrl);
       if (newWindow) {
         newWindow.onload = function () {
           newWindow.print();
         };
       }
      // 释放之前创建的临时 URL
      URL.revokeObjectURL(pdfUrl);
    }

转到pdf页面,不会自动下载,不会跳出打印窗口

javascript 复制代码
async getReport() {
        //得到需要的参数
      const INSTSN = INSTSN;
      const REGISTESN = REGISTESN;
      try {
        //通过get请求,从后端返回得到pdf的数据
        const response = await getReport(INSTSN, REGISTESN);
        const binaryData = [response];
        const blob = new Blob(binaryData, { type: 'application/pdf' });
        const pdfUrl = URL.createObjectURL(blob);
        if (pdfUrl) {
          this.handlePrint(pdfUrl);
        }
      } catch (error) {
        console.error('加载 PDF 失败:', error);
        alert('无法打开 PDF,请检查控制台!');
      }
    },
    //处理生成的url,打开pdf
    handlePrint(pdfUrl) {
       // 创建一个隐藏的 a 标签用于下载 PDF
       //const a = document.createElement('a');
       //a.href = pdfUrl;
       //a.download = 'report.pdf';
       //a.style.display = 'none';
       //document.body.appendChild(a);
      // // 触发下载
       //a.click();
       // 移除 a 标签
       //document.body.removeChild(a);
      // 打开 PDF 并直接调用打印功能
      const newWindow = window.open(pdfUrl);
       //if (newWindow) {
         //newWindow.onload = function () {
           //newWindow.print();
         //};
      // }
      // 释放之前创建的临时 URL
      URL.revokeObjectURL(pdfUrl);
    }

原文链接:vue接收后端传来的pdf文件流,前端调用预览PDF_vue如何显示fastreport-CSDN博客

相关推荐
mini_055几秒前
elementPlus版本升级,el-select默认值显示问题
前端·javascript·vue.js
C_心欲无痕7 分钟前
vue3 - watchPostEffect在DOM 更新后的副作用处理
前端·vue.js
教练、我想打篮球26 分钟前
123 safari 浏览器中下载 URLEncoder.encode 的中文名称的文件, safari 未进行解码, 其他浏览器正常
前端·http·safari
有趣灵魂43 分钟前
Java-Spingboot根据HTML模板和动态数据生成PDF文件
java·pdf·html
mfxcyh1 小时前
使用html2canvas和jsPDF导出pdf文件、把pdf文件传给后端
pdf
小白x1 小时前
Echarts常用配置
前端
hello_Code1 小时前
css和图片主题色“提取”
前端
小杨梅君1 小时前
Vue3与iframe通信方案详解:本地与跨域场景
前端·vue.js
IT_陈寒1 小时前
Redis高频踩坑实录:5个不报错但会导致性能腰斩的'隐秘'配置项
前端·人工智能·后端
CoolerWu1 小时前
2025 · 我与 AI / Vibe Coding 的一年
前端·后端