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

下面是将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日

相关文章

  • MVVM模型在Vue中的使用详解

    MVVM是Model-View-ViewModel的缩写,它是一种前端架构模式,旨在将软件应用程序的开发和用户界面的设计分离开来。MVVM模型在Vue中的使用详解可以从以下几个方面来讲解: 1. MVVM模型在Vue中的基本原理 Vue.js是一种基于MVVM架构模式的JavaScript库,大体上遵循了MVVM的设计思路。Vue中的Model用来存储数据,…

    Vue 2023年5月28日
    00
  • vue项目代码格式规范设置参考指南

    下面我将详细讲解“vue项目代码格式规范设置参考指南”的完整攻略。 为什么需要代码格式规范? 在团队协作开发过程中,每个人的代码习惯存在差异,这样会导致代码风格混乱、不统一,给团队协作带来一定的困难,而代码格式规范可以统一代码格式,提高代码的可读性和可维护性,从而提高开发效率、降低维护成本。 选择合适的代码格式规范 选择一种合适的代码格式规范很重要,好的代码…

    Vue 2023年5月27日
    00
  • Vue 实现把表单form数据 转化成json格式的数据

    现在许多前端应用都需要从表单中获取用户数据以便后续处理。在Vue中,我们可以很方便地使用v-model指令来绑定表单元素的值,然后通过相关的事件来处理数据的提交,从而实现将表单数据转化为JSON格式的数据。 下面是实现的详细步骤: 步骤 在Vue组件中定义表单数据,并使用v-model指令来绑定表单元素的值,如下所示: <template> &l…

    Vue 2023年5月28日
    00
  • vue2.0使用Sortable.js实现的拖拽功能示例

    实现拖拽功能是现代Web应用中常见的需求之一,而Vue.js是目前最受欢迎的JavaScript框架之一。在Vue.js中,我们可以使用第三方库Sortable.js来完成拖拽功能的实现。 下面是实现“vue2.0使用Sortable.js实现的拖拽功能示例”的攻略: 准备工作 使用Vue CLI创建一个新的Vue.js项目。 bash vue create…

    Vue 2023年5月29日
    00
  • 优雅处理前端异常的几种方式推荐

    错误边界 错误边界是React应用中一种异常处理机制,用于处理任何可能在组件树中发生的未捕获 JavaScript 错误。使用错误边界的方式来处理异常会使整个应用程序更具有容错性,使崩溃影响范围更小。 要创建一个错误边界,只需要实现一个名为 static getDerivedStateFromError() 或 componentDidCatch() 生命周…

    Vue 2023年5月28日
    00
  • nodejs如何读取文件二进制 前端响应blob或base64显示图片

    一、读取文件二进制 在Node.js中,要读取文件二进制,可以使用Node.js内置的fs模块。可以通过调用fs.readFile方法来读取文件并将其保存到Buffer中,然后将其转换为二进制字符串。 以下是一个简单的示例: const fs = require(‘fs’); fs.readFile(‘./image.jpg’, (err, image) =…

    Vue 2023年5月28日
    00
  • vue深度优先遍历多层数组对象方式(相当于多棵树、三级树)

    如何进行vue深度优先遍历多层数组对象方式 (相当于多棵树、三级树)?下面我们将提供一份完整的攻略。 首先需要明确的是,在vue中,深度遍历多层对象和树的方法都是使用递归的方式完成。以下是深度遍历多层对象的一般实现方法: function deepTraversal(obj, callback) { for (let key in obj) { if (ob…

    Vue 2023年5月27日
    00
  • 几个你不知道的技巧助你写出更优雅的vue.js代码

    下面是关于“几个你不知道的技巧助你写出更优雅的vue.js代码”的完整攻略,包括以下方面: 使用 Vue.js 官方插件 Vue.js 团队开发并维护了一系列的插件,这些插件可以帮助你更加方便地开发和调试 Vue.js 应用。其中,最常用的插件是 Vue.js Devtools,它提供了一些实用的功能,例如调试工具、性能分析、检查组件等。除此之外,还有 Vu…

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