请问有没有写过doc多个文档合并成一个文档的,poi版本是3.16的,如何解决?

请问有没有写过doc多个文档合并成一个文档的,poi版本是3.16的



用aspose实现可以吗
http://t.csdn.cn/GPKAI

  • 看下这篇博客,也许你就懂了,链接:POI实现解析Word文档表格(通过行列定位),实现文本,图片读取(doc,docx版本)
  • 除此之外, 这篇博客: POI读取doc,docx文档内容中的 2.由于人工创建的文档各式各样,有可能doc文件另存为docx,docx另存为doc,虽然文件后缀变了,但是其原有的格式并未改变,所以需要做兼容处理。见代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • @Slf4j
    public class FileUtils {
        /**
         * 解析docx
         *
         * @param multipartFile
         * @return
         */
        public static String getDocxWord(MultipartFile multipartFile) {
            String docWord = null;
    //        POIXMLTextExtractor extractor = (POIXMLTextExtractor) ExtractorFactory.createExtractor(bis);
    //        OPCPackage aPackage = extractor.getPackage();
            try {
    //            XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(path));
                XWPFDocument read = read(multipartFile);
                if (read==null){
                    return null;
                }
                XWPFWordExtractor docx = new XWPFWordExtractor(read);
                //提取.docx正文文本
                docWord = docx.getText().trim();
                log.info("解析doc文档成功:{}", docWord);
                docx.close();
            }  catch (NullPointerException e) {
                return null;
            }catch (IOException e){
                e.printStackTrace();
            }
    
    
            return docWord;
        }
    
        /**
         * 解析doc
         *
         * @param multipartFile
         * @return
         */
        public static String getDocWord( MultipartFile multipartFile) {
            String docxWord = "";
            WordExtractor wordExtractor = null;
            InputStream is =null;
            try {
                //解析doc文件
                is = multipartFile.getInputStream();
                try {
                    wordExtractor = new WordExtractor(is);
                    docxWord = wordExtractor.getText().trim();
                    log.info("解析docx文档成功:{}", docxWord);
                } catch (IllegalArgumentException e) {
                    docxWord=getDocxWord(multipartFile);
                }finally {
                    if (wordExtractor !=null){
                        wordExtractor.close();
                    }
                   if (is!=null){
                       is.close();
                   }
    
                }
    
            } catch (IOException e) {
                log.error("解析docx文档失败", e);
            }
    
            return docxWord;
        }
    
    
        /**
         * 读取文件内容
         *
         * @param multipartFile
         * @return
         */
        public static XWPFDocument read(MultipartFile multipartFile) {
            // 判断文件是否为空
            InputStream is = null;
            if (!multipartFile.isEmpty()) {
                try {
                    is = multipartFile.getInputStream();
                    XWPFDocument document = null;
                    try {
                        document = new XWPFDocument(is);
                    } catch (NotOfficeXmlFileException e) {
                        document=null;
                    }
                    return document;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    
    
    
    
        public static void main(String[] args) throws Exception {
    
            File file = new File("C:\\Users\\dcw\\Desktop\\2.doc");
    
            MultipartFile multipartFile = fileToMultipartFile(file);
    
            System.out.println(getDocWord(multipartFile));
    
    
        }
    }
    
    
  • 以下回答由chatgpt基于相关博客总结生成:

    在Apache POI 3.16版本中,可以使用以下步骤将多个doc文档合并成为一个文档:

    1. 第一步是创建一个空的Word文档:
    XWPFDocument document = new XWPFDocument();
    
    1. 读取每一个需要合并的Word文档
    FileInputStream inputStream = new FileInputStream("document1.docx");
    XWPFDocument doc1 = new XWPFDocument(inputStream);
    inputStream.close();
    
    inputStream = new FileInputStream("document2.docx");
    XWPFDocument doc2 = new XWPFDocument(inputStream);
    inputStream.close();
    
    // 读取更多的文档
    
    1. 遍历每一个读取的文档,将其中的内容复制到空的Word文档中
    for (XWPFParagraph para : doc1.getParagraphs()) {
        XWPFParagraph newPara = document.createParagraph();
        newPara.createRun().setText(para.getText());
    }
    
    for (XWPFParagraph para : doc2.getParagraphs()) {
        XWPFParagraph newPara = document.createParagraph();
        newPara.createRun().setText(para.getText());
    }
    
    // 遍历更多的文档
    
    1. 将合并后的文档保存到文件
    FileOutputStream outputStream = new FileOutputStream("mergedDocument.docx");
    document.write(outputStream);
    outputStream.close();
    

    注意,以上代码仅是示例,需要根据实际情况进行修改。另外,如果需要添加样式等更高级的操作,可以参考Apache POI官方文档。