精华内容
下载资源
问答
  • word模板如图:二、将word模板pdf模板。三、用Adobe Acrobat Pro打开pdf模板。四、编辑模板域,即要填写的内容。点击表单选择添加或编辑域选项:双击可以 修改域的变量名及样式字体的设置。然后保存这样pdf的模板...

    一、创建word模板。 word模板如图:

    8bc81e6730b183cfac86be6cd10ea246.png

    二、将word模板转pdf模板。

    三、用Adobe Acrobat Pro打开pdf模板。

    四、编辑模板域,即要填写的内容。

    28805e808a31fc72db082ec844aea262.png

    点击表单选择添加或编辑域选项:

    2aeaf2dd2663d1b9ca018a75b1e4f582.png

    双击可以 修改域的变量名及样式字体的设置。

    然后保存这样pdf的模板就生成了。

    六、添加mawen引用:

    com.itextpdf

    itextpdf

    5.4.3

    七、生成代码:

    public static void pdfout(Mapo) {//模板路径

    String templatePath = "D:/模板1.pdf";//生成的新文件路径

    String newPDFPath = "D:/test.pdf";

    PdfReader reader;

    FileOutputStream out;

    ByteArrayOutputStream bos;

    PdfStamper stamper;try{

    BaseFont bf= BaseFont.createFont("c://windows//fonts//simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

    Font FontChinese= new Font(bf, 5, Font.NORMAL);

    out= new FileOutputStream(newPDFPath);//输出流

    reader = new PdfReader(templatePath);//读取pdf模板

    bos = newByteArrayOutputStream();

    stamper= newPdfStamper(reader, bos);

    AcroFields form=stamper.getAcroFields();//文字类的内容处理

    Map datemap = (Map)o.get("datemap");

    form.addSubstitutionFont(bf);for(String key : datemap.keySet()){

    String value=datemap.get(key);

    form.setField(key,value);

    }//图片类的内容处理

    Map imgmap = (Map)o.get("imgmap");for(String key : imgmap.keySet()) {

    String value=imgmap.get(key);

    String imgpath=value;int pageNo = form.getFieldPositions(key).get(0).page;

    Rectangle signRect= form.getFieldPositions(key).get(0).position;float x =signRect.getLeft();float y =signRect.getBottom();//根据路径读取图片

    Image image =Image.getInstance(imgpath);//获取图片页面

    PdfContentByte under =stamper.getOverContent(pageNo);//图片大小自适应

    image.scaleToFit(signRect.getWidth(), signRect.getHeight());//添加图片

    image.setAbsolutePosition(x, y);

    under.addImage(image);

    }

    stamper.setFormFlattening(true);//如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑

    stamper.close();

    Document doc= newDocument();

    Font font= new Font(bf, 32);

    PdfCopy copy= newPdfCopy(doc, out);

    doc.open();

    PdfImportedPage importPage= copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);

    copy.addPage(importPage);

    doc.close();

    }catch(IOException e) {

    System.out.println(e);

    }catch(DocumentException e) {

    System.out.println(e);

    }

    }

    代码测试:

    public static voidmain(String[] args) {

    Map map = newHashMap();

    map.put("Name","张三");

    map.put("Code","2565");

    map.put("Number","123456789");

    Map map2 = newHashMap();

    map2.put("img","d:/Spring.jpg");

    Map o=newHashMap();

    o.put("datemap",map);

    o.put("imgmap",map2);

    pdfout(o);

    }

    原文:https://www.cnblogs.com/Revival-of-everything/p/12082814.html

    展开全文
  • java根据word模板动态赋值某些字段,然后生成pdf,参考文档:http://deepoove.com/poi-tl/#_why_poi_tl

    java根据word模板动态赋值某些字段,然后生成pdf,参考文档:http://deepoove.com/poi-tl/#_why_poi_tl

    展开全文
  • java基于word模板分分钟动态生成word及输出pdf

    在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多

    由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来

    在咨询了之前做政务系统的同学后,他们都一致推荐我使用aspose框架来实现,因为它的效率高并且简单方便使用

    在看了下aspose的官网和对demo简单体验了之后感觉确实很方便,为了后面项目中万一又遇到有需要的场景可以信手拈来,这里我简单在此处记录一下

    下载地址

    https://downloads.aspose.com/words/java

    选择版本:Aspose.Words for Java 19.1

    (之所以选择那个版本,是因为网上有很多这个版本的pj教程,太新的担心pj不了,当然不pj也可以用但是有水印)

    如果直接下载jar的话也可通过aspose官方的maven仓库地址进行下载:

    https://repository.aspose.com/repo/com/aspose/aspose-words/19.1/aspose-words-19.1-jdk16.jar

    pj教程:

    https://www.jianshu.com/p/be0cbdc389cc

    也可以直接下载已破解好的jar,如果自己能找到的话

    使用示例

    这里演示一个目前我的项目中可能需要满足的一个需求,通过一个word模板生成pdf,动态填充word中的内容,同时支持生成多个pdf但要求pdf合并到一个pdf中

    添加maven依赖

    将下载好的jar放到项目中,然后添加依赖

            <!--aspose-words依赖,直接依赖本地项目中的jar-->
            <dependency>
                <groupId>com.aspose</groupId>
                <artifactId>aspose-words</artifactId>
                <version>aspose-words-19.1-jdk16.jar</version>
                <scope>system</scope>
                <systemPath>${pom.basedir}/libs/aspose-words-19.1-jdk16-crack.jar</systemPath>
            </dependency>
    

    如果用本地jar打包时记得添加资源配置:

        <build>
            <resources>
                <resource>
                    <directory>libs</directory>
                    <targetPath>BOOT-INF/lib/</targetPath>
                    <includes>
                        <include>**/*.jar</include>
                    </includes>
                </resource>
            </resources>
        </build>
    

    word模板准备

    我们的最终目的是生成pdf,但为了方便还是先通过word模板生成word之后再输出为pdf。

    为了排版方便建议还是使用word中的表格来进行排版,对于可变的地方可以添加【文字型窗体域】便于后面程序的文字进行填充
    word模板编辑
    在word模板准备好了之后就可以直接开始写代码了

    测试代码

    import com.aspose.words.*;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.format.DateTimeFormatter;
    import java.util.ArrayList;
    import java.util.Date;
    
    /**
     * @author puhaiyang
     * @date 2020/10/11 12:12
     * 测试aspose生成pdf工具类
     */
    public class AsposeWordsUtils {
        /**
         * Word转PDF操作
         *
         * @param doc        源文件
         * @param targetFile 目标文件
         */
        public static void doc2pdf(Document doc, String targetFile) {
            try {
                long old = System.currentTimeMillis();
                //新建一个空白pdf文档
                File file = new File(targetFile);
                FileOutputStream os = new FileOutputStream(file);
                //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
                doc.save(os, SaveFormat.PDF);
                os.close();
                long now = System.currentTimeMillis();
                //转化用时
                System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private static class UserInfo {
            public UserInfo(String userNumber, String userName, String depaName, String desc, Date pubDate) {
                this.userNumber = userNumber;
                this.userName = userName;
                this.depaName = depaName;
                this.desc = desc;
                this.pubDate = pubDate;
            }
    
            private String userNumber;
            private String userName;
            private String depaName;
            private String desc;
            private Date pubDate;
    
            public String getUserNumber() {
                return userNumber;
            }
    
            public void setUserNumber(String userNumber) {
                this.userNumber = userNumber;
            }
    
            public String getUserName() {
                return userName;
            }
    
            public void setUserName(String userName) {
                this.userName = userName;
            }
    
            public String getDepaName() {
                return depaName;
            }
    
            public void setDepaName(String depaName) {
                this.depaName = depaName;
            }
    
            public String getDesc() {
                return desc;
            }
    
            public void setDesc(String desc) {
                this.desc = desc;
            }
    
            public Date getPubDate() {
                return pubDate;
            }
    
            public void setPubDate(Date pubDate) {
                this.pubDate = pubDate;
            }
        }
    
        public static void main(String[] args) throws Exception {
            ArrayList<UserInfo> userInfoList = getUserInfoList();
            //模板word
            String template = "C:/Users/ping/Desktop/temp/aspose/test/forTest.docx";
    
            Document firstDocument = null;
            for (UserInfo userInfo : userInfoList) {
                //目标word
                Document document = new Document(template);
                Range range = document.getRange();
                range.replace("ygbh", userInfo.getUserNumber(), new FindReplaceOptions());
                range.replace("ygxm", userInfo.getUserName(), new FindReplaceOptions());
                range.replace("szbm", userInfo.getDepaName(), new FindReplaceOptions());
                range.replace("zygx", userInfo.getDesc(), new FindReplaceOptions());
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                LocalDateTime localDateTime = LocalDateTime.ofInstant(userInfo.getPubDate().toInstant(), ZoneId.systemDefault());
                range.replace("bfrq", formatter.format(localDateTime), new FindReplaceOptions());
                if (firstDocument == null) {
                    firstDocument = document;
                } else {
                    //添加文档
                    firstDocument.appendDocument(document, ImportFormatMode.KEEP_DIFFERENT_STYLES);
                }
            }
            doc2pdf(firstDocument, "C:/Users/ping/Desktop/temp/aspose/test/descForTest.pdf");
        }
    
        private static ArrayList<UserInfo> getUserInfoList() {
            ArrayList<UserInfo> userInfoList = new ArrayList<UserInfo>();
            userInfoList.add(new UserInfo("666001", "海洋哥",
                    "滑水部-酱油项目组-基础架构组",
                    "研究如何滑水及如何深入打酱油,对如何平滑滑水取得了重要贡献", new Date()));
            userInfoList.add(new UserInfo("666002", "帅哥",
                    "核心项目事业部-超级潜水部-默默潜水研究组-项目三组",
                    "对如何潜水取得了重要贡献", new Date()));
            return userInfoList;
        }
    }
    

    整体来看代码还是很少的,写完后直接运行跑一下

    输出结果

    输出文件
    输出文件
    生成的pdf文件预览
    生成的pdf文件预览
    效果还是可以的,文字该换行显示的还是换行显示了,效果不错代码执行效率也很快,非常简单。

    以后再遇到要求项目中实现动态生成PDF简直就是分分钟的事呀!nice~

    linux下导出pdf乱码解决办法

    如果在windows下导出pdf一切正常,但在linux下导出pdf中文乱码了,则需要通过添加字体文件并在aspose的代码中指定所在的字体文件

    //指定字体目录
    FontSettings.getDefaultInstance().setFontsFolder("/opt/user/otherfonts/", false);
    //执行保存
    doc.save(pdfPath);
    

    具体办法是先找到字体对应的字体文件,在windows不报错的话就从windows上先找下, windows的字体文件都在这个目录下

    C:\Windows\Fonts\

    方式一,直接部署方式

    找到对应的字体然后拷贝到linux某个目中即可

    方式二,docker部署方式

    但是如果是docker的话,则可以通过volume映射字体目录或通过Dockerfile直接将字体打在docker镜像中,如果打在镜像中的话会导致镜像文件很大

    方式三,通过k8s方式

    如果是通过kubernetes来部署的项目可以通过pvc来搞定,但如果没得对应的文件服务器,则可以用过init-containers配合emptyDir类型的volumes来解决,参考地址:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

    {
        "template": {
            "spec": {
                "containers": [
                    {
                        "image": "xxxxxxxxxxxxxxxxxxxx",
                        "volumeMounts": [
                            {
                                "mountPath": "/opt/user/otherfonts",
                                "name": "font-depend"
                            }
                        ]
                    }
                ],
                "initContainers": [
                    {
                        "command": [
                            "sh",
                            "-c",
                            "set -ex;mkdir -p /vmfontsdepend/fonts;cp -r /otherfonts/* /vmfontsdepend/fonts;"
                        ],
                        "image": "ccr.ccs.tencentyun.com/haiyang/font-depend-image:1.0.0",
                        "imagePullPolicy": "IfNotPresent",
                        "name": "init-font-depends",
                        "volumeMounts": [
                            {
                                "mountPath": "/vmfontsdepend/fonts",
                                "name": "font-depend"
                            }
                        ]
                    }
                ],
                "volumes": [
                    {
                        "emptyDir": {},
                        "name": "font-depend"
                    }
                ]
            }
        }
    }
    

    其中ccr.ccs.tencentyun.com/haiyang/font-depend-image:1.0.0的Dockerfile为:

    FROM alpine:3.8
    LABEL maintainer="puhaiyang"
    ADD fonts/* /otherfonts/
    

    fonts目录下为需要导入的字体文件


    参考资料

    查找并替换docx的中文字(模板生成)

    https://github.com/aspose-words/Aspose.Words-for-Java/blob/master/Examples/src/main/java/com/aspose/words/examples/quickstart/FindAndReplace.java

    多个docx文档合并为一个(文档合并)

    https://github.com/aspose-words/Aspose.Words-for-Java/blob/master/Examples/src/main/java/com/aspose/words/examples/quickstart/AppendDocuments.java

    docx转为pdf

    https://github.com/aspose-words/Aspose.Words-for-Java/blob/master/Examples/src/main/java/com/aspose/words/examples/loading_saving/ConvertToPDF.java

    展开全文
  • java使用pdf模板生成pdf文件

    千次阅读 2018-01-19 14:44:28
    遇到了一个变态的需求,要我们在后台生成一个pdf文件,格式又很复杂,想了想如果自己手动利用iText绘制一个pdf,不太现实,通过查找资料后,发现了一种方法: 利用itextpdf+adobe acrobat+pdf模板生成pdf文件 ...

       在项目中,遇到了一个变态的需求,要我们在后台生成一个pdf文件,格式又很复杂,想了想如果自己手动利用iText绘制一个pdf,不太现实,通过查找资料后,发现了一种方法:

                利用itextpdf+adobe acrobat+pdf模板生成pdf文件


       要实现这个功能,我使用了这一个第三方包了:itextpdf.jar

       还需要adobe acrobat这个软件,主要用来制作PDF模板

       1.使用adobe acrobat的步骤:

        1.1 将word转换成pdf文件,比如说:remark.pdf;
        1.2 右击remark.pdf点击使用adobe acrobat 编辑的按钮;
        1.3 选择准备表单;
        1.4 adobe acrobat 工具会在表格中自动填充一些“文本域”,默认已 “fill_” 开头;
        1.5 你可以修改表单域的名字,选择添加“文本”域,在想要添加的位置添加即可

       2.编译java代码

        2.1编译表单域的名字的javaBean,与adobe acrobat中的表单域的名字一一对应:

    public class Ticket {  
    	   
        private String growup;  
        private String attainment;  
        private String present;  
        private String late;  
        private String leave;  
        private String sicklate;  
        private String bigbreak;  
        private String hint;  
        private String evaluate;  
        private String bearpalm;  
        private String praise; 
        private String improve;
        private String yinzhang;
    
        public Ticket() {  
                  super();  
        }
    
    	public Ticket(String growup, String attainment, String present, String late, String leave, String sicklate,
    			String bigbreak, String hint, String evaluate, String bearpalm, String praise, String improve,
    			String yinzhang) {
    		super();
    		this.growup = growup;
    		this.attainment = attainment;
    		this.present = present;
    		this.late = late;
    		this.leave = leave;
    		this.sicklate = sicklate;
    		this.bigbreak = bigbreak;
    		this.hint = hint;
    		this.evaluate = evaluate;
    		this.bearpalm = bearpalm;
    		this.praise = praise;
    		this.improve = improve;
    		this.yinzhang = yinzhang;
    	}
    
    	public String getGrowup() {
    		return growup;
    	}
    
    	public void setGrowup(String growup) {
    		this.growup = growup;
    	}
    
    	public String getAttainment() {
    		return attainment;
    	}
    
    	public void setAttainment(String attainment) {
    		this.attainment = attainment;
    	}
    
    	public String getPresent() {
    		return present;
    	}
    
    	public void setPresent(String present) {
    		this.present = present;
    	}
    
    	public String getLate() {
    		return late;
    	}
    
    	public void setLate(String late) {
    		this.late = late;
    	}
    
    	public String getLeave() {
    		return leave;
    	}
    
    	public void setLeave(String leave) {
    		this.leave = leave;
    	}
    
    	public String getSicklate() {
    		return sicklate;
    	}
    
    	public void setSicklate(String sicklate) {
    		this.sicklate = sicklate;
    	}
    
    	public String getBigbreak() {
    		return bigbreak;
    	}
    
    	public void setBigbreak(String bigbreak) {
    		this.bigbreak = bigbreak;
    	}
    
    	public String getHint() {
    		return hint;
    	}
    
    	public void setHint(String hint) {
    		this.hint = hint;
    	}
    
    	public String getEvaluate() {
    		return evaluate;
    	}
    
    	public void setEvaluate(String evaluate) {
    		this.evaluate = evaluate;
    	}
    
    	public String getBearpalm() {
    		return bearpalm;
    	}
    
    	public void setBearpalm(String bearpalm) {
    		this.bearpalm = bearpalm;
    	}
    
    	public String getPraise() {
    		return praise;
    	}
    
    	public void setPraise(String praise) {
    		this.praise = praise;
    	}
    
    	public String getImprove() {
    		return improve;
    	}
    
    	public void setImprove(String improve) {
    		this.improve = improve;
    	}
    
    	public String getYinzhang() {
    		return yinzhang;
    	}
    
    	public void setYinzhang(String yinzhang) {
    		this.yinzhang = yinzhang;
    	}  
    }  
                 2.2在表单域中绘制表格(这是4行2列的表格):

    import java.util.List;
    import com.itextpdf.text.Chunk;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.AcroFields;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfStamper;
    
    public class InsertExcel {
    
    	public static void insert(PdfStamper ps, AcroFields s) throws DocumentException  
    	{  
    	List<AcroFields.FieldPosition> list = s.getFieldPositions("evaluate");  
    	Rectangle rect = list.get(0).position;  
    	PdfContentByte cb = ps.getOverContent(1);  
    	
    		PdfPTable table = new PdfPTable(2);  
    		float tatalWidth = rect.getRight() - rect.getLeft() - 1;  
    		table.setTotalWidth(tatalWidth);  
    		  
    		float[] widths = { 0.65f, 0.35f};
    	   
    		 
    		for(int i = 0;i < 4;i++){
    		    PdfPCell cell1 = new PdfPCell(new Phrase("好"));
    	            cell1.setUseBorderPadding(true);
    	            cell1.setBorderWidth(0.2f);
    	            cell1.setUseAscender(true); 
    	            cell1.setVerticalAlignment(cell1.ALIGN_MIDDLE); 
    	            cell1.setHorizontalAlignment(cell1.ALIGN_CENTER);
    	            table.addCell(cell1);
    	     
    	           PdfPCell cell2 = new PdfPCell(new Phrase("Cell 2"));
    	           cell2.setUseBorderPadding(true);
    	           cell2.setBorderWidth(0.2f);
    	           cell2.setUseAscender(true); 
    	           cell2.setVerticalAlignment(cell2.ALIGN_MIDDLE); 
    	           cell2.setHorizontalAlignment(cell2.ALIGN_CENTER);
    	           table.addCell(cell2);
    		}
    	          table.setWidths(widths);
    	          table.setTotalWidth(154);
    	          table.setLockedWidth(true);
    	          table.getDefaultCell().setMinimumHeight(50);
                     table.writeSelectedRows(0, -1, rect.getLeft(), rect.getTop(), cb);  
    	}
    }
    
                     2.3在表单域中插入图片:

    String imagePath = "E:\\1.png";  
                       
    int pageNo = s.getFieldPositions("present").get(0).page;
    Rectangle signRect = s.getFieldPositions("present").get(0).position;
    float x = signRect.getLeft();
    float y = signRect.getBottom();
    
     // 读图片
    Image image = Image.getInstance(imagePath);
     // 获取操作的页面
     PdfContentByte under = ps.getOverContent(pageNo);
     // 根据域的大小缩放图片
     image.scaleToFit(signRect.getWidth(), signRect.getHeight());
      // 添加图片
      image.setAbsolutePosition(x, y);
      under.addImage(image);
                      2.4制作多页的pdf,插入文字,图片,表格:

    import java.io.ByteArrayOutputStream;  
    import java.io.File;  
    import java.io.FileOutputStream;  
    import java.util.ArrayList;  
       
    import testPDF.Ticket;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.AcroFields;  
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfCopy;
    import com.itextpdf.text.pdf.PdfImportedPage;
    import com.itextpdf.text.pdf.PdfReader;  
    import com.itextpdf.text.pdf.PdfStamper;  
         
    public class PDFTempletTicket {  
       
             private String templatePdfPath;  
             private String ttcPath;  
             private String targetPdfpath;  
             private Ticket ticket;  
             private GetImage getImage;
             private InsertExcel insertExcel;
              
              
             public PDFTempletTicket() {  
                       super();  
             }  
              
             public PDFTempletTicket(String templatePdfPath, String ttcPath,  
             String targetPdfpath, Ticket ticket) {  
                       this.templatePdfPath= templatePdfPath;  
                       this.ttcPath= ttcPath;  
                       this.targetPdfpath= targetPdfpath;  
                       this.ticket= ticket;  
             }  
              
             public void templetTicket(File file) throws Exception {  
            	 FileOutputStream fos = new FileOutputStream(file);        
            	 int page = 2;
            	 ByteArrayOutputStream bos[] = new ByteArrayOutputStream[page];  
            	 for (int item = 0; item < page; item++) {
            	   bos[item] = new ByteArrayOutputStream();
                       PdfReader reader = new PdfReader(templatePdfPath);  
                       
                       PdfStamper ps = new PdfStamper(reader,  bos[item]);  
                        
                       //使用中文字体 
                       BaseFont bf = BaseFont.createFont("c://WINDOWS//Fonts//simsun.TTC,0", BaseFont.IDENTITY_H, 
                    		   BaseFont.NOT_EMBEDDED);
                       
    			       ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();   
    			       fontList.add(bf);   
                        
                       AcroFields s = ps.getAcroFields();  
                       s.setSubstitutionFonts(fontList);  
       
                       s.setField("growup",ticket.getGrowup());  
                       s.setField("attainment",ticket.getAttainment());   
                       s.setField("late",ticket.getLate());  
                       s.setField("leave",ticket.getLeave());  
                       s.setField("sicklate",ticket.getSicklate());  
                       s.setField("bigbreak",ticket.getBigbreak());  
                       s.setField("bearpalm",ticket.getBearpalm());  
                       s.setField("praise",ticket.getPraise());
                       s.setField("improve",ticket.getImprove());
                       
                       String imagePath = "E:\\1.png";  
                       
                       int pageNo = s.getFieldPositions("present").get(0).page;
                       Rectangle signRect = s.getFieldPositions("present").get(0).position;
                       float x = signRect.getLeft();
                       float y = signRect.getBottom();
    
                       // 读图片
                       Image image = Image.getInstance(imagePath);
                       // 获取操作的页面
                       PdfContentByte under = ps.getOverContent(pageNo);
                       // 根据域的大小缩放图片
                       image.scaleToFit(signRect.getWidth(), signRect.getHeight());
                       // 添加图片
                       image.setAbsolutePosition(x, y);
                       under.addImage(image);
                        
                       int pageNo1 = s.getFieldPositions("hint").get(0).page;
                       Rectangle signRect1 = s.getFieldPositions("hint").get(0).position;
                       float x1 = signRect1.getLeft();
                       float y1 = signRect1.getBottom();
    
                       // 读图片
                       Image image1 = Image.getInstance(imagePath);
                       // 获取操作的页面
                       PdfContentByte under1 = ps.getOverContent(pageNo1);
                       // 根据域的大小缩放图片
                       image1.scaleToFit(signRect1.getWidth(), signRect1.getHeight());
                       // 添加图片
                       image1.setAbsolutePosition(x1, y1);
                       under1.addImage(image1);
                       
                       String imagePath2 = "E:\\0.png";  
                       
                       int pageNo2 = s.getFieldPositions("yinzhang").get(0).page;
                       Rectangle signRect2 = s.getFieldPositions("yinzhang").get(0).position;
                       float x2 = signRect2.getLeft();
                       float y2 = signRect2.getBottom();
    
                       // 读图片
                       Image image2 = Image.getInstance(imagePath2);
                       // 获取操作的页面
                       PdfContentByte under2 = ps.getOverContent(pageNo2);
                       // 根据域的大小缩放图片
                       image2.scaleToFit(signRect2.getWidth(), signRect2.getHeight());
                       // 添加图片
                       image2.setAbsolutePosition(x2, y2);
                       under.addImage(image2);
                       
                       //插入表格
                       insertExcel.insert(ps,s);
                       ps.setFormFlattening(true);  
                       ps.close();  
                        
            	 }
            	 	Document doc = new Document();                
        			PdfCopy pdfCopy = new PdfCopy(doc, fos);
        			doc.open();
        			PdfImportedPage impPage = null;
        			/**取出之前保存的每页内容*/
        			for (int i = 0; i < page; i++) {
        				impPage = pdfCopy.getImportedPage(new PdfReader(bos[i]
        						.toByteArray()), 1);
        				pdfCopy.addPage(impPage);
        			}
        			doc.close();//当文件拷贝  记得关闭doc        
                    fos.close();  
             }  
       
             /** 
              * @return the templatePdfPath 
              */  
             public String getTemplatePdfPath() {  
                       return templatePdfPath;  
             }  
       
             /** 
              * @param templatePdfPath the templatePdfPathto set 
              */  
             public void setTemplatePdfPath(String templatePdfPath) {  
                       this.templatePdfPath= templatePdfPath;  
             }  
       
             /** 
              * @return the ttcPath 
              */  
             public String getTtcPath() {  
                       return ttcPath;  
             }  
       
             /** 
              * @param ttcPath the ttcPath to set 
              */  
             public void setTtcPath(String ttcPath) {  
                       this.ttcPath= ttcPath;  
             }  
       
             /** 
              * @return the targetPdfpath 
              */  
             public String getTargetPdfpath() {  
                       return targetPdfpath;  
             }  
       
             /** 
              * @param targetPdfpath the targetPdfpath toset 
              */  
             public void setTargetPdfpath(String targetPdfpath) {  
                       this.targetPdfpath= targetPdfpath;  
             }  
       
             /** 
              * @return the ticket 
              */  
             public Ticket getTicket() {  
                       return ticket;  
             }  
       
             /** 
              * @param ticket the ticket to set 
              */  
             public void setTicket(Ticket ticket) {  
                       this.ticket= ticket;  
             }  
              
              
    }  
    
                  2.5mian函数

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class TestTempletTicket {
    
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		
    		 Ticket ticket = new Ticket();  
             
             ticket.setGrowup("Growup");  
             ticket.setAttainment("Attainment");  
             ticket.setPresent("aa");  
             ticket.setLate("Late");  
             ticket.setLeave("Leave");  
             ticket.setSicklate("Sicklate");  
             ticket.setBigbreak("Bigbreak");  
             ticket.setHint("Hint");  
             ticket.setEvaluate("Evaluate");  
             ticket.setBearpalm("Bearpalm");  
             ticket.setPraise("好");
             ticket.setImprove("继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力继续努力"
             		+ "继续努力继续努力继续努!");
              
             PDFTempletTicket pdfTT = new PDFTempletTicket();  
              
             pdfTT.setTemplatePdfPath("E:\\remark.pdf");  
             pdfTT.setTicket(ticket);  
              
             File file = new File("E:\\remark1.pdf");  
             file.createNewFile();  
             pdfTT.templetTicket(file);  
    	}
    
    }




    展开全文
  • Java 使用pdf 模板生成pdf文件——制作流程1.使用工具adobe acrobat dc、word 20152.使用 word 繪制一個 3*5 的表格並保存,如下: 3.將文檔另存為pdf格式注:不要使用“另存為adobe pdf ”選項,這樣保存出來的文檔...
  • Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
  • 让我动态生成pdf文件.在网上试了好多方法,感觉全是坑.最终采用了用xdocreport转化成pdf. 二.实现 (一).实现步骤 1.把.doc文件字体全部改成宋体 2.把.doc文件另存为.docx文件 3.将.docx文件后缀名改为.zip 4.解压zip...
  • 一、程序导出word文档的方法将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的...
  • Java通过word模板配置书签生成word,这个是公司内部代码直接可以运行
  • 程序导出word文档的方法将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的方法...
  • 1.根据word模板添加书签,例如在标题后需要输入内容的部分定义标签名title,然后保存模板到指定文件目录下。 2.java代码 此处用到Spire.Doc.jar,这个在官网Spire.Doc.jar进行下载支持maven和jar包两种格式 public ...
  • Java PDF模板生成PDF

    千次阅读 2018-02-28 15:10:19
    使用AdobeAcrobat DC将Word导成PDF文档进行文本字段的制作对模板内容的设置如下:二、将需要动态传入模板的值进行业务写入主要是写入的方法/** * 根据PDF模板生成PDF文件 * @param sourceFile 原模板文件 * @...
  • Java根据pdf模板生成证书PDF源码+jar包+证书模板,包含有汉字、英文、数字、繁体字、生僻字都能正常显示。博客讲解地址:https://blog.csdn.net/ITBigGod 采用Itext-Asian-5.2.0.jar和Itextpdf-5.5.11.jar
  • java 编码填充 word 模板生成 word合同,并将word合同转成pdf 文档 一、 1、 package com.test; import java.io.IOException; import java.io.InputStream; import org.apache.poi....
  • 在项目需求中,需要对于一个word模板文档生成相对应的word文件,而此word模板是多页的并且需要在最终文件中生成相应的目录,由于项目环境是Linux,所以舍弃了jacob(windows环境)。然后主要是研究了Apache poi 进行...
  • 刚到新的公司 就接到了 一个这样的需求 通过javaword模板填充数值变为一个word文件 (一想就想到了poi)并且要转为pdf格式 (这里就不做分析了 看下一篇有讲解) 然后就开始着手 我用的是poi的4.1 创建项目-建造...
  • java根据模板生成pdf

    2019-06-06 18:55:35
    前言      ...根据模板生成pdf 正文 依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <ver...
  • Java Maven 根据模板生成PDF文件

    千次阅读 2018-11-23 17:18:06
    记录下,忘记是谁的文章了,侵权请联系博主删除。 参考:... pom: &lt;...-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --&gt; &lt;dependency&gt; ...
  • java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板,Itext编辑pdf,java使用itext
  • Java利用模板生成pdf并导出-附件资源
  • java根据模板生成pdf文件并导出

    万次阅读 多人点赞 2017-03-23 13:18:29
    首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:...
  • java根据模板生成pdf文件并导出首先你的制作一个pdf模板:1.先用word做出模板界面2.文件另存为pdf格式文件3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载...
  • 在线生成pdf模板文件表单,网址:https://www.pdfescape.com上传刚刚保存的pdf文件在下拉中选择自己需要的类型选中文本框点击鼠标右键选择 object Properties 在name框中输入你要填充的字段名称,其他请根据自身...
  • 对企业合同word模版,可通过java 程序实现生成word文件,然后再通过word转成pdf实现。本实例的方案,可实现模版到word文件的转换。附件有代码和效果图。
  • 一、 制作模板 ...--生成PDF的类库--> <dependency> <groupId>com.aspose.words</groupId> <artifactId>aspose-words</artifactId> <version>15.8.0</version&
  • java根据模板生成PDF

    2019-07-14 17:36:00
    首先你的制作一个pdf模板: 1.先用word做出模板界面 画单元格的时候需要考虑值的长度,像这里的状态可能会很长 ...保存以后会生成PDF封面,需要去掉。 在线分封PDF https://smallpdf.co...
  • Java根据模板生成pdf文件并导出

    千次阅读 2018-03-05 20:03:38
    先用word做出模板界面2.文件另存为pdf格式文件3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)...
  • Java 使用pdf 模板生成pdf文件 ——制作流程 1. 使用工具 adobe acrobat dc、word 2015 2. 使用 word 绘制一个 3*5 的表格并保存,如下: 3. 将文档另存为pdf格式 注:不要使用“另存为adobe pdf ”选项,这样...

空空如也

空空如也

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

java程序word模板生成pdf

java 订阅