首页 > 编程知识 正文

javaapi文档怎么下载,java构造方法

时间:2023-05-05 06:26:46 阅读:20384 作者:832

最近的项目需要实现PDF下载功能,但由于没有这方面的经验,所以在网上找到相关资料花了很长时间。 经过整理,我发现有几个框架可以实现这一功能。

1 .开源框架支持iText,生成PDF文档,还支持将XML和Html文件转换为PDF文件;

生成和合并Apache PDFBox、PDF文档;

生成docx4j、docx、pptx和xlsx文档,支持转换为PDF格式。

比较: iText开源协议为AGPL,其他两个框架协议为Apache License v2.0。

使用PDFBox生成PDF就像画画一样,文字和图像是根据页面坐标绘制的。 必须根据字符数手动换行。

docx4j用于生成docx文档,并提供将WORD文档转换为PDF文档的功能。 不能直接生成PDF文档。

2 .实现方案——格式复杂、格式简单、数据量大的docx4j freemarkerdocx4j或PDFBox

数据量少的docx4jPDFBox

2.1从纯数据生成PDF

1.docx4j,适用于以简单或复杂格式生成数据量少的PDF文档; 2.Apache PDFBox。 适用于以简单格式生成数据量少的PDF文档。

1.docx4j

docx4j是一个开源Java库,用于创建和操作MicrosoftopenXML(wordDocx、Powerpoint pptx和Excel xlsx )文件。 类似于Microsoft的OpenXML SDK,但适用于Java。 docx4j使用JAXB在内存中创建对象表示。 程序员需要时间来理解JAXB和Open XML文件结构。

//word对象wordprocessingmlpackagewordmlpackage=wordprocessingmlpackage.create package (; //文档主体maindocumentpartmaindocumentpart=wordmlpackage.getmaindocumentpart (; //换行Br br=objectFactory.createBr (; //段落P p=objectFactory.createP (; //段落设置PPr ppr=objectFactory.createPPr (; //字符位置Jc jc=new Jc (; JC.setval(je; pr.setJC(JC; //行设置RPr rpr=objectFactory.createRPr (; //字体设置rfontsrfonts=object factory.creater fonts (; rfonts.setascii(timesnewRoman ); rFonts.setEastAsia (宋体); RPR.setrfonts(rfonts ); //行R r=objectFactory.createR (; //文本texttext=object factory.create text (; text.setValue (这是普通文本); r.setRPR(RPR; r.getContent ().add ) ) br; r.getContent ().add ) ) text; p.getContent ().add ) ) r; p.setppr(PPR; //添加到正文中的maindocumentpart.addobject(p; //导出/.

2.Apache PDFBox Apache PDFBox是一个用于处理PDF文档的开源Java工具。 此项目允许您创建新的PDF文档、处理现有文档和从文档中提取内容。 Apache PDFBox还包括几个命令行实用程序。

stringformtemplate='/users/Xiaoming/desktop/test _ pdf box.pdf '; //文档对象pddocumentdocument=newpddocument (; //1定义页面,大小a4 pdpagepage=newpdpage (PD rectangle.a4 ); 文档. add page (page; //字体PD type0font font=PD type0font.load (文档,新文件)/users/Xiaoming/work/tmp/simsun.TTF ) ) ) //设置字体和字符大小stream.setfont(font,12 ); //设置画笔颜色stream.setnonstrokingcolor (color.black ); 添加//矩形stream.addrect (29,797,100,14 ); //填充矩形的stream.fill (; stream.setnonstrokingcolor (color.black ); //文本嵌入开始stream.beginText (; //设定行间s

tream.setLeading(18f); // 设置文字位置 stream.newLineAtOffset(30, 800); // 填充文字 stream.showText("呵呵"); // 换行 stream.newLine(); stream.showText("哈哈"); stream.newLine(); stream.showText("嘻嘻"); // 文本填充结束 stream.endText(); // 关闭流 stream.close(); // 保存 document.save(formTemplate); // 释放资源 document.close();

2.2 模版+数据生成PDF

FreeMarker+docx4j,适用于生成格式复杂且数据量大的PDF文档

Apache FreeMarker是一个模板引擎,用于根据模板和更改数据生成文本输出(HTML网页,电子邮件,配置文件,源代码等)。模板是用FreeMarker模板语言(FTL)编写的,是一种简单的专用语言。

Office2003以上,Word是可以以XML文本格式存储的。先将要生成的PDF转换为Word文档 ,再将其保存为XML文本,通过模版引擎将数据填充到XML文本中,最后再反向转换为PDF文档。简单来说就是PDF->Word->XML->Word->PDF的流程。步骤描述工具1word -> xml手动

3ftl + obj = xmlfreemarker

4xml -> pdfdocx4j

步骤

1 把pdf文档对应的word(docx)制作出来

2 把word文档另存为xml文件

3 将xml文件制作为freemarker模版(ftl)文件

4 将数据和ftl文件组装为xml文本

Map map = new HashMap<>(); map.put("name", "bbdjz"); map.put("address", "北京市朝阳区"); map.put("email", "xiaoming@abc.com"); StringWriter stringWriter = new StringWriter(); BufferedWriter writer = new BufferedWriter(stringWriter); template.process(map, writer); String xmlStr = stringWriter.toString();

5 使用docx4j将xml文本加载为word文档对象

ByteArrayInputStream in = new ByteArrayInputStream(xmlStr.getBytes()); WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);

6 使用docx4j将word文档转存为pdf文档

String outputfilepath = "/Users/xiaoming/简历.pdf"; FileOutputStream os = new FileOutputStream(new File(outputFilePath)); FOSettings foSettings = Docx4J.createFOSettings(); foSettings.setWmlPackage(wordMLPackage); Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL); // Docx4J.toPDF(wordMLPackage, new FileOutputStream(new File(outputfilepath)));

2.3 Word转PDF

docx4j

WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(new File("abc.docx")); Mapper fontMapper = new IdentityPlusMapper(); // fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai")); mlPackage.setFontMapper(fontMapper); OutputStream os = new java.io.FileOutputStream("abc.pdf"); FOSettings foSettings = Docx4J.createFOSettings(); foSettings.setWmlPackage(mlPackage); Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);

2.4 合并多个PDF

Apache PDFBox,将多个PDF文档合并

String folderName = "/Users/xiaoming/pdfs"; String destPath = "/Users/xiaoming/all.pdf"; PDFMergerUtility mergePdf = new PDFMergerUtility(); String[] filesInFolder = getFiles(folderName); Arrays.sort(filesInFolder, new Comparator() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); for (int i = 0; i < filesInFolder.length; i++) { mergePdf.addSource(folderName + File.separator + filesInFolder[i]); } mergePdf.setDestinationFileName(destPath); mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());

示例代码

以上所述是小编给大家介绍的Java生成PDF文档方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对华域联盟网站的支持!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。