精华内容
下载资源
问答
  • java poi操作word转pdf

    千次阅读 2020-03-17 16:45:41
    替换word文档内容 package com.docx.test; import org.apache.poi.xwpf.usermodel.*; import org.junit.Test; import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.List;...

    替换word文档内容


    package com.docx.test;

    import org.apache.poi.xwpf.usermodel.*;
    import org.junit.Test;

    import java.io.*;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class DocxUnitl {

        /**
         * 用一个docx文档作为模板,然后替换其中的内容,再写入目标文档中。
         * @throws Exception
         */
        @Test
        public void testTemplateWrite() throws Exception {

            String pdfPath = "D:\\HHKJ\\project\\test\\lgwdha.pdf";
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("county", "桂林");
            params.put("time", "2019年1月15日");
            params.put("time2", "2019年1月16日");
            params.put("str", "具体整改要求,不管多少个字");
            params.put("time3", "2019年1月15日");

            String filePath = "D:\\HHKJ\\project\\test\\lgwdh.docx";
            InputStream is = new FileInputStream(filePath);
            XWPFDocument doc = new XWPFDocument(is);
            //替换段落里面的变量
            this.replaceInPara(doc, params);
            //替换表格里面的变量
    //        this.replaceInTable(doc, params);
            OutputStream os = new FileOutputStream("D:\\HHKJ\\project\\test\\lgwdha.docx");
            doc.write(os);

            this.close(os);
            this.close(is);
        }


        /**
         * 替换段落里面的变量
         * @param doc 要替换的文档
         * @param params 参数
         */
        private void replaceInPara(XWPFDocument doc, Map<String, Object> params) {
            Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();
            XWPFParagraph para;

            while (iterator.hasNext()) {
                para = iterator.next();
    //            CTPPr pr = para.getCTP().getPPr();
                this.replaceInPara(para, params);
            }
        }

        /**
         * 替换段落里面的变量
         * @param para 要替换的段落
         * @param params 参数
         */
        private void replaceInPara(XWPFParagraph para, Map<String, Object> params) {
            List<XWPFRun> runs;
            Matcher matcher;
            if (this.matcher(para.getParagraphText()).find()) {
                runs = para.getRuns();
                System.out.println("2:"+runs);
                for (int i=0; i<runs.size(); i++) {
                    XWPFRun run = runs.get(i);
                    String runText = run.toString();
                    matcher = this.matcher(runText);
                    if (matcher.find()) {
                        while ((matcher = this.matcher(runText)).find()) {
                            runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));
                        }
                        //直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,
                        //所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。

                        run.setText(runText,0);
    //                    int fontSize = run.getFontSize();
    //                    String fontFamily = run.getFontFamily();
    //                    para.removeRun(i);
    //                    para.insertNewRun(i).setText(runText);
    //                    para.insertNewRun(i).setFontSize(fontSize);
    //                    para.insertNewRun(i).setFontFamily(fontFamily);
                    }
                }
            }
        }

        /**
         * 替换表格里面的变量
         * @param doc 要替换的文档
         * @param params 参数
         */
        private void replaceInTable(XWPFDocument doc, Map<String, Object> params) {
            Iterator<XWPFTable> iterator = doc.getTablesIterator();
            XWPFTable table;
            List<XWPFTableRow> rows;
            List<XWPFTableCell> cells;
            List<XWPFParagraph> paras;
            while (iterator.hasNext()) {
                table = iterator.next();
                rows = table.getRows();
                for (XWPFTableRow row : rows) {
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        paras = cell.getParagraphs();
                        for (XWPFParagraph para : paras) {
                            this.replaceInPara(para, params);
                        }
                    }
                }
            }
        }

        /**
         * 正则匹配字符串
         * @param str
         * @return
         */
        private Matcher matcher(String str) {
            Pattern pattern = Pattern.compile("\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(str);
            return matcher;
        }

        /**
         * 关闭输入流
         * @param is
         */
        private void close(InputStream is) {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        /**
         * 关闭输出流
         * @param os
         */
        private void close(OutputStream os) {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    word转pdf


    package com.docx.test;

    import java.io.*;
    import org.apache.poi.xwpf.converter.pdf.PdfConverter;
    import org.apache.poi.xwpf.converter.pdf.PdfOptions;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;

    public class word2pdf {

        /**
         * @param args the command line arguments
         * @throws java.io.IOException
         */
        public static void main(String[] args) throws IOException {
            String docPath = "D:\\HHKJ\\project\\test\\lgwdha.docx";
            String pdfPath = "D:\\HHKJ\\project\\test\\lgwdha.pdf";

            XWPFDocument document;
            InputStream doc = new FileInputStream(docPath);
            document = new XWPFDocument(doc);
            PdfOptions options = PdfOptions.create();
            OutputStream out = new FileOutputStream(pdfPath);
            PdfConverter.getInstance().convert(document, out, options);

            doc.close();
            out.close();
        }

    }

    所需jar包
    dom4j-1.6.1-hudson-1.jar
    itext-4.2.0.jar
    itext-asian-5.2.0.jar
    itext-asiancmaps-5.1.1.jar
    itextpdf-5.4.0.jar
    jsoup-1.11.3.jar
    ooxml-schemas-1.1.jar
    org.apache.poi.xwpf.converter.core-1.0.4.jar
    org.apache.poi.xwpf.converter.pdf-1.0.4.jar
    xdocreport-2.0.1.jar
    xmlbeans-5.3.0-rc1.jar
    xmlgraphics-commons-2.2.jar

    poi-3.9-20121203.jar
    poi-examples-3.9-20121203.jar
    poi-excelant-3.9-20121203.jar
    poi-ooxml-3.9-20121203.jar
    poi-scratchpad-3.9-20121203.jar

    所遇问题
    1.java.lang.ClassNotFoundException: org/openxmlformats/schemas/wordprocessingml/x2006/main/FontsDocument$Factory
    原博地址:https://blog.csdn.net/lex1993/article/details/47062141
    解决办法:导入ooxml-schemas-1.1.jar这个包,去掉poi-ooxml-3.9-20121203.jar
    2.jar包版本问题
    解决办法:因为项目环境需要用jdk1.6,按照上述所示版本下载即可

    展开全文
  • POI word Pdf

    万次阅读 2018-11-12 19:55:26
    1.代码比较简单,本人踩的坑是 在转换的时候 报空指针 :先写错误:Numbering ,在写代码 org.apache.poi.xwpf.converter.core.... at org.apache.poi.xwpf.converter.pdf.PdfConverter.doCon...

    1.代码比较简单,本人踩的坑是 在转换的时候 报空指针 :先写错误:Numbering ,在写代码

    org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException
        at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:59)
        at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:37)
        at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45)
        at com.ys.test.WordToPdf.wordConverterToPdf(WordToPdf.java:85)
        at com.ys.test.WordToPdf.main(WordToPdf.java:116)
    Caused by: java.lang.NullPointerException
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.getXWPFNum(XWPFDocumentVisitor.java:468)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.getNumPr(XWPFDocumentVisitor.java:335)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitParagraph(XWPFDocumentVisitor.java:280)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:242)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.start(XWPFDocumentVisitor.java:194)
        at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:55)
        ... 4 more

    问题产生的原因:word 有问题(我用的是自己用poi合成的word,后面解决了:链接

     

    2.代码功能:word转pdf,转换同时可以替换word中的文本(参考链接:没找到了,嘿嘿嘿~~~·)

     /**
         * 将word文档, 转换成pdf, 中间替换掉变量
         * 
         * @param source
         *            源为word文档, 必须为docx文档
         * @param target
         *            目标输出
         * @param params
         *            需要替换的变量
         * @throws Exception
         */
        public static void wordConverterToPdf(InputStream source, OutputStream target, Map<String, String> params)
                throws Exception {
            wordConverterToPdf(source, target, null, params);
        }

        /**
         * 将word文档, 转换成pdf, 中间替换掉变量
         * 
         * @param source
         *            源为word文档, 必须为docx文档
         * @param target
         *            目标输出
         * @param params
         *            需要替换的变量
         * @param options
         *            PdfOptions.create().fontEncoding( "windows-1250" ) 或者其他
         * @throws Exception
         */
        public static void wordConverterToPdf(InputStream source, OutputStream target, PdfOptions options,
                Map<String, String> params) throws Exception {
            XWPFDocument doc = new XWPFDocument(source);
            paragraphReplace(doc.getParagraphs(), params);
            for (XWPFTable table : doc.getTables()) {
                for (XWPFTableRow row : table.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        paragraphReplace(cell.getParagraphs(), params);
                    }
                }
            }
            // 中文字体处理
            options.fontProvider(new IFontProvider() {
                public Font getFont(String familyName, String encoding, float size, int style, Color color) {
                    try {
                        BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                        Font fontChinese = new Font(bfChinese, size, style, color);
                        if (familyName != null)
                            fontChinese.setFamily(familyName);
                        return fontChinese;
                    } catch (Exception e) {
                        e.printStackTrace();
                        return null;
                    }
                }

            });
            PdfConverter.getInstance().convert(doc, target, options);
        }

        /** 替换段落中内容 */
        private static void paragraphReplace(List<XWPFParagraph> paragraphs, Map<String, String> params) {
            if (params != null && !params.isEmpty()) {
                for (XWPFParagraph p : paragraphs) {
                    for (XWPFRun r : p.getRuns()) {
                        String content = r.getText(r.getTextPosition());
                        if (StringUtils.isNotEmpty(content) && params.containsKey(content)) {

                            r.setText(content.replace("keyword", params.get(content)), 0);
                        }
                    }
                }
            }
        }

    展开全文
  • JAVA利用poi完成word转pdf,内容包括两个现成工具类和使用到的所有jar包,易用简单,word转pdf在实际项目中有很多使用,工具类中已经包括了字节流,以及变参的替换
  • java 利用利用poi+itextpdf进行word转pdf,里面有源码和依赖还有效果图,无需安装插件,感觉是一种比较好的方法
  • java实现在线预览--poi实现word、excel、ppthtml

    万次阅读 多人点赞 2019-07-31 18:39:43
    java实现在线预览- -之poi实现word、excel、ppthtml

    java实现在线预览

    - -之poi实现word、excel、ppt转html

    ###简介
    java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,例如永中office、office web 365(http://www.officeweb365.com/)他们都有云在线预览服务,就是要钱0.0
    如果想要免费的,可以用openoffice,还需要借助其他的工具(例如swfTools、FlexPaper等)才行,可参考这篇文章http://blog.csdn.net/z69183787/article/details/17468039,写的挺细的,实现原理就是:
    1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件;
    2.通过swfTools将pdf文件转换成swf格式的文件;
    3.通过FlexPaper文档组件在页面上进行展示。
    当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页面就可以直接打开预览,这样就不需要步骤2、3了,前提就是客户装了Adobe Reader XI这个pdf阅读器。
    我这里介绍通过poi实现word、excel、ppt转html,这样就可以放在页面上了。

    ###word转html

    package wordToHtml;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.List;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import org.apache.commons.io.FileUtils;
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.converter.PicturesManager;
    import org.apache.poi.hwpf.converter.WordToHtmlConverter;
    import org.apache.poi.hwpf.usermodel.Picture;
    import org.apache.poi.hwpf.usermodel.PictureType;
    import org.w3c.dom.Document;
    public class PoiWordToHtml {
     public static void main(String[] args) throws Throwable {
      final String path = "D:\\poi-test\\wordToHtml\\";
      final String file = "人员选择系分.doc";
      InputStream input = new FileInputStream(path + file);
      HWPFDocument wordDocument = new HWPFDocument(input);
      WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
        DocumentBuilderFactory.newInstance().newDocumentBuilder()
          .newDocument());
      wordToHtmlConverter.setPicturesManager(new PicturesManager() {
       public String savePicture(byte[] content, PictureType pictureType,
         String suggestedName, float widthInches, float heightInches) {
        return suggestedName;
       }
      });
      wordToHtmlConverter.processDocument(wordDocument);
      List pics = wordDocument.getPicturesTable().getAllPictures();
      if (pics != null) {
       for (int i = 0; i < pics.size(); i++) {
        Picture pic = (Picture) pics.get(i);
        try {
         pic.writeImageContent(new FileOutputStream(path
           + pic.suggestFullFileName()));
        } catch (FileNotFoundException e) {
         e.printStackTrace();
        }
       }
      }
      Document htmlDocument = wordToHtmlConverter.getDocument();
      ByteArrayOutputStream outStream = new ByteArrayOutputStream();
      DOMSource domSource = new DOMSource(htmlDocument);
      StreamResult streamResult = new StreamResult(outStream);
      TransformerFactory tf = TransformerFactory.newInstance();
      Transformer serializer = tf.newTransformer();
      serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
      serializer.setOutputProperty(OutputKeys.INDENT, "yes");
      serializer.setOutputProperty(OutputKeys.METHOD, "html");
      serializer.transform(domSource, streamResult);
      outStream.close();
      String content = new String(outStream.toByteArray());
      FileUtils.writeStringToFile(new File(path, "人员选择系分.html"), content, "utf-8");
     }
    }
    

    ###excel转html

    package excelToHtml;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.poi.hssf.converter.ExcelToHtmlConverter;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hwpf.converter.PicturesManager;
    import org.apache.poi.hwpf.converter.WordToHtmlConverter;
    import org.apache.poi.hwpf.usermodel.Picture;
    import org.apache.poi.hwpf.usermodel.PictureType;
    import org.w3c.dom.Document;
    
    
    public class PoiExcelToHtml {
    	final static String path = "D:\\poi-test\\excelToHtml\\";
    	 final static String file = "exportExcel.xls";
     public static void main(String args[]) throws Exception {
    	 
    	 InputStream input=new FileInputStream(path+file);
    	 HSSFWorkbook excelBook=new HSSFWorkbook(input);
    	 ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter (DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() );
    	 excelToHtmlConverter.processWorkbook(excelBook);
    	 List pics = excelBook.getAllPictures();
         if (pics != null) {
             for (int i = 0; i < pics.size(); i++) {
                 Picture pic = (Picture) pics.get (i);
                 try {
                     pic.writeImageContent (new FileOutputStream (path + pic.suggestFullFileName() ) );
                 } catch (FileNotFoundException e) {
                     e.printStackTrace();
                 }
             }
         }
         Document htmlDocument =excelToHtmlConverter.getDocument();
         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
         DOMSource domSource = new DOMSource (htmlDocument);
         StreamResult streamResult = new StreamResult (outStream);
         TransformerFactory tf = TransformerFactory.newInstance();
         Transformer serializer = tf.newTransformer();
         serializer.setOutputProperty (OutputKeys.ENCODING, "utf-8");
         serializer.setOutputProperty (OutputKeys.INDENT, "yes");
         serializer.setOutputProperty (OutputKeys.METHOD, "html");
         serializer.transform (domSource, streamResult);
         outStream.close();
    
         String content = new String (outStream.toByteArray() );
    
         FileUtils.writeStringToFile(new File (path, "exportExcel.html"), content, "utf-8");
     }
    }
    

    ###ppt转html
    其实只是ppt转图片,有了图片后放到页面上去,点击下一页就一张张显示就可以了。这里只介绍ppt转图片的过程。

    package pptToImg;
    
    import java.awt.Dimension;   
    import java.io.File;   
    import java.io.FileInputStream;   
    import java.io.FileNotFoundException;   
    import java.io.FileOutputStream;   
    import java.io.IOException;   
      
    import java.awt.Color;   
    import java.awt.Dimension;   
    import java.awt.Graphics2D;   
    import java.awt.geom.Rectangle2D;   
    import java.awt.image.BufferedImage;   
      
    import org.apache.poi.hslf.model.TextRun;   
    import org.apache.poi.hslf.record.Slide;   
    import org.apache.poi.hslf.usermodel.RichTextRun;   
    import org.apache.poi.hslf.usermodel.SlideShow;   
      
    public class PPTtoImage {   
        public static void main(String[] args) {   
            // 读入PPT文件   
            File file = new File("D:/poi-test/pptToImg/test.ppt");   
            doPPTtoImage(file);   
        }   
      
        public static boolean doPPTtoImage(File file) {   
            boolean isppt = checkFile(file);   
            if (!isppt) {   
                System.out.println("The image you specify don't exit!");   
                return false;   
            }   
            try {   
      
                FileInputStream is = new FileInputStream(file);   
                SlideShow ppt = new SlideShow(is);   
                is.close();   
                Dimension pgsize = ppt.getPageSize();   
                org.apache.poi.hslf.model.Slide[] slide = ppt.getSlides();   
                for (int i = 0; i < slide.length; i++) {   
                    System.out.print("第" + i + "页。");   
                       
                    TextRun[] truns = slide[i].getTextRuns();      
                    for ( int k=0;k<truns.length;k++){      
                       RichTextRun[] rtruns = truns[k].getRichTextRuns();      
                      for(int l=0;l<rtruns.length;l++){      
                           int index = rtruns[l].getFontIndex();      
                            String name = rtruns[l].getFontName();                
                            rtruns[l].setFontIndex(1);      
                            rtruns[l].setFontName("宋体");  
    //                        System.out.println(rtruns[l].getText());
                       }      
                    }      
                    BufferedImage img = new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB);   
      
                    Graphics2D graphics = img.createGraphics();   
                    graphics.setPaint(Color.BLUE);   
                    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));   
                    slide[i].draw(graphics);   
      
                    // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径   
                    FileOutputStream out = new FileOutputStream("D:/poi-test/pptToImg/pict_"+ (i + 1) + ".jpeg");   
                    javax.imageio.ImageIO.write(img, "jpeg", out);   
                    out.close();   
      
                }   
                System.out.println("success!!");   
                return true;   
            } catch (FileNotFoundException e) {   
                System.out.println(e);   
                // System.out.println("Can't find the image!");   
            } catch (IOException e) {   
            }   
            return false;   
        }   
      
        // function 检查文件是否为PPT   
        public static boolean checkFile(File file) {   
      
            boolean isppt = false;   
            String filename = file.getName();   
            String suffixname = null;   
            if (filename != null && filename.indexOf(".") != -1) {   
                suffixname = filename.substring(filename.indexOf("."));   
                if (suffixname.equals(".ppt")) {   
                    isppt = true;   
                }   
                return isppt;   
            } else {   
                return isppt;   
            }   
        }   
      
    }  
    

    ppt转图片有个缺陷,就是ppt里不是宋体的字有些可能会变成框框。
    以上都需要引入poi的jar包。
    要实现在线预览,只需把转换得到的html在新标签页打开或者镶嵌到某块区域就可以展现了。

    展开全文
  • java 实现word 转PDF (采用第三方技术 IText、Poi、Jsoup)iText-2.0.8.jar core-renderer.jar iTextAsian.jar iTextAsianCmaps.jar jsoup-1.8.1.jar
  • word转换成pdf确实有很多种方案!最近正好需要做一个这样的功能,需求是将word模板进行签名后转换为pdf。...这里记录一下最终的方案:利用poi+itextpdf进行word转pdf。此资源按包含源码和maven依赖。
  • java poi替换word内容生成pdf文件

    万次阅读 热门讨论 2019-01-15 14:15:17
    替换word文档内容 package com.docx.test; import org.apache.poi.xwpf.usermodel.*; import org.junit.Test; import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.List; ...

    替换word文档内容

    package com.docx.test;
    
    import org.apache.poi.xwpf.usermodel.*;
    import org.junit.Test;
    
    import java.io.*;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class DocxUnitl {
    
        /**
         * 用一个docx文档作为模板,然后替换其中的内容,再写入目标文档中。
         * @throws Exception
         */
        @Test
        public void testTemplateWrite() throws Exception {
    
            String pdfPath = "D:\\HHKJ\\project\\test\\lgwdha.pdf";
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("county", "桂林");
            params.put("time", "2019年1月15日");
            params.put("time2", "2019年1月16日");
            params.put("str", "具体整改要求,不管多少个字");
            params.put("time3", "2019年1月15日");
    
            String filePath = "D:\\HHKJ\\project\\test\\lgwdh.docx";
            InputStream is = new FileInputStream(filePath);
            XWPFDocument doc = new XWPFDocument(is);
            //替换段落里面的变量
            this.replaceInPara(doc, params);
            //替换表格里面的变量
    //        this.replaceInTable(doc, params);
            OutputStream os = new FileOutputStream("D:\\HHKJ\\project\\test\\lgwdha.docx");
            doc.write(os);
    
            this.close(os);
            this.close(is);
        }
    
    
    
    
        /**
         * 替换段落里面的变量
         * @param doc 要替换的文档
         * @param params 参数
         */
        private void replaceInPara(XWPFDocument doc, Map<String, Object> params) {
            Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();
            XWPFParagraph para;
    
            while (iterator.hasNext()) {
                para = iterator.next();
    //            CTPPr pr = para.getCTP().getPPr();
                this.replaceInPara(para, params);
            }
        }
    
        /**
         * 替换段落里面的变量
         * @param para 要替换的段落
         * @param params 参数
         */
        private void replaceInPara(XWPFParagraph para, Map<String, Object> params) {
            List<XWPFRun> runs;
            Matcher matcher;
            if (this.matcher(para.getParagraphText()).find()) {
                runs = para.getRuns();
                System.out.println("2:"+runs);
                for (int i=0; i<runs.size(); i++) {
                    XWPFRun run = runs.get(i);
                    String runText = run.toString();
                    matcher = this.matcher(runText);
                    if (matcher.find()) {
                        while ((matcher = this.matcher(runText)).find()) {
                            runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));
                        }
                        //直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,
                        //所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。
    
                        run.setText(runText,0);
    //                    int fontSize = run.getFontSize();
    //                    String fontFamily = run.getFontFamily();
    //                    para.removeRun(i);
    //                    para.insertNewRun(i).setText(runText);
    //                    para.insertNewRun(i).setFontSize(fontSize);
    //                    para.insertNewRun(i).setFontFamily(fontFamily);
                    }
                }
            }
        }
    
        /**
         * 替换表格里面的变量
         * @param doc 要替换的文档
         * @param params 参数
         */
        private void replaceInTable(XWPFDocument doc, Map<String, Object> params) {
            Iterator<XWPFTable> iterator = doc.getTablesIterator();
            XWPFTable table;
            List<XWPFTableRow> rows;
            List<XWPFTableCell> cells;
            List<XWPFParagraph> paras;
            while (iterator.hasNext()) {
                table = iterator.next();
                rows = table.getRows();
                for (XWPFTableRow row : rows) {
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        paras = cell.getParagraphs();
                        for (XWPFParagraph para : paras) {
                            this.replaceInPara(para, params);
                        }
                    }
                }
            }
        }
    
        /**
         * 正则匹配字符串
         * @param str
         * @return
         */
        private Matcher matcher(String str) {
            Pattern pattern = Pattern.compile("\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(str);
            return matcher;
        }
    
        /**
         * 关闭输入流
         * @param is
         */
        private void close(InputStream is) {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭输出流
         * @param os
         */
        private void close(OutputStream os) {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    

    word转pdf

    package com.docx.test;
    
    import java.io.*;
    import org.apache.poi.xwpf.converter.pdf.PdfConverter;
    import org.apache.poi.xwpf.converter.pdf.PdfOptions;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    public class word2pdf {
    
        /**
         * @param args the command line arguments
         * @throws java.io.IOException
         */
        public static void main(String[] args) throws IOException {
            String docPath = "D:\\HHKJ\\project\\test\\lgwdha.docx";
            String pdfPath = "D:\\HHKJ\\project\\test\\lgwdha.pdf";
    
            XWPFDocument document;
            InputStream doc = new FileInputStream(docPath);
            document = new XWPFDocument(doc);
            PdfOptions options = PdfOptions.create();
            OutputStream out = new FileOutputStream(pdfPath);
            PdfConverter.getInstance().convert(document, out, options);
    
            doc.close();
            out.close();
        }
    
    }
    

    所需jar包

    dom4j-1.6.1-hudson-1.jar
    itext-4.2.0.jar
    itext-asian-5.2.0.jar
    itext-asiancmaps-5.1.1.jar
    itextpdf-5.4.0.jar
    jsoup-1.11.3.jar
    ooxml-schemas-1.1.jar
    org.apache.poi.xwpf.converter.core-1.0.4.jar
    org.apache.poi.xwpf.converter.pdf-1.0.4.jar
    xdocreport-2.0.1.jar
    xmlbeans-5.3.0-rc1.jar
    xmlgraphics-commons-2.2.jar

    poi-3.9-20121203.jar
    poi-examples-3.9-20121203.jar
    poi-excelant-3.9-20121203.jar
    poi-ooxml-3.9-20121203.jar
    poi-scratchpad-3.9-20121203.jar

    所遇问题

    1.java.lang.ClassNotFoundException: org/openxmlformats/schemas/wordprocessingml/x2006/main/FontsDocument$Factory
    原博地址:https://blog.csdn.net/lex1993/article/details/47062141
    解决办法:导入ooxml-schemas-1.1.jar这个包,去掉poi-ooxml-3.9-20121203.jar
    2.jar包版本问题
    解决办法:因为项目环境需要用jdk1.6,按照上述所示版本下载即可

    附jar包下载地址

    https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas/1.1

    展开全文
  • java word转pdf,的源代码;包含 jacob.jar、aspectjweaver.jar、poi、dom4j相关包
  • javaweb 在线预览word如何实现幸运,我开发过又看到这个题。开始我用的是openoffice,需要安装这个软件,再用java调用这样。后面忘记出现了什么问题。...Java程序把Word文档直接换成Html文件方法...
  • java 实现word转pdf

    万次阅读 热门讨论 2017-07-11 17:17:17
    一类是利用各种Office应用进行转换,譬如Microsoft Office、WPS以及LiberOffice,另一种是利用各种语言提供的对于Office文档读取的接口(譬如Apache POI)然后使用专门的PDFGenerator库,譬如IText进行PDF构建。...
  • Java实现Word转PDF方案选择

    千次阅读 2018-12-27 18:10:13
    Java实现Word转PDF方案选择 很多应用场景中都会涉及到Word转PDF,但Word转PDF的方案在网上一搜一大把,让人眼花缭乱,笔者踩过无数的坑后,最终总结出以下三种方案 OpenOffice实现Word转ODF docx2pdf实现Word转ODF ...
  • java word转html poi[2021-01-29 15:50:39]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。...
  • JavaWord转PDF解决方案

    千次阅读 2020-03-18 11:24:20
    2、word含有中文的转换为PDF后可显示 二、转换步骤 word —> html —> pdf 三、使用工具(Jar包) 1、poi、itext(如下maven配置) 作用:poi:用于将word转换为html;itext:将html转换为pdf poi...
  • 最近公司的需求:替换docx文档中的指定文字(文章主题,时间等),生成新的docx文档,再把文档转换成pdf。目的是在pdf中签名使用
  • java poi- 实现 word Excel pdf ppt HTML

    千次阅读 2017-11-13 15:03:16
    poi jar 实现word Excel pdf ppt 转换 HTML 相对来说比较实用。
  • java实现word转pdf在线预览格式 前段时间的项目里涉及了此功能,调研过一些方案,踩过一些坑,一一总结在此。 java转pdf的方案很多,但是很多都要收费,转pdf也有一些格式方面的问题。 方案对比: poi格式错乱 ...
  • javaword关键字替换,可替换word表格中的关键字,word转PDF
  • java实现word转pdf

    万次阅读 热门讨论 2017-04-01 14:09:17
    网上有很多word转pdf的工具和代码,比如:poi, itext, jacob, openoffice, xdocreport等等 我记得还有日本一个开源工具word转pdf。 今天说说我自己项目中使用的是xdocreport真正的核心代码比较简单。先上核心...
  • 0、前言 引文(链接在文末)的代码只能图片和英文字体,对于中文和其它语言...然后在build.gradle中导入依赖,如果poi的包无法使用可以尝试把poi-ooxml改为poi试试 dependencies { //testCompile group: 'jun...
  • JAVA-Word转PDF各种版本实现方式

    万次阅读 热门讨论 2018-08-10 14:58:11
    当下做一个项目,就是...整了一大堆word转PDF的方法。但是客户要求有水印,又不想花钱。硬着头皮试了一堆。虽说暂时还都没采用,但是收获也是有的。  以下都是亲测可用的(很多都是借鉴了前辈的博文)一来给自己...
  • java代码word转pdf

    2019-01-02 15:56:14
    import org.apache.poi.xwpf.converter.pdf.PdfConverter; import org.apache.poi.xwpf.converter.pdf.PdfOptions; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel....
  • 1,引入maven依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> ...
  • Java Word Pdf

    千次阅读 2017-04-19 17:20:14
    Java Word Pdf 前言:  平常项目中遇到需要将word转换为pdf,我们一般利用的是jacob.jar组件,这个组件利用的是微软office组件,但有时项目需要部署到liunx下,liunx中没有office,我们可以利用apache ...
  • 下面这个是poiword转pdf: ![图片说明](https://img-ask.csdn.net/upload/201904/23/1556012955_59257.png) 代码如下: ``` Document doc = new Document(new FileInputStream(file)); File pdfFile = ...
  • Java Poi word 插入图片并添加边框 //得到Picture的Base64编码 Base64Picture p1; //打开Word文件 Resource resource = new ClassPathResource("doc/ProvinceCollectionReport.docx"); XWPFDocument document = new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,306
精华内容 1,322
关键字:

javapoiword转pdf

java 订阅