只能针对docx格式!!
针对这种word模板文档,可以在文档中挖空,使用{{}}占位,空中填入bean中对应的字段,就可以导出对应内容
word模板:
bean中字段名称一一对应:
代码:
pom:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<!-- word模板动态生成word poi-tl -->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.8.2</version>
</dependency>
代码:
import com.agile.smartwork.entity.smart.LeaveApplicationForm;
import com.deepoove.poi.XWPFTemplate;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.net.URLEncoder;
/**
* @author wzh
* @date 2024/1/26
* @apiNote
*/
@Api(tags = "test")
@Slf4j
@RestController
@RequestMapping(value = "/test")
public class TestController {
@SneakyThrows
@PostMapping("/test")
@ApiOperation(value = "获取申请书", notes = "获取离职申请书")
public void getLeaveApplication(HttpServletResponse response,
@RequestBody @Valid LeaveApplicationForm form) {
XWPFTemplate template = XWPFTemplate.compile(new File("E:\\申请书模板.docx"))
.render(form);
String fileName = "申请书.docx";
setFileName(response, fileName);
response.setContentType("application/octet-stream");
template.write(response.getOutputStream());
}
@SneakyThrows
private void setFileName(HttpServletResponse response, String fileName) {
StringBuilder contentDispositionValue = new StringBuilder();
contentDispositionValue.append("attachment; filename=").append(fileName).append(";").append("filename*=").append("utf-8''").append(fileName);
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
response.setHeader("Content-disposition", contentDispositionValue.toString());
response.setHeader("download-filename", URLEncoder.encode(fileName, "UTF-8"));
}
}