精华内容
下载资源
问答
  • 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 convert方法 NullPointException 如果操作过通过POI操作过Word,请保证创建run之后run的值不为null,为null将在转换时报错。 顺便吐槽一句,源码捕捉异常而不是往外抛。。。定位问题难度大大增加...

    JAVA POI Word转PDF convert方法 NullPointException

    如果操作过通过POI操作过Word,请保证创建run之后run的值不为null,为null将在转换时报错。
    顺便吐槽一句,源码捕捉异常而不是往外抛。。。定位问题难度大大增加,解决方法还是通过调调用方法调出来的。如果有好的方法定位该问题,欢迎讨论。

    展开全文
  • java 利用利用poi+itextpdf进行word转pdf,里面有源码和依赖还有效果图,无需安装插件,感觉是一种比较好的方法
  • word转换成pdf确实有很多种方案!最近正好需要做一个这样的功能,需求是将word模板进行签名后转换为pdf。...这里记录一下最终的方案:利用poi+itextpdf进行word转pdf。此资源按包含源码和maven依赖。
  • 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,按照上述所示版本下载即可

    展开全文
  • java 对word关键字替换,可替换word表格中的关键字,word转PDF
  • 下面这个是poiword转pdf: ![图片说明](https://img-ask.csdn.net/upload/201904/23/1556012955_59257.png) 代码如下: ``` Document doc = new Document(new FileInputStream(file)); File pdfFile = ...
  • poi 3.16 word转PDF poi 3.16 word转PDF(支持doc和docx) word转PDF用于在线预览 所需要的jar包 第一个 <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version...

    poi 3.16 word转PDF

    poi 3.16 word转PDF(支持doc和docx)

    word转PDF用于在线预览

    所需要的jar包

      第一个
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.16</version> 
      第二个
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.16</version> 
      第三个
      <groupId>org.Spire</groupId>
      <artifactId>Spire</artifactId>
      <version>0.0.1</version>
      <scope>system</scope>
      <systemPath>
           ${project.basedir}/src/main/resources/lib/Spire.Doc.jar
     </systemPath> 
     第三个包我下载到我本地了 可以上网搜一下 
     网址:https://repo.e-iceblue.cn/#browse/browse:maven-public:e-iceblue%2Fspire.office%2F3.4.1%2Fspire.office-3.4.1.jar 
    如果用这个jar包转 是带水印的 而且只能转3页 或者500行 超过就不显示了 这里只是用它把doc转成docx 我自己这个jar包转格式时不带水印 不知道网上下载的带不带 如果需要去水印的jar包可以加我QQ找我要:279625695
      (如果用官网上的jar包提示下载不下来 它这个需要配一下指向的私服 要不下载不下来)
    

    代码:

    package chzy.test.zipORrar;

    import com.spire.doc.Document;
    import com.spire.doc.FileFormat;
    import fr.opensagres.poi.xwpf.converter.core.utils.StringUtils;
    import org.apache.commons.collections4.MapUtils;
    import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
    import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
    import org.apache.poi.xwpf.usermodel.*;

    import java.io.*;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class WordtoPDF {

    public static void main(String[] args) {
    
        String url ="C:\\Users\\Administrator\\Desktop\\新建文件夹\\褚中义-java7年.docx";
    
        File file=new File(url);
        String filenameMax=file.getName();
        String filename=filenameMax.substring(0, filenameMax.indexOf("."));
        try {
            doc2pdf(url, "D:\\"+filename+".pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    
    }
    
    /**
     * doc转docx(用第三个jar包)
     * @param path
       * @param outPath
     * @return
     */
    public static void docTodOcx(String path,String outPath){
        Document dc = new Document();
        dc.loadFromFile(path);
        dc.saveToFile(outPath, FileFormat.Docx_2013);
        dc.close();
    } 
    /**
     * word转pdf
     * @param inPath
     * @param outPath
     * @return
     */
    public static void doc2pdf(String inPath, String outPath)throws IOException {
        // 是否需清除中间转换的docx文档
        Boolean isDelete = false;
        String fileType = inPath.substring(inPath.lastIndexOf(".")).toLowerCase();
        if ("doc".equals(fileType)){
            docTodOcx(inPath,inPath+"x");
            inPath = inPath+"x";
            isDelete = true;
        }
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream=null;
        try {
            fileInputStream = new FileInputStream(inPath);
            XWPFDocument xwpfDocument = new XWPFDocument(fileInputStream);
            PdfOptions pdfOptions = PdfOptions.create();
            fileOutputStream = new FileOutputStream(outPath);
            PdfConverter.getInstance().convert(xwpfDocument,fileOutputStream,pdfOptions);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
    
            fileInputStream.close();
            fileOutputStream.close();
            if (isDelete){
                deleteDocx(inPath);
            }
        }
    }
    
    
    
    
    /**
     * 清除临时转换的docx
     * @param path
     */
    public static void  deleteDocx(String path){
        File file = new File(path);
        file.delete();
    }
    }
    

    ##注意事项

    1.word文档内尽量使用宋体,如果不使用宋体可以会导致这样空白的情况:
    在这里插入图片描述
    2.word文档内如果包含表格 和第一点一样 宋体! 宋体! 宋体!
    3.如果项目放到linux上报错 一般都是linux未安装字体库,把windows字体库安装到linux上就行了(自行百度)

    展开全文
  • poi导出word转pdf

    2021-04-29 17:20:03
    put("content", "这里是内容,测试使用导出到Word的内容!"); } }; XWPFTemplate template = XWPFTemplate.compile(tmpFile) .render(datas1); FileOutputStream out = new FileOutputStream(expFile); template....
  • JAVA利用poi完成word转pdf,内容包括两个现成工具类和使用到的所有jar包,易用简单,word转pdf在实际项目中有很多使用,工具类中已经包括了字节流,以及变参的替换
  • 第一步:添加maven依赖 <dependencies> <dependency> ...fr.opensagres.xdocreport<...fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId> <version>2.0.1</version>.
  • 使用poi+itextpdfword转pdf

    万次阅读 热门讨论 2020-03-05 22:22:11
    word转换成pdf确实有很多种方案! 背景 最近正好需要做一个这样的功能,需求是将word模板进行签名后转换为pdf。为此,我花了一点时间去网上找方案。期间遇到了一些坑,这里记录一下。 方案选择 首先,因为代码是跑...
  • <dependency> <groupId>org.apache.poi</groupId>...fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId> <version>2.0.1</version> </dependency>
  • word转pdf字体文件

    2018-12-21 14:33:46
    Java版 poi word转pdf时,服务器上没有字体时,或访问不到字体时,可以自己在resource资源目录下添加此字体
  • java实现在线预览--poi实现word、excel、ppthtml

    万次阅读 多人点赞 2019-07-31 18:39:43
    java实现在线预览- -之poi实现word、excel、ppthtml
  • java word转pdf,的源代码;包含 jacob.jar、aspectjweaver.jar、poi、dom4j相关包
  • 1、Word转换PDF成功但是中文显示不出都是因为字体的问题 下面的方法简单粗暴,但是解决了我的问题, a、将C:\Windows\Fonts 所有字体全部压缩成zip包(allfont.zip) b、将压缩包拷贝到linux服务器上的 /usr/...
  • poi实现word文档转pdf格式

    万次阅读 热门讨论 2019-09-14 18:03:12
    maven只需要添加下面这两个依赖依赖 ...org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <depen...
  • POI操作word和PDFPOI根据模板导出word文件word转PDFPDF转图片再插入PDF中(防止PDF被修改) POI根据模板导出word文件 一、制作word模版,${xxxx}是一会要替换的内容,最下面的表格是要插入数据,根据是否以$开头来...
  • POI动态生成word和freemark各有优劣,POI兼容性差点 ,freemark模板改起来较为繁琐,但是代码简单,这里的是POI针对word2007(docx)的动态数据填充
  • 最近javaweb项目中使用到了用apache poiword转pdf的功能。 具体过程如下,首先将作为word文档(docx的格式,内容为合同、表格等)成zip格式后解压,之后将解压文件中的document.xml文件取出,转为ftl文件。...
  • 你好,在网上搜索到你的一个帖子,关于 word pdf 使用POI4.1.2时出现异常的解放方案,你的方法是重写 jar包中的 XWPFStylesDocument 类,如何重写,可以提供代码吗?
  • hober.blog.csdn.net/article/details/104685854 这个代码样式不见了,咋整哦
  • Word转PDF,PDF转图片,图片转PDF,需要安装openoffice,解决了失真的问题,暂时没有发现乱码,有问题可以邮件我51170526@163.com
  • 看有大牛提到过用转pdf的方法来获取word总页数,但是只适用于windows平台下,但我们甲方的服务器是Linux的,所以才采用了另一款转pdf的工具–Libreoffice 解决方法 1.对于有图片的word,可以先把它转换成pdf, 2....
  • Python实现word转pdf

    千次阅读 2019-11-29 18:48:48
    在做word转pdf的功能过程中找了很多java的实现(POI),对于普通的文档还是支持的还可以,但是对于文档里面涉及图片、表格、水印等就会出现很多样式上的问题,字体重复,水印丢失,表格位置错乱等。 1、poi用到的...

空空如也

空空如也

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

poiword转pdf