- 导入依赖:
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>autopoi-web</artifactId>
<version>1.4.5</version>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
-
创建word模板,并放到项目的
resources/docx-template下:
image.png
模板内容:
image.png 在
resources所在的模块po中加入以下内容,否则会报错(org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>woff2</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
<nonFilteredFileExtension>doc</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.docx</include>
<include>**/*.xlsx</include>
<include>**/*.pptx</include>
<include>**/*.png</include>
<include>**/*.jpg</include>
<include>**/*.gif</include>
<include>**/*.pdf</include>
<include>**/*.ttf</include>
<include>**/*.woff</include>
<include>**/*.woff2</include>
<include>**/*.eot</include>
<include>**/*.svg</include>
<include>**/*.zip</include>
<include>**/*.rar</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.docx</exclude>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.pptx</exclude>
<exclude>**/*.png</exclude>
<exclude>**/*.jpg</exclude>
<exclude>**/*.gif</exclude>
<exclude>**/*.pdf</exclude>
<exclude>**/*.ttf</exclude>
<exclude>**/*.woff</exclude>
<exclude>**/*.woff2</exclude>
<exclude>**/*.eot</exclude>
<exclude>**/*.svg</exclude>
<exclude>**/*.zip</exclude>
<exclude>**/*.rar</exclude>
</excludes>
</resource>
</resources>
</build>
- 写代码:
@GetMapping(value = "/printBarCode")
public void printBarCode(@RequestParam(name = "ids") String ids, HttpServletResponse response) {
if (oConvertUtils.isEmpty(ids)) {
throw new RuntimeException("请选择要导出的数据");
}
# DataVO中的字段对应word模板中的参数
List<DataVO> voList = dataService.printBarCode(Arrays.asList(ids.split(",")));
try {
for (DataVO vo : voList) {
Object barCodeObj = createBarcode(vo.getBarCode());
vo.setBarCodeImage(barCodeObj);
}
Map<String, Object> params = new HashMap<>();
params.put("voList", voList);
InputStream inputStream = new ClassPathResource("docx-template/DataVO.docx").getInputStream();
XWPFTemplate render = XWPFTemplate.compile(inputStream).render(params);
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename=" + URLEncoder.encode("数据打印.docx", "UTF-8"));
OutputStream os = response.getOutputStream();
render.writeAndClose(os);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 生成条码图片对象
private Object createBarcode(String content) throws Exception {
int w = 400, h = 120;
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, w, h, hints);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(matrix, "PNG", baos);
return Pictures.ofBytes(baos.toByteArray()).size(w, h).create();
}

