Docx4jHelper.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.github.jfcloud.gene.config;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.docx4j.Docx4jProperties;
  4. import org.docx4j.jaxb.BinderListenerUtils;
  5. import org.docx4j.jaxb.Context;
  6. import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
  7. import org.springframework.boot.ApplicationArguments;
  8. import org.springframework.boot.ApplicationRunner;
  9. import org.springframework.stereotype.Component;
  10. import javax.xml.bind.JAXBException;
  11. import java.io.InputStream;
  12. import java.io.OutputStream;
  13. @Slf4j
  14. @Component
  15. public class Docx4jHelper implements ApplicationRunner {
  16. private static final WordprocessingMLPackage.FilterSettings settings = new WordprocessingMLPackage.FilterSettings();
  17. @Override
  18. public void run(ApplicationArguments args) {
  19. //初始化Context和Docx4jProperties,加速文档转换
  20. log.info("初始化Docx4j:{}", Context.jcXmlPackage.toString());
  21. Docx4jProperties.getProperty("docx4j");
  22. try {
  23. //初始化binderListener
  24. BinderListenerUtils.getBinderListener();
  25. } catch (JAXBException ignore) {
  26. }
  27. //规范docx语法
  28. settings.setTidyForDocx4all(true);
  29. log.info("初始化Docx4j完成");
  30. }
  31. /**
  32. * 转换docx
  33. */
  34. public static void convert(InputStream in, OutputStream out) throws Exception {
  35. load(in).save(out);
  36. }
  37. /**
  38. * 加载docx
  39. */
  40. public static WordprocessingMLPackage load(InputStream in) throws Exception {
  41. WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);
  42. wordMLPackage.filter(settings);
  43. return wordMLPackage;
  44. }
  45. }