好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java 替换docx文件中的字符串方法实现

替换docx文件里面的 ${} 字符串

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

public class Main {

   public static void main(String[] args) throws Exception {

     String template = "C:\\Users\\lzh\\Desktop\\模板.docx" ;

     String outSrc = "C:\\Users\\lzh\\Desktop\\简历.docx" ;

 

     var is = new FileInputStream(template);

     var os = new FileOutputStream(outSrc);

 

     editDocx(os, is, xml -> {

       Map<String,String> map = new HashMap<>();

       map.put( "${name}" , "李**" );

       map.put( "${sex}" , "男" );

       map.put( "${age}" , "21" );

 

       Pattern p = Pattern测试数据pile( "(\\$\\{)([\\w]+)(\\})" );

       Matcher m = p.matcher(xml);

       StringBuffer sb = new StringBuffer();

       while (m.find()) {

         String group = m.group();

         m.appendReplacement(sb, map.get(group));

       }

       m.appendTail(sb);

       xml = sb.toString();

 

       return xml;

     });

   }

 

   public static void editDocx(OutputStream bos,InputStream is, Process process){

     ZipInputStream zin = new ZipInputStream(is);

     ZipOutputStream zos = new ZipOutputStream(bos);

     try {

       ZipEntry entry;

       while ((entry = zin.getNextEntry()) != null ) {

         //把输入流的文件传到输出流中 如果是word/document.xml由我们输入

         zos.putNextEntry( new ZipEntry(entry.getName()));

         if ( "word/document.xml" .equals(entry.getName())){

           String xml = new BufferedReader( new InputStreamReader(zin)).lines().collect(Collectors.joining(System.lineSeparator()));

           xml = process.process(xml);

 

           ByteArrayInputStream byteIn = new ByteArrayInputStream(xml.getBytes());

           int c;

           while ((c = byteIn.read()) != - 1 ) {

             zos.write(c);

           }

           byteIn.close();

         } else {

           int c;

           while ((c = zin.read()) != - 1 ) {

             zos.write(c);

           }

         }

       }

     } catch (IOException e) {

       e.printStackTrace();

     } finally {

       try {

         zos.close();

         zin.closeEntry();

         zin.close();

       } catch (IOException e) {

         e.printStackTrace();

       }

     }

   }

}

 

interface Process {

   String process(String xml);

}

到此这篇关于java 替换docx文件中的字符串方法实现的文章就介绍到这了,更多相关java 替换docx字符串内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://segmentfault测试数据/a/1190000039182265

查看更多关于java 替换docx文件中的字符串方法实现的详细内容...

  阅读:23次