精华内容
下载资源
问答
  • poi 生成pdf

    2018-10-11 16:42:40
    技术使用poi,实际功能为html文件转换成word, 生成pdf格式合同,html生成图片,生成html格式合同,下载解压缩即可运行
  • java poi替换word内容生成pdf文件

    万次阅读 热门讨论 2019-01-15 14:15:17
    替换word文档内容 ...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 ...

    替换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

    展开全文
  • 最近正在做导出pdf文件的功能,所以查了了一些相关资料,但是有的说的并不很准确。poi+itext,所需要的jar包有itext-2.1.7.jar,poi-3.14.jar,iTextAsian.jar:用于处理中文乱码问题,这是我所用的jar包,大家也...

    最近正在做导出pdf文件的功能,所以查了了一些相关资料,发现不是很完善,这里做一些小小的感想,欢迎各位“猿”童鞋批评指正。

    poi+itext,所需要的jar包有itext-2.1.7.jar,poi-3.14.jar,iTextAsian.jar:用于处理中文乱码问题,这是我所用的jar包,大家也可以自行配置。https://www.cnblogs.com/h--d/p/6150320.html,这个网址步骤写的挺好的,https://www.cnblogs.com/shuilangyizu/p/5760928.html 这个是画pdf比较详细

    首先设置一下字体,看看pdf里有哪些需要的字体,这里先设置一个基础的

       BaseFont bfChinese = null;
    try {
    bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    } catch (DocumentException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();

    }

    Font FontChinese = new Font(bfChinese,13,Font.NORMAL);

    Font FontChinese2 = new Font(bfChinese,13,Font.NORMAL|Font.UNDERLINE);这里设置需要的的字体类型,在初始的字体里面修改,保证一下统一以便字体结构清晰。

    // 第一步,创建document对象
    Rectangle rectPageSize = new Rectangle(PageSize.A4);//这里可以查查,有很多其他的
    //下面代码设置页面横置

    rectPageSize = rectPageSize.rotate();

    //创建document对象并指定边距

    Document document1 = new Document(rectPageSize);

    // 将Document实例和文件输出流用PdfWriter类绑定在一起,从而完成向Document写,即写入PDF文档

    PdfWriter.getInstance(document1,new FileOutputStream("src/a.pdf"));//创建到哪个路径文件中
    //打开文档
    document1.open();

    //向文档添加文字. 文档由段组成,这里只是做个别的说明

    float[] widths = {40,80,150,50,50,100,60,50,70,70};数据存的是列宽,按照配比来的,不用在乎数据大小

    PdfPTable table = new PdfPTable(widths);这个可以在页面画一个table,很方便并且比较好的方法

    table.setWidthPercentage(100);设置占比
    table.setSpacingBefore(10);设置上边距离上个Paragraph的距离

    table.setSpacingAfter(10);设置下边距离下个Paragraph的距离

    下面这个可以设置表格中同单元格存在不同的字体

    Paragraph largeText = new Paragraph();
    Chunk chunk1 = new Chunk("text0",FontChinese11);
    Chunk chunk2 = new Chunk(text1,FontChinese1);
    largeText.add(chunk1);
    largeText.add(chunk2);

    cell1.addElement(largeText);

    document1.add(list+Paragraph+table等等之类的);

    //关闭document
    document1.close();


    展开全文
  • Java POI 生成PDF文档,很给力!

    万次阅读 2014-07-17 11:52:39
    package poi.itext; import java.io.FileOutputStream; import java.io.IOException; import java.awt.Color; import com.lowagie.text.*; import com.lowagie.text.pdf.*; import com.lowagie.text.pdf.B

    package poi.itext;

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.awt.Color;

    import com.lowagie.text.*;
    import com.lowagie.text.pdf.*;
    import com.lowagie.text.pdf.BaseFont;

    /**
     * 创建Pdf文档
     * @author Administrator
     *
     */

    public class HelloPdf
    {
        public static void main(String[] args)throws Exception
        {
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

            // 第一步,创建document对象
            Rectangle rectPageSize = new Rectangle(PageSize.A4);
            
            //下面代码设置页面横置
            //rectPageSize = rectPageSize.rotate();
            
            //创建document对象并指定边距
            Document doc = new Document(rectPageSize,50,50,50,50);
            Document document = new Document();
            try
            {
                // 第二步,将Document实例和文件输出流用PdfWriter类绑定在一起
                //从而完成向Document写,即写入PDF文档
                PdfWriter.getInstance(document,new FileOutputStream("src/poi/itext/HelloWorld.pdf"));
                //第3步,打开文档
                document.open();
                //第3步,向文档添加文字. 文档由段组成
                document.add(new Paragraph("Hello World"));

                Paragraph par = new Paragraph("世界你好",FontChinese);
                document.add(par);

                PdfPTable table = new PdfPTable(3);
                for(int i=0;i<12;i++)
                {
                    if (i == 0)
                    {
                        PdfPCell cell = new PdfPCell();
                        cell.setColspan(3);
                        cell.setBackgroundColor(new Color(180,180,180));
                        cell.addElement(new Paragraph("表格头" , FontChinese));
                        table.addCell(cell);
                    }
                    else
                    {
                        PdfPCell cell = new PdfPCell();
                        cell.addElement(new Paragraph("表格内容" , FontChinese));
                        table.addCell(cell);
                    }
                }
                document.add(table);

            }
            catch (DocumentException de)
            {
                System.err.println(de.getMessage());
            }
            catch (IOException ioe)
            {
                System.err.println(ioe.getMessage());
            }
            //关闭document
            document.close();
            
            System.out.println("生成HelloPdf成功!");
         }
        
        
    }
     

    展开全文
  • poi生成excel文件中文乱码问题

    万次阅读 2015-03-18 17:52:44
    利用POI生成excel文件,在本机Windows测试成功,发布到linux服务器上,生成的文件中文有部分是乱码。项目的编码是utf-8,数据库里的编码是gbk,一般Windows中文系统的编码是gb2312,linux系统是utf-8,用到linux...

    http://ljhzzyx.blog.163.com/blog/static/3838031220091122649872/


    利用POI生成excel文件,在本机Windows测试成功,发布到linux服务器上,生成的文件中文有部分是乱码。项目的编码是utf-8,数据库里的编码是gbk,一般Windows中文系统的编码是gb2312,linux系统是utf-8,用到linux服务器查到的编码是en_US.utf-8。

          经查看,出现乱码的字符是直接在程序中写的字符串字面量(就是"..."里面写中文)。可以断定,原因是自己的java程序在不同的操作系统下处理字符串字面量,使用系统默认编码不同造成的。这些字面量使用 new String("...".getBytes(), "utf-8")这样来重新构造,在linux系统下生成的excel文件就不是乱码了。

          这样处理这些字面量后,发现有一个字符串仍是乱码,查看后面的代码,发现此字符串进行了多次 "+" 操作。如下, zoneName 和 corpName 是客户端界面传过来的字符串:
    String reportTypeDay = "日统计报表";
    String titleStr = zoneName + corpName;
    ...
    titleStr += reportTypeDay;
    字符串 titleStr 不需要进行转码,不会出现乱码。
    String reportTypeDayLeft = new String("日统计报表(".getBytes(), fileEncoding);
    ...
    String rightBracket = ")";
    ...
    String sheetName = corpName + reportTypeDayLeft + tableDate + rightBracket;
    corpName 和 tableDate是客户端界面传过来的字符串,此处reportTypeDayLeft如果不手动转码,在生成的excel文件中就会成为乱码,具体原因尚不清楚。

          接下来,有个问题就是,这样固定编码生成文件,在Windows下就会有乱码了。因此,需要根据程序运行时系统的编码来生成文件,获得系统编码的方法如下:
    public static String getSystemFileCharset(){
        Properties pro = System.getProperties();
        return pro.getProperty("file.encoding");
     }

          POI在2.5版本的时候,有cell的setEncoding的方法,但处理的不好,有时候转换不成功。在POI3.2版本之后,就取消了这样的方法,POI的开发者不想管这麻烦事了,让你们这些用我POI的人自己处理字符去吧。在非POI相关的java程序中,可以在生成文件的时候,通过OutputStream构造指定字符集的OutputStreamWriter再去写文件,这样就不用自己去转换每个字符串的编码(常用的FileWriter是根据系统编码生成文件)。POI中是使用HSSFWorkbook的write方法生成文件,未找到指定字符集生成文件的方法,实现这样的功能可能要自己扩展。











    java中文乱码的解决

      在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。
    这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。以前我也经常为这个问题而苦恼,后来经查了些资料,终于解决了,我知道一定有很多朋友也会碰到这个问题,所以特就总结了一下,来拿出来让大家一起分享了。
    1、在网页中输出中文。
    JAVA在网络传输中使用的编码是"ISO-8859-1",故在输出时需要进行转化,如:
    String str="中文";
    str=new String(str.getBytes("GB2312"),"8859_1");
    但假如在编译程序时,使用的编码是“GB2312”,且在中文平台上运行此程序,不会出现此问题,一定要注重。
    2、从参数中读取中文
    这正好与在网页中输出相反如:
    str=new String(str.getBytes("8859_1"),"GB2312");
    3、操作DB中的中文问题
    一个较简单的方法是:在“控制面扳”中,把“区域”设置为“英语(美国)”。假如还会出现乱码,还可进行如下设置:
    取中文时:str=new String(str.getBytes("GB2312"));
    向DB中输入中文:str=new String(str.getBytes("ISO-8859-1"));

    4、在jsp中的中文解决:

    在“控制面扳”中,把“区域”设置为“英语(美国)”.
    在JSP页面中加入:
    假如还不行正常显示,则还要进行下面的转换:
    如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
    就不会出现中文问题了。



    http://blog.chinaunix.net/uid-11187-id-3040030.html

    展开全文
  • POI按word模版生成合同并生成PDF。模版替换符为:{年}修复生成pdf功能
  • 最近由于工作中需要使用poi生成对应的pptx文件,就对照api文档进行研究了一下,api文档也是英文版的,很多东西感觉描述的不是那么清晰,比较耗费精力。在此分享一下生成方法以及一点问题的解决。其实在生成pptx文件...
  • 1.Poi生成excel 1)创建HSSFWorkbook对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet sheet = hssfWorkbook.createSheet("运单数据"); 2)设置表头: HSSFRow headRow = she...
  • Java生成PDF文件

    千次阅读 2019-06-27 13:59:11
    Java生成PDF文件 一、前言  最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错、最后想到直接将文件写入pdf(参考:...
  • 在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 生成 Excel 文档. ...
  • java 利用 poi 生成 Excel文件的例子

    万次阅读 2014-10-30 10:12:40
    在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 保护...
  • http://rensanning.iteye.com/blog/1538689 http://itextpdf.com/
  • David老师的解密JAVA实现Excel导入导出相关的jar包: poi-3.11-20141221.jar commons-io-2.2.jar读写Excel三种常用技术 1. POI 2. JXL 3. FASTEXCEL利用POI生成Excel文件
  • POI生成excel文件

    千次阅读 2004-10-11 16:40:00
    介绍:Jakarta_POI 使用Java读写Excel(97-2002)文件,可以满足大部分的需要。因为刚好有一个项目使用到了这个工具,花了点时间顺便翻译了一下POI本身带的一个Guide.有一些节减和修改,希望给使用这个项目的人一些入门...
  • word通过poi-ooxml生成PDF文件
  • POI生成Excel, Word , PDF的实现

    千次阅读 2019-04-02 14:37:04
    import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter;...import org.apache.poi.hssf.usermodel.HSSFCell; i...
  • poi和aspose-words生成pdf

    千次阅读 2018-09-08 18:32:32
    1.因项目中用到使用pdf文件存档,最初使用itext对pdf的操作对简单的pdf可以使用预先设定的pdf模板生成,但遇到相对复杂的pdf时问题就来了,需要itext使用代码一行一行的创建太过复杂。于是想到了使用word模板生成...
  • 热门系列: ... 【Java编程系列】log4j配置日志按级别分别生成日志文件 【Java编程系列】使用Java进行串口SerialPort通讯 【Java编程系列】comet4j服务器推送实现 【Java编程系列】
  • poi读取doc生成pdfOne of my customers has an insane amount of PDF and Microsoft Word DOC files on their website. It's core to their online services so it's not as though they're garbage files up on the...
  • 一、程序导出word文档的方法将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的...
  • 程序导出word文档的方法将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的方法...
  • java后台生成pdf文件

    千次阅读 2019-12-07 17:04:52
    第一种需要定制模板,然后生成pdf下载打印。因为模板有可能随时改动,样式内容都可以发生变化。所以我这边在用doc做模板,先将变量替换进去,生成新的doc 再讲新的doc转换为pdf让用户下载。随时可以修改模板 ,不要...
  • 如何用java生成pdf文件

    2016-01-10 12:16:51
    就是写一个方法,把一个html文件打印成pdf文件,我按照网上的试了,用了itext,结果不能显示中文,求大神帮忙,最好给出相应的jar包

空空如也

空空如也

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

poi生成pdf文件