当前位置:   article > 正文

spring boot集成easypoi导出word换行处理_easypoi 换行

easypoi 换行

项目场景:

spring boot集成easypoi导出word

  1. <dependency>
  2. <groupId>cn.afterturn</groupId>
  3. <artifactId>easypoi-spring-boot-starter</artifactId>
  4. <version>4.4.0</version>
  5. </dependency>

问题描述

spring boot集成easypoi导出word时,内容包含换行符\n,导出word时换行符失效,会将换行符\n识别为空格。


解决方案:

第一种:生成段落的方式

示例代码:

  1. import com.xinghuo.common.base.ActionResult;
  2. import io.swagger.annotations.Api;
  3. import io.swagger.annotations.ApiOperation;
  4. import lombok.Cleanup;
  5. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  6. import org.apache.poi.xwpf.usermodel.XWPFParagraph;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import java.io.File;
  11. import java.io.FileOutputStream;
  12. @RestController
  13. @Api(tags = "测试")
  14. @RequestMapping("/test")
  15. public class TestController {
  16. @ApiOperation("导出Word")
  17. @GetMapping("/export")
  18. public ActionResult export() {
  19. exportWord();
  20. return ActionResult.success();
  21. }
  22. /**
  23. * 导出Word,支持换行
  24. */
  25. public void exportWord(){
  26. try{
  27. String content = "第一行\n第二行中文\n"+"第三行";
  28. @Cleanup XWPFDocument doc = new XWPFDocument();
  29. if(content != null && content.contains("\n")) {
  30. //设置换行
  31. String[] text = content.split("\n");
  32. for (int i = 0; i < text.length; i++) {
  33. XWPFParagraph p = doc.createParagraph();
  34. p.createRun().setText(text[i]);
  35. }
  36. }else{
  37. XWPFParagraph p = doc.createParagraph();
  38. p.createRun().setText(content);
  39. }
  40. String name = "测试换行内容.docx";
  41. String filePath = "F:"+ File.separator + name;
  42. @Cleanup FileOutputStream output = new FileOutputStream(filePath);
  43. doc.write(output);
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. }

导出的word内容

 


第二种:替换模板的情况,换行符替换成回车

示例代码:

  1. import cn.afterturn.easypoi.word.WordExportUtil;
  2. import com.xinghuo.common.base.ActionResult;
  3. import com.xinghuo.common.util.XSSEscape;
  4. import io.swagger.annotations.Api;
  5. import io.swagger.annotations.ApiOperation;
  6. import lombok.Cleanup;
  7. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  8. import org.apache.poi.xwpf.usermodel.XWPFParagraph;
  9. import org.apache.poi.xwpf.usermodel.XWPFRun;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import java.io.File;
  14. import java.io.FileOutputStream;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import java.util.Map;
  18. @RestController
  19. @Api(tags = "测试")
  20. @RequestMapping("/test")
  21. public class Test1Controller {
  22. @ApiOperation("导出Word")
  23. @GetMapping("/export")
  24. public ActionResult export() {
  25. exportWordTemplate();
  26. return ActionResult.success();
  27. }
  28. /**
  29. * 导出Word替换模板,支持换行
  30. */
  31. public void exportWordTemplate(){
  32. try{
  33. String content = "第一行\n第二行中文\n"+"第三行";
  34. Map<String, Object> map = new HashMap<>();
  35. map.put("content",content);
  36. @Cleanup XWPFDocument doc = WordExportUtil.exportWord07("F:/export_template.docx", map);
  37. //文本换行
  38. addBreakInCell(doc.getParagraphs());
  39. String name = "测试换行内容-替换模板.docx";
  40. String filePath = "F:"+ File.separator + name;
  41. @Cleanup FileOutputStream output = new FileOutputStream(XSSEscape.escapePath(filePath));
  42. doc.write(output);
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. /**
  48. * 文本换行
  49. */
  50. public static void addBreakInCell(List<XWPFParagraph> paragraphs) {
  51. for (XWPFParagraph p : paragraphs) {
  52. for (XWPFRun run : p.getRuns()) {//XWPFRun对象定义具有一组公共属性的文本区域
  53. if(run.getText(0)!= null && run.getText(0).contains("\n")) {
  54. String[] lines = run.getText(0).split("\n");
  55. if(lines.length > 0) {
  56. run.setText(lines[0], 0); // set first line into XWPFRun
  57. for(int i=1;i<lines.length;i++){
  58. // add break and insert new text
  59. run.addBreak();//中断
  60. // run.addCarriageReturn();//回车符,但是不起作用
  61. run.setText(lines[i]);
  62. }
  63. }
  64. }
  65. }
  66. }
  67. }
  68. }

 其中export_template.docx文件是word模板,内容为:

导出的内容

 


导出的本地文件截图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/813588
推荐阅读
相关标签
  

闽ICP备14008679号