vue如何将base64流数据转成pdf文件并在新页面打开

yizhihongxing

下面是将base64流数据转成pdf文件并在新页面打开的详细攻略:

1. 将base64流数据转成blob数据

首先,需要在vue组件中定义一个方法,将base64流数据转成blob数据。

function base64ToBlob(base64Data, contentType) {
  contentType = contentType || '';
  const sliceSize = 1024;
  const byteCharacters = window.atob(base64Data);
  const bytesLength = byteCharacters.length;
  const slicesCount = Math.ceil(bytesLength / sliceSize);
  const byteArrays = new Array(slicesCount);

  for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
    const begin = sliceIndex * sliceSize;
    const end = Math.min(begin + sliceSize, bytesLength);

    const bytes = new Array(end - begin);
    for (let offset = begin, i = 0; offset < end; ++i, ++offset) {
      bytes[i] = byteCharacters[offset].charCodeAt(0);
    }
    byteArrays[sliceIndex] = new Uint8Array(bytes);
  }

  return new Blob(byteArrays, {
    type: contentType
  });
}

2. 将blob数据生成pdf文件并打开

接下来,还需要在vue组件中定义一个方法,将blob数据生成pdf文件并打开。

function openPdf(blob) {
  const objectUrl = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = objectUrl;
  a.target = '_blank';
  a.click();
  URL.revokeObjectURL(objectUrl);
}

3. 在vue组件中使用上述方法

最后,在vue组件中使用上述方法将base64流数据转成pdf文件并在新页面打开。

<template>
  <div>
    <button @click="openPdfData">Open PDF</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      pdfData: '...base64 pdf data...'
    };
  },
  methods: {
    openPdfData() {
      const blob = this.base64ToBlob(this.pdfData, 'application/pdf');
      this.openPdf(blob);
    },
    base64ToBlob(...) {
      ...
    },
    openPdf(...) {
      ...
    }
  }
};
</script>

以上是一条示例,下面再给出另一条示例详解:

示例1:使用axios获取数据

<template>
  <div>
    <button @click="openPdfData">Open PDF</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      pdfData: ''
    };
  },
  methods: {
    async getPdfData() {
      const response = await axios.get('http://example.com/getPdfData', {
        responseType: 'arraybuffer'
      });
      return new Uint8Array(response.data);
    },
    async openPdfData() {
      const uint8Array = await this.getPdfData();
      const blob = new Blob([uint8Array], { type: 'application/pdf' });
      this.openPdf(blob);
    },
    openPdf(...) {
      ...
    }
  }
};
</script>

在这个示例中,我们使用axios发送GET请求获取pdf文件的二进制数据,并将数据转成Uint8Array类型的数据。最后,使用Blob将数据转成blob类型的数据,并调用openPdf()方法打开pdf文件。

示例2:使用File API获取选择文件的二进制数据

<template>
  <div>
    <input type="file" @change="onFileChange">
    <button @click="openPdfData">Open PDF</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fileData: null
    };
  },
  methods: {
    onFileChange(e) {
      this.fileData = e.target.files[0];
    },
    async openPdfData() {
      if (!this.fileData) {
        return;
      }
      const uint8Array = await this.getFileData(this.fileData);
      const blob = new Blob([uint8Array], { type: 'application/pdf' });
      this.openPdf(blob);
    },
    getFileData(file) {
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = () => {
          resolve(new Uint8Array(reader.result));
        };
        reader.onerror = () => {
          reject(reader.error);
        };
        reader.readAsArrayBuffer(file);
      });
    },
    openPdf(...) {
      ...
    }
  }
};
</script>

在这个示例中,我们使用File API获取选择文件的二进制数据,并将数据转成Uint8Array类型的数据。然后,使用Blob将数据转成blob类型的数据,并调用openPdf()方法打开pdf文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue如何将base64流数据转成pdf文件并在新页面打开 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue项目中实现带参跳转功能

    下面是Vue项目中实现带参跳转功能的完整攻略: 1. 传递参数 1.1 路由方式 我们可以利用 Vue Router 实现带参跳转,先看一下路由文件定义如下: import Vue from ‘vue’ import Router from ‘vue-router’ import Home from ‘@/views/home/Home’ import De…

    Vue 2023年5月27日
    00
  • Vue组件中的自定义事件你了解多少

    当我们在vue组件中进行数据交互时,父组件向子组件传递了数据,在子组件中操作了这些数据,并根据需求将结果返回给父组件时,我们就需要用到自定义事件。自定义事件可以让我们在父组件中监听到子组件事件的触发并获取子组件中需要返回的数据,从而完成父子组件间的数据交互。 以下是自定义事件的步骤和示例: 步骤一:在子组件中定义自定义事件并触发 在子组件中通过 this.$…

    Vue 2023年5月28日
    00
  • three.js 利用uv和ThreeBSP制作一个快递柜功能

    下面我将详细讲解通过利用uv和ThreeBSP制作一个快递柜功能的完整攻略。 1. 什么是ThreeBSP ThreeBSP是一种能够用于对Three.js中的3D模型进行布尔运算(Union、Intersection、Difference)的工具。有了 ThreeBSP,我们就可以用简单的API调用对3D模型的形状进行编辑、剖分、重组等操作,非常方便。 2…

    Vue 2023年5月28日
    00
  • Vue全局监测错误并生成错误日志实现方法介绍

    下面是关于 Vue 全局监测错误并生成错误日志的实现方法介绍: 1. 概述 在 Vue 应用中,当出现异常时,我们通常会看到浏览器控制台中会输出错误信息。但在生产环境下,我们无法及时定位问题所在,也无法了解问题的发生频率和趋势。因此,我们需要全局监测错误并生成错误日志,以便更好地进行错误排查和分析。 2. 实现方法 实现全局错误监测并生成错误日志,可以采用如…

    Vue 2023年5月28日
    00
  • 使用async await 封装 axios的方法

    下面是使用async/await封装axios的方法的完整攻略: 1. 前置要求 在使用async/await封装axios之前,需要先了解以下内容: Promise机制 axios的基本使用方法和API async/await用法 2. 封装axios 封装axios的目的是为了方便在多个地方使用相同的网络请求配置和错误处理,避免重复书写。下面是一个简单的…

    Vue 2023年5月28日
    00
  • vue文件运行的方法教学

    下面是关于vue文件运行的方法教学的完整攻略。 什么是Vue文件 Vue文件是基于Vue框架搭建的Vue项目的组成文件之一。它是一个单文件组件,结合HTML、CSS、JavaScript等多种语言的代码,用于实现Vue组件的功能。 Vue文件的基本结构如下: <template> <!–模板代码–> </template&g…

    Vue 2023年5月28日
    00
  • element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】

    下面就针对题目中所涉及的内容进行详细介绍。 Element UI中的表单验证 Element UI提供了简单易用的表单验证功能。在Vue项目中使用Element UI时,可以通过对Element UI的form组件进行配置,来实现表单的验证功能。 验证名称重复 在表单验证过程中,可能会遇到需要验证某个字段的值是否与数据库中已有的值重复的情况。此时,可以通过自…

    Vue 2023年5月27日
    00
  • vue获取验证码倒计时组件

    下面就让我来详细讲解一下 “Vue获取验证码倒计时组件” 的完整攻略。 一、需求分析 在现代应用程序中,验证码是非常重要的。 许多应用程序需要验证码以增加安全性。因此需要一个验证码组件,这个组件的功能应该是根据用户点击发送验证码按钮时,开始倒计时,在倒计时结束之前,用户不能再次发送验证码,同时按钮的文本要实时更新显示倒计时。 二、技术选型 在Vue.js中可…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部