帮我写一个案例, 就是前端传入一些参数,后端用实体类去接收, 然后将该接收到的参数,转化成一定格式的pdf文件,并以流的形式返回给前端。
时间: 2024-03-06 12:49:30 浏览: 106
好的,这里给你提供一个简单的示例代码,可以实现前端传入参数,后端使用实体类接收参数,并将接收到的参数转化成PDF文件并返回给前端。
前端代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>参数转PDF文件</title>
</head>
<body>
<form id="myForm">
<label for="name">姓名:</label>
<input type="text" id="name" name="name"><br><br>
<label for="age">年龄:</label>
<input type="number" id="age" name="age"><br><br>
<label for="address">地址:</label>
<input type="text" id="address" name="address"><br><br>
<button type="button" onclick="submitForm()">提交</button>
</form>
<script>
function submitForm() {
// 获取表单数据
var formData = new FormData(document.getElementById("myForm"));
// 发送POST请求
var xhr = new XMLHttpRequest();
xhr.open("POST", "/convertToPDF", true);
xhr.responseType = "blob";
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 将返回的Blob对象转换成URL并下载文件
var blob = new Blob([xhr.response], {type: "application/pdf"});
var url = URL.createObjectURL(blob);
var a = document.createElement("a");
a.href = url;
a.download = "myFile.pdf";
document.body.appendChild(a);
a.click();
}
};
xhr.send(formData);
}
</script>
</body>
</html>
```
在上面的示例代码中,我们创建了一个表单,包含了姓名、年龄和地址三个参数的输入框,以及一个提交按钮。当用户点击提交按钮时,我们使用JavaScript代码获取表单数据,并将其发送到后端的`/convertToPDF`接口。
后端代码:
```java
@RestController
public class PDFController {
@PostMapping("/convertToPDF")
public ResponseEntity<byte[]> convertToPDF(MyEntity myEntity) throws Exception {
// 创建一个Document对象
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
// 创建一个ByteArrayOutputStream对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 创建一个PdfWriter对象
PdfWriter.getInstance(document, baos);
// 打开Document对象
document.open();
// 向Document对象中添加内容
document.add(new Paragraph("姓名:" + myEntity.getName()));
document.add(new Paragraph("年龄:" + myEntity.getAge()));
document.add(new Paragraph("地址:" + myEntity.getAddress()));
// 关闭Document对象
document.close();
// 将ByteArrayOutputStream对象中的数据转换成字节数组并返回
byte[] bytes = baos.toByteArray();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_PDF);
headers.setContentDisposition(ContentDisposition.builder("attachment").filename("myFile.pdf").build());
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
}
```
在上面的示例代码中,我们创建了一个`PDFController`类,并定义了一个名为`convertToPDF`的接口,用于接收前端传入的参数。在该接口中,我们使用iText库创建了一个PDF文档,并向其中添加了前端传入的参数。最后,我们将PDF文档转换成字节数组,并使用`ResponseEntity`将其以流的形式返回给前端。
需要注意的是,在后端代码中,我们使用了`@PostMapping`注解来标识该接口是一个POST请求,并且使用了`@RequestParam`注解来指定前端传入的参数名称。在该接口中,我们直接将前端传入的参数封装成一个实体类对象`MyEntity`,并将其作为参数传入方法中。
阅读全文