当前位置:实例文章 » HTML/CSS实例» [文章]Springboot + Vue 下载Word、PDF文档并保留内部格式

Springboot + Vue 下载Word、PDF文档并保留内部格式

发布人:shili8 发布时间:2025-01-16 19:29 阅读次数:0

**SpringBoot + Vue下载Word、PDF文档并保留内部格式**

在现代Web应用中,下载文件是非常常见的需求。特别是在企业级应用中,用户可能需要下载各种类型的文件,如Word文档、PDF文档等。在这些文件中,内部格式通常很重要,因为它们包含了大量的结构化信息。

在本篇文章中,我们将使用SpringBoot和Vue来实现一个下载Word、PDF文档并保留内部格式的功能。我们将一步步地讲解如何实现这个功能,并提供相关代码示例和注释。

**前言**

在开始之前,我们需要了解一下Word和PDF文件的基本结构:

* Word文件:使用Office Open XML(OOXML)格式,包含了大量的XML元素和属性。
* PDF文件:使用Adobe Acrobat的PDF格式,包含了文本、图像、表格等多种类型的内容。

由于这些文件的内部结构非常复杂,我们需要使用合适的库来处理它们。我们将使用Apache POI(Word)和iText(PDF)两个库来实现下载功能。

**SpringBoot服务端**

首先,我们需要在SpringBoot服务端创建一个接口来提供下载功能:

java// DownloadController.java@RestController@RequestMapping("/download")
public class DownloadController {

 @GetMapping("/word/{fileName}")
 public ResponseEntity downloadWord(@PathVariable String fileName) {
 // 使用Apache POI生成Word文件 WordDocument wordDoc = new WordDocument();
 // ...
 byte[] bytes = wordDoc.getByteArray();

 HttpHeaders headers = new HttpHeaders();
 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
 headers.setContentDispositionFormData("attachment", fileName);

 return ResponseEntity.ok().headers(headers).body(bytes);
 }

 @GetMapping("/pdf/{fileName}")
 public ResponseEntity downloadPdf(@PathVariable String fileName) {
 // 使用iText生成PDF文件 PdfDocument pdfDoc = new PdfDocument();
 // ...
 byte[] bytes = pdfDoc.getByteArray();

 HttpHeaders headers = new HttpHeaders();
 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
 headers.setContentDispositionFormData("attachment", fileName);

 return ResponseEntity.ok().headers(headers).body(bytes);
 }
}


在上面的代码中,我们使用了SpringBoot的`@RestController`注解来创建一个RESTful服务端。我们定义了两个接口:`downloadWord`和`downloadPdf`,分别用于下载Word和PDF文件。

**Vue前端**

在Vue前端,我们需要创建一个组件来提供下载功能:

javascript// Download.vue<template>
 <div>
 <button @click="downloadWord">下载Word</button>
 <button @click="downloadPdf">下载PDF</button>
 </div>
</template>

<script>
export default {
 methods: {
 downloadWord() {
 // 使用axios发送请求 axios.get('/download/word/example.docx')
 .then(response => {
 const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
 const url = URL.createObjectURL(blob);
 const a = document.createElement('a');
 a.href = url;
 a.download = 'example.docx';
 a.click();
 })
 .catch(error => {
 console.error(error);
 });
 },

 downloadPdf() {
 // 使用axios发送请求 axios.get('/download/pdf/example.pdf')
 .then(response => {
 const blob = new Blob([response.data], { type: 'application/pdf' });
 const url = URL.createObjectURL(blob);
 const a = document.createElement('a');
 a.href = url;
 a.download = 'example.pdf';
 a.click();
 })
 .catch(error => {
 console.error(error);
 });
 }
 }
}
</script>


在上面的代码中,我们使用了Vue的`