java导出pdf格式的文件

合集下载

java导出pdf接口的写法

java导出pdf接口的写法

java导出pdf接口的写法在Java中,你可以使用一些库来创建和导出PDF文件。

其中一个流行的库是Apache PDFBox。

以下是一个简单的示例,演示如何使用PDFBox 创建一个简单的PDF 文档并导出。

首先,确保你的项目中包含了PDFBox 的依赖。

如果使用Maven,可以在`pom.xml` 文件中添加以下依赖:```xml<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.33</version> <!--请检查最新版本--></dependency>```然后,你可以编写一个导出PDF 的接口。

以下是一个使用Spring Boot 创建的简单示例:```javaimport org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.springframework.http.HttpHeaders;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.ByteArrayOutputStream;import java.io.IOException;@RestController@RequestMapping("/api/pdf")public class PdfController {@GetMapping("/export")public ResponseEntity<byte[]> exportPdf() {try {byte[] pdfBytes = createPdf();HttpHeaders headers = new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=example.pdf");return ResponseEntity.ok().headers(headers).contentLength(pdfBytes.length).body(pdfBytes);} catch (IOException e) {e.printStackTrace();// 处理异常return ResponseEntity.status(500).body(null);}}private byte[] createPdf() throws IOException {try (PDDocument document = new PDDocument()) {PDPage page = new PDPage();document.addPage(page);try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {contentStream.beginText();contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);contentStream.newLineAtOffset(100, 700);contentStream.showText("Hello, this is a PDF document!");contentStream.endText();}ByteArrayOutputStream outputStream = new ByteArrayOutputStream();document.save(outputStream);return outputStream.toByteArray();}}}```在上述示例中,`exportPdf` 方法会调用`createPdf` 方法创建一个简单的PDF 文档,并将其作为字节数组返回。

java使用IText将数据导出为pdf文件(数据为excel表格样式)

java使用IText将数据导出为pdf文件(数据为excel表格样式)

java使⽤IText将数据导出为pdf⽂件(数据为excel表格样式)1.pom.xml导⼊使⽤的jar包<dependency><groupId>com.itextpdf</groupId><artifactId>itext-pdfa</artifactId><version>5.5.0</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>2.直接上代码(数据导出为pdf⽂件,数据呈现样式为⾃定义excel表格样式,⽀持多页展⽰)public class DataToPdf {public static final String DEST = "pdf/tables.pdf";public static void main(String[] args) throws IOException, DocumentException {File file = new File(DEST);file.getParentFile().mkdirs();new DataToPdf().dataToPdf(DEST);}/*** 数据转pdf* @param dest* @throws IOException* @throws DocumentException*/public void dataToPdf(String dest) throws IOException, DocumentException {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream(dest));document.open();// 使⽤语⾔包字体BaseFont abf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//字体Font font = new Font(abf, 8);//段落Paragraph p = new Paragraph("测试结算单", new Font(abf, 12, Font.BOLD));p.setAlignment(Paragraph.ALIGN_CENTER);document.add(p);//表格PdfPTable table = new PdfPTable(8);//numcolumns:列数table.setSpacingBefore(16f);//表格与上⾯段落的空隙//表格列创建并赋值PdfPCell cell = new PdfPCell(new Phrase("单位名称:测试有限公司", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);//居中cell.disableBorderSide(13);//去除左右上边框,保留下边框cell.setColspan(4);//合并列数table.addCell(cell);cell = new PdfPCell(new Phrase("⽇期:2020-06-05", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.disableBorderSide(13);cell.setColspan(3);table.addCell(cell);cell = new PdfPCell(new Phrase("单位(元)", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.disableBorderSide(13);cell.setColspan(1);table.addCell(cell);//⾸⾏cell = new PdfPCell(new Phrase("期间", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setColspan(2);table.addCell(cell);cell = new PdfPCell(new Phrase("⽉份", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("分类", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("年利率", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("⽇利率", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("基数", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("利息", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("起始⽇:2020-03-26\n" +"结束⽇:2020-04-25", font));cell.setPadding(16f);cell.setVerticalAlignment(Element.ALIGN_CENTER);cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setRowspan(3);cell.setColspan(2);table.addCell(cell);cell = new PdfPCell(new Phrase("4", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("10598164.91", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("325.01", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("4", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("资⾦", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("1.10%", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("0.000031", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("-", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("-", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("4", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("资⾦", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("1.10%", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("0.000031", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("-", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("-", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("合计", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setColspan(7);table.addCell(cell);cell = new PdfPCell(new Phrase("325.01", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("会计制单:", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.disableBorderSide(14);cell.setColspan(4);table.addCell(cell);cell = new PdfPCell(new Phrase("复核:", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.disableBorderSide(14);cell.setColspan(4);table.addCell(cell);table.setSpacingBefore(16f);document.add(table);//下⼀页document.newPage();//段落Paragraph p1 = new Paragraph("下⼀页测试结算单", new Font(abf, 12, Font.BOLD)); p1.setAlignment(Paragraph.ALIGN_CENTER);document.add(p1);//表格table = new PdfPTable(8);//numcolumns:列数table.setSpacingBefore(16f);//表格与上⾯段落的空隙//表格列创建并赋值cell = new PdfPCell(new Phrase("单位名称:测试有限公司", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);//居中cell.disableBorderSide(13);//去除左右上边框,保留下边框cell.setColspan(4);//合并列数table.addCell(cell);cell = new PdfPCell(new Phrase("⽇期:2020-06-05", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.disableBorderSide(13);cell.setColspan(3);table.addCell(cell);cell = new PdfPCell(new Phrase("单位(元)", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.disableBorderSide(13);cell.setColspan(1);table.addCell(cell);//⾸⾏cell = new PdfPCell(new Phrase("期间", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setColspan(2);cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("⽇利率", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("基数", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("利息", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("起始⽇:2020-04-26\n" +"结束⽇:2020-05-25", font));cell.setPadding(16f);cell.setVerticalAlignment(Element.ALIGN_CENTER);cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setColspan(2);table.addCell(cell);cell = new PdfPCell(new Phrase("4", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("资⾦", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("1.10%", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("0.000031", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("10598164.91", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("325.01", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("合计", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setColspan(7);table.addCell(cell);cell = new PdfPCell(new Phrase("325.01", font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);cell = new PdfPCell(new Phrase("会计制单:", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.disableBorderSide(14);cell.setColspan(4);table.addCell(cell);cell = new PdfPCell(new Phrase("复核:", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.disableBorderSide(14);cell.setColspan(4);table.addCell(cell);table.setSpacingBefore(16f);document.add(table);document.close();}}3.上述代码中对于IText字体设置可改:使⽤iText中的字体例:BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);使⽤Windows系统⾃带的字体例:BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 使⽤外部引⼊的资源字体(例:BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);4.上述代码⽣成的表格边框隐藏⽅式:1:代表上边框2:代表下边框4:代表左边框8:代表右边框//需要隐藏那些边框就把对应的值加起来,得到的和就是要设置的值//⽐如要隐藏左右边框就是 4+8=12cell.disableBorderSide(12);//左右没了具体例⼦://隐藏上边框cell.disableBorderSide(1);//隐藏下边框cell.disableBorderSide(2);//隐藏左、上边框cell.disableBorderSide(5);//隐藏左、下边框cell.disableBorderSide(6);//隐藏左、上、下边框cell.disableBorderSide(7);//隐藏右边框cell.disableBorderSide(8);//隐藏右、上边框cell.disableBorderSide(9);//隐藏右、下边框cell.disableBorderSide(10);//隐藏右、上、下边框cell.disableBorderSide(11);//隐藏左、右边框cell.disableBorderSide(12);//左右没了 //隐藏上、左、右边框cell.disableBorderSide(13);//只剩下 //隐藏下、左、右边框cell.disableBorderSide(14);//只剩上//隐藏全部cell.disableBorderSide(15);//全没了5.运⾏展⽰效果例:。

java office转pdf 方案

java office转pdf 方案

java office转pdf 方案1. 引言1.1 概述本文将介绍在Java中将Office文件转换为PDF的方案。

随着企业办公自动化程度的提高,很多业务场景都需要将各种格式的办公文档转换为PDF格式,以便于共享、打印和存档。

Java作为一种广泛使用的编程语言,在处理办公文档转换方面具有较强的能力和灵活性。

因此,本文将介绍三个常用的方案:使用Apache POI库、使用JasperReports库以及使用iText库来实现将Office文件转换为PDF文件。

1.2 文章结构本文将分为五个部分进行介绍。

首先是引言部分,对文章的背景和目标进行概述。

接下来是转换方案一,详细介绍使用Apache POI库进行Office文件转换的实现步骤和示例代码。

然后是转换方案二,介绍使用JasperReports库实现该功能的步骤和示例代码。

最后是转换方案三,讲解如何利用iText库来实现Office文件到PDF的转换,并提供相应的示例代码。

在文章结尾处我们会总结各种方案的优缺点并提出设计选择建议,同时展望未来发展态势。

1.3 目的本文的目的在于帮助开发人员了解在Java中实现Office文件到PDF的转换方案,以及选择适合自己项目需求的最佳方案。

通过对这三种常用库进行介绍和比较,读者可以全面了解它们的优点和使用场景,从而更加准确地决策选择哪个方案来完成转换任务。

此外,我们还将对未来发展态势进行一定的展望,以帮助读者更好地规划自己项目中的文档转换需求。

2. 转换方案一:2.1 使用Apache POI库:Apache POI是一个用于创建、读取和修改Microsoft Office格式文件(如Word、Excel、PowerPoint)的Java库。

通过使用Apache POI,我们可以将Java Office 文件转换为PDF格式。

2.2 实现步骤:要使用Apache POI实现Java Office文件转换为PDF,需要按照以下步骤进行操作:步骤1:导入所需的Apache POI库和相关依赖。

链接转pdf java

链接转pdf java

在Java中将链接转换为PDF文件,通常需要使用一些第三方库,如Jsoup 用于抓取网页内容,然后使用iText或PDFBox等库将HTML内容转换为PDF 格式。

以下是一个基本的步骤示例:
1. 添加依赖项:
对于Jsoup:在你的Maven或Gradle构建文件中添加Jsoup依赖。

对于iText或PDFBox:添加相应的PDF生成库依赖。

2. 使用Jsoup抓取网页内容:
java代码:
3. 将HTML内容转换为PDF:
如果使用iText:
java代码:
如果使用PDFBox:
java代码:
注意:上述PDFBox示例中并没有直接将HTML转换为PDF,因为PDFBox 本身并不直接支持HTML到PDF的转换。

你可能需要结合使用Flying Saucer 或Apache FOP等其他库来实现这一功能。

请根据你的具体需求和环境选择合适的库和方法进行链接转PDF的操作。

同时,由于网络抓取和PDF生成可能会涉及到版权和许可问题,确保你在进行此类操作时遵守相关法律法规和网站的使用条款。

Java生成PDF文档(表格、列表、添加图片等)

Java生成PDF文档(表格、列表、添加图片等)

Java⽣成PDF⽂档(表格、列表、添加图⽚等)1 import java.awt.Color;2 import java.io.FileOutputStream;3 import com.lowagie.text.Cell;4 import com.lowagie.text.Chapter;5 import com.lowagie.text.Document;6 import com.lowagie.text.Font;7 import com.lowagie.text.Image;8 import com.lowagie.text.List;9 import com.lowagie.text.ListItem;10 import com.lowagie.text.PageSize;11 import com.lowagie.text.Paragraph;12 import com.lowagie.text.Section;13 import com.lowagie.text.Table;14 import com.lowagie.text.pdf.BaseFont;15 import com.lowagie.text.pdf.PdfWriter;16 public class ITextDemo {17 public boolean iTextTest() {18 try {19 /** 实例化⽂档对象 */20 Document document = new Document(PageSize.A4, 50, 50, 50, 50);21 /** 创建 PdfWriter 对象 */22 PdfWriter.getInstance(document,// ⽂档对象的引⽤23 new FileOutputStream("d://ITextTest.pdf"));//⽂件的输出路径+⽂件的实际名称24 document.open();// 打开⽂档25 /** pdf⽂档中中⽂字体的设置,注意⼀定要添加iTextAsian.jar包 */26 BaseFont bfChinese = BaseFont.createFont("STSong-Light",27 "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);28 Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);//加⼊document:29 /** 向⽂档中添加内容,创建段落对象 */30 document.add(new Paragraph("First page of the document."));// Paragraph添加⽂本31 document.add(new Paragraph("我们是害⾍", FontChinese));32 /** 创建章节对象 */33 Paragraph title1 = new Paragraph("第⼀章", FontChinese);34 Chapter chapter1 = new Chapter(title1, 1);35 chapter1.setNumberDepth(0);36 /** 创建章节中的⼩节 */37 Paragraph title11 = new Paragraph("表格的添加", FontChinese);38 Section section1 = chapter1.addSection(title11);39 /** 创建段落并添加到⼩节中 */40 Paragraph someSectionText = new Paragraph("下⾯展⽰的为3 X 2 表格.",41 FontChinese);42 section1.add(someSectionText);43 /** 创建表格对象(包含⾏列矩阵的表格) */44 Table t = new Table(3, 2);// 2⾏3列45 t.setBorderColor(new Color(220, 255, 100));46 t.setPadding(5);47 t.setSpacing(5);48 t.setBorderWidth(1);49 Cell c1 = new Cell(new Paragraph("第⼀格", FontChinese));50 t.addCell(c1);51 c1 = new Cell("Header2");52 t.addCell(c1);53 c1 = new Cell("Header3");54 t.addCell(c1);55 // 第⼆⾏开始不需要new Cell()56 t.addCell("1.1");57 t.addCell("1.2");58 t.addCell("1.3");59 section1.add(t);60 /** 创建章节中的⼩节 */61 Paragraph title13 = new Paragraph("列表的添加", FontChinese);62 Section section3 = chapter1.addSection(title13);63 /** 创建段落并添加到⼩节中 */64 Paragraph someSectionText3 = new Paragraph("下⾯展⽰的为列表.", FontChinese);65 section3.add(someSectionText3);66 /** 创建列表并添加到pdf⽂档中 */67 List l = new List(true, true, 10);// 第⼀个参数为true,则创建⼀个要⾃⾏编号的列表,68 // 如果为false则不进⾏⾃⾏编号69 l.add(new ListItem("First item of list"));70 l.add(new ListItem("第⼆个列表", FontChinese));71 section3.add(l);72 document.add(chapter1);73 /** 创建章节对象 */74 Paragraph title2 = new Paragraph("第⼆章", FontChinese);75 Chapter chapter2 = new Chapter(title2, 1);76 chapter2.setNumberDepth(0);77 /** 创建章节中的⼩节 */78 Paragraph title12 = new Paragraph("png图⽚添加", FontChinese);79 Section section2 = chapter2.addSection(title12);80 /** 添加图⽚ */81 section2.add(new Paragraph("图⽚添加: 饼图", FontChinese));82 Image png = Image.getInstance("D:/pie.png");//图⽚的地址83 section2.add(png);84 document.add(chapter2);85 document.close();86 return true;87 } catch (Exception e2) {88 System.out.println(e2.getMessage());89 }90 return false;91 }92 public static void main(String args[]) {93 System.out.println(new ITextDemo().iTextTest());94 }95 }。

java根据模板生成pdf文件并导出

java根据模板生成pdf文件并导出

java根据模板生成pdf文件并导出首先你的制作一个pdf模板:1.先用word做出模板界面2.文件另存为pdf格式文件3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:/s/1pL2klzt)如果无法下载可以联系博主。

4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。

如果你想修改fill1等信息,可以进行修改)5.做完上面的工作后,直接"另存为"将pdf存储就可以****************************************************************** ***********以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序:1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖[html] view plain copy print?&lt;!--https:///artifact/com.itextpdf/itextpdf--&gt; &lt;dependency&gt;&lt;groupId&gt;com.itextpdf&lt;/groupId&gt;&lt;artifactId&gt;itextpdf&lt;/artifactId&gt;&lt;version&gt;5.5.10&lt;/version&gt;&lt;/dependency&gt; [html] view plain copy print?&lt;!-- https:///artifact/com.itextpdf/itext-asian --&gt; &lt;span style="white-space:pre;"&gt;&lt;/span&gt;&lt;dependency&gt; &lt;spanstyle="white-space:pre;"&gt; &lt;/span&gt;&lt;groupId&gt;com.itextpdf&lt;/groupId&gt; &lt;span style="white-space:pre;"&gt; &lt;/span&gt;&lt;artifactId&gt;itext-asian&lt;/artifactId&gt; &lt;span style="white-space:pre;"&gt; &lt;/span&gt;&lt;version&gt;5.2.0&lt;/version&gt; &lt;spanstyle="white-space:pre;"&gt;&lt;/span&gt;&lt;/dependency&gt; 2.下面就是生成pdf代码了[java] view plain copy print?importjava.io.ByteArrayOutputStream; importjava.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; importcom.itextpdf.text.DocumentException; importcom.itextpdf.text.pdf.AcroFields; importcom.itextpdf.text.pdf.PdfCopy; importcom.itextpdf.text.pdf.PdfImportedPage; importcom.itextpdf.text.pdf.PdfReader; importcom.itextpdf.text.pdf.PdfStamper; public class Snippet { // 利用模板生成pdf public static void fillTemplate() { // 模板路径String templatePath = "E:/测试3.pdf"; // 生成的新文件路径String newPDFPath = "E:/ceshi.pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(newPDFPath);// 输出流reader = new PdfReader(templatePath);// 读取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();String[] str = { "123456789", "TOP__ONE", "男","1991-01-01", "130222111133338888", "河北省保定市" };int i = 0; java.util.Iterator&lt;String&gt; it = form.getFields().keySet().iterator(); while (it.hasNext()) { String name =it.next().toString();System.out.println(name);form.setField(name, str[i++]); }stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage =copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage);doc.close(); } catch (IOException e){ System.out.println(1); } catch (DocumentException e){ System.out.println(2); }} public static void main(String[] args){ fillTemplate(); } } 3.运行结果如下****************************************************************** ***如果没有模板,就行自己生成pdf文件保存到磁盘:下面的方法可以实现:[java] view plain copy print?public static void test1(){//生成pdf Document document = new Document();try { PdfWriter.getInstance(document, new FileOutputStream("E:/1.pdf"));document.open(); document.add(new Paragraph("hello word"));document.close(); } catch (Exception e){ System.out.println("file create exception"); } } 但是上述方法中包含中文时就会出现问题,所以可以使用下面这行代码实现,所使用的jar包,上面的两个依赖都包含了:[java] view plain copy print?public static voidtest1_1(){ BaseFont bf; Font font = null; try { bf =BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//创建字体font = new Font(bf,12);//使用字体} catch (Exception e){ e.printStackTrace(); }Document document = new Document(); try{ PdfWriter.getInstance(document, new FileOutputStream("E:/2.pdf"));document.open(); document.add(new Paragraph("hello word 你好世界",font));//引用字体document.close(); } catch (Exception e){ System.out.println("file create exception"); } }****************************************************************** ********************当然,如果你想弄的炫一点,想实现其他字体,可以去网上搜字体文件然后下载下来,放到项目里,我这里是在项目里新建了一个font文件夹,将字体文件放到了里面。

java根据模板导出pdf

java根据模板导出pdf

java根据模板导出pdf 在⽹上看了⼀些Java⽣成pdf⽂件的,写的有点乱,有的不⽀持写⼊中⽂字体,有的不⽀持模板,有的只是随便把数据放⾥⾯⽣成⽂件,完全不考虑数据怎样放置的以及以后的维护性,想想还是⾃⼰总结⼀个完全版的导出pdf的⼯具类吧,总结⼀下⽹上的⽅法,加上⾃⼰的完善。

本次完善综合特点: ⼀对⼀,点对点的给对应的地⽅写值,⽐如模板⾥⾯放了个name标识,在程序⾥把“张三”赋给name,那么输出的pdf⾥⾯name的地⽅就变成了张三,准确⽅便快捷 ⽀持中⽂,可以使⽤⾃⼰下载的字体。

⽀持图⽚:图⽚的⼤⼩范围可以在模板随意调,⽣成出来的图⽚不会超过范围。

⽽且不需要根据坐标去算,程序⾥⾯⾃动计算的。

⽀持多页模板,即使是好⼏页的模板,只要每个变量对应的范围确定好了,⽣成出来的格式就不会错乱。

详细步骤和完整代码在下⾯。

先放个效果图:下⾯是详细的步骤:1.⾸先,新建⼀个word⽂档,内容如下,另存为pdf格式,我的命名:mytest.pdf。

2.⽤Adobe Acrobat Pro 打开刚刚制作的pdf⽂件。

如下图:3.点击创建-->PDF表单-->使⽤当前⽂档-->使⽤当前⽂档,⼀直点下⼀步完成。

(有的版本Adobe Acrobat Pro软件右边有准备表单,直接点击准备表单是同样的效果)4.上⾯好多给框,双击⿊框可以修改名称,还可以设置字体⼤⼩,如下图5.图⽚的地⽅没有⿊框,我们可以在空⽩处点击右键,选择⽂本域,给图⽚的域起名为img。

只要保证和程序⾥⾯的名字⼀直即可。

7.pom.xml⽂件:<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version></dependency>8.⼯具类⽂件:我的模板是放在C盘下⾯的,所以路径是C:/mytest.pdf,另外,我还在C盘下⾯放了⼀张图⽚ c:/50336.jpg ,字体使⽤的是系统的字体,也可以⾃⼰到⽹上下载⾃⼰喜欢的字体⽂件,路径指向⾃⼰下载的字体⽂件路径即可package wp.util;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import com.itextpdf.text.*;import com.itextpdf.text.pdf.*;/*** Created by wangpeng on 2018/02/01.*/public class PdfUtils {// 利⽤模板⽣成pdfpublic static void pdfout(Map<String,Object> o) {// 模板路径String templatePath = "C:/mytest.pdf";// ⽣成的新⽂件路径String newPDFPath = "C:/testout1.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 = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//⽂字类的内容处理Map<String,String> datemap = (Map<String,String>)o.get("datemap");form.addSubstitutionFont(bf);for(String key : datemap.keySet()){String value = datemap.get(key);form.setField(key,value);}//图⽚类的内容处理Map<String,String> imgmap = (Map<String,String>)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 = new Document();Font font = new Font(bf, 32);PdfCopy copy = new PdfCopy(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 void main(String[] args) {Map<String,String> map = new HashMap();map.put("name","张三");map.put("creatdate","2018年1⽉1⽇");map.put("weather","晴朗");map.put("sports","打⽻⽑球");Map<String,String> map2 = new HashMap();map2.put("img","c:/50336.jpg");Map<String,Object> o=new HashMap();o.put("datemap",map);o.put("imgmap",map2);pdfout(o);}}9.效果图如下:如有新的需求功能需要完善,我会后续补充在这⾥。

Java导出Pdf格式表单

Java导出Pdf格式表单

Java导出Pdf格式表单前⾔ 作为开发⼈员,⼯作中难免会遇到复杂表单的导出,接下来介绍⼀种通过Java利⽤模板便捷导出Pdf表单的⽅式模拟需求 需求:按照下⾯格式导出pdf格式的学⽣成绩单准备⼯作Excel软件Adobe Acrobat XI Pro软件模板制作第⼀步:利⽤Excel制作出上述表单,设置好字体、⾏⾼、列宽等,如下:第⼆步:按照给定模板做好Excel表单后,删除需要后期填充的数据第三步:打开Adobe Acrobat XI Pro软件,开始依据Excel模板制作PDF模板1、单击创建、选择创建表单按钮2、选择从现有⽂档创建,选择前⾯制作的Excel模板3、点击⼯具,编辑表单4、此时表单中只有⼀个⽂本域,我们可以点击添加新的⽂本域的形式来添加表头和结尾。

也可以在pdf上添加⼀些其他控件。

制作完成后如下:5、可以通过⿏标在域中右键和属性中修改域的位置,字体、颜⾊、换⾏等6、将制作好的表单保存项⽬实现第⼀步:创建基于maven的Java项⽬第⼆步:引⼊itext的pom依赖<!-- itextpdf依赖 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>第六步:将上⾯制作的pdf模板放到Resources⽬录下,编写PdfUtils⼯具类package com.whw.pdf;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.PageSize;import com.itextpdf.text.pdf.*;import java.io.*;import java.util.ArrayList;public class PdfUtils {public static void exportMapMZydPdf(String templatePath,String savePath,String fileName) throws DocumentException {ByteArrayOutputStream byteArrayOutputStream = null;PdfReader pdfReader = null;FileOutputStream fileOutputStream=null;try {fileOutputStream=new FileOutputStream(savePath+"//"+fileName);byteArrayOutputStream = new ByteArrayOutputStream();pdfReader = new PdfReader(templatePath);PdfStamper pdfStamper = new PdfStamper(pdfReader, byteArrayOutputStream);//获取模板所有域参数AcroFields acroFields = pdfStamper.getAcroFields();//解决中⽂字体不显⽰的问题BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontArrayList = new ArrayList<BaseFont>();fontArrayList.add(baseFont);acroFields.setSubstitutionFonts(fontArrayList);acroFields.setField("head", "xxx同学成绩单");acroFields.setField("yuwen", "116");acroFields.setField("shuxue", "115");acroFields.setField("yingyu", "110");acroFields.setField("zhengzhi", "89");acroFields.setField("lishi", "90");acroFields.setField("shengwu", "85");acroFields.setField("dili", "83");acroFields.setField("yinyue", "78");acroFields.setField("tiyu", "88");acroFields.setField("meishu", "80");acroFields.setField("xiguan", "优秀");acroFields.setField("nengli", "优秀");acroFields.setField("xuexi", "优秀");acroFields.setField("jl", "优秀");acroFields.setField("weisheng", "良好");acroFields.setField("pingyu", " 在校表现优秀。

Java使用IText(VM模版)导出PDF,IText导出word(二)

Java使用IText(VM模版)导出PDF,IText导出word(二)

Java使⽤IText(VM模版)导出PDF,IText导出word(⼆)===============action===========================//退款导出wordpublic void exportWordTk() throws IOException{Long userId=(Long)ServletActionContext.getContext().getSession().get(Constant.SESSION_USER_ID);//获取⽣成Pdf需要的⼀些路径String tmPath=ServletActionContext.getServletContext().getRealPath("download/template");//vm 模板路径String wordPath=ServletActionContext.getServletContext().getRealPath("download/file");//⽣成word路径//wordPath+"/"+userId+"_"+fk+".doc"//数据Map map=new HashMap();//velocity模板中的变量map.put("date1",this.fk);map.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()));String newFile=wordPath+"/tk_word_"+userId+".doc";File file=new File(newFile);if(!file.exists()){//设置字体,⽀持中⽂显⽰new PdfUtil().addFontAbsolutePath(ServletActionContext.getServletContext().getRealPath("dzz/pdfFont/simsun.ttf"));//这个字体需要⾃⼰去下载PdfUtil.createByVelocityPdf(tmPath,"tk_word.vm", wordPath+"/tk_word_"+userId+".pdf", map);//导出PDFPdfUtil.createByVelocityDoc(tmPath,"tk_word.vm",newFile, map);//导出word}sendMsgAjax("dzz/download/file/tk_word_"+userId+".doc");}=================vm ⽂件模板(tk_word.vm)=====================<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title><style type="text/css">body, button, input, select, textarea {color: color:rgb(0,0,0);font: 14px/1.5 tahoma,arial,宋体,sans-serif;}p{margin:0;padding:0;}.title{border-bottom:1px solid rgb(0,0,0);margin:0;padding:0;width:85%;height:25px;}li{list-style:none;}.li_left li{text-align:left;line-height:47px;font-size:14pt;}.li_left{width:610px;}.fnt-21{font-size:16pt;}table{width:90%;/*argin-left:25px;*/}div_cls{width:100%;text-align:center;}</style></head><body style="font-family: songti;width:100%;text-align:center;"><div style="text-align:center;"><b class="fnt-21">&nbsp;&nbsp;本组评审结果清单</b> </div> <table border="1" cellpadding="0" cellspacing="0" style="width:90%;margin-left:25px;"> <tr><td style="width:20%" align="center">申报单位</td><td style="width:10%" align="center">申报经费(万元)</td></tr></table><br/><div><ul style="float:right;margin-right:40px;"><li>$date</li><!--获取后天封装的数据--></ul></div></body></html>====================⼯具类======================package com.qgc.dzz.util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import .URL;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.UUID;import org.apache.struts2.ServletActionContext;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.VelocityEngine;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Font;import com.lowagie.text.Image;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.BaseFont;import com.lowagie.text.pdf.PdfImportedPage;import com.lowagie.text.pdf.PdfReader;import com.lowagie.text.pdf.PdfWriter;public class PdfUtil {private static List<String> fonts = new ArrayList();//字体路径/*** 使⽤vm导出word* @param localPath VM 模板路径* @param templateFileName vm 模板名称* @param docPath ⽣成⽂件的路径,包含⽂件如:d://temp.doc* @param map 参数,传递到vm* @return*/public static boolean createByVelocityDoc(String localPath, String templateFileName, String docPath, Map<String, Object> map) {try{createFile(localPath,templateFileName,docPath, map);return true;} catch (Exception e) {e.printStackTrace();}return false;}/*** 导出pdf* @param localPath VM 模板路径* @param templateFileName vm 模板名称* @param pdfPath ⽣成⽂件的路径,包含⽂件如:d://temp.pdf* @param map 参数,传递到vm* @return*/public static boolean createByVelocityPdf(String localPath, String templateFileName, String pdfPath, Map<String, Object> map) {try{String htmlPath = pdfPath + UUID.randomUUID().toString() + ".html";createFile(localPath, templateFileName, htmlPath, map);//⽣成html 临时⽂件HTML2OPDF(htmlPath, pdfPath, fonts);//html转成pdfFile file = new File(htmlPath);file.delete();return true;} catch (Exception e) {e.printStackTrace();}return false;}/*** 合并PDF* @param writer* @param document* @param reader* @throws DocumentException*/public void addToPdfUtil(PdfWriter writer, Document document,PdfReader reader) throws DocumentException {int n = reader.getNumberOfPages();Rectangle pageSize = document.getPageSize();float docHeight = pageSize.getHeight();float docWidth = pageSize.getWidth();for (int i = 1; i <= n; i++) {document.newPage();PdfImportedPage page = writer.getImportedPage(reader, i);Image image = Image.getInstance(page);float imgHeight = image.getPlainHeight();float imgWidth = image.getPlainWidth();if (imgHeight < imgWidth) {float temp = imgHeight;imgHeight = imgWidth;imgWidth = temp;image.setRotationDegrees(90.0F);}if ((imgHeight > docHeight) || (imgWidth > docWidth)) {float hc = imgHeight / docHeight;float wc = imgWidth / docHeight;float suoScale = 0.0F;if (hc > wc)suoScale = 1.0F / hc * 100.0F;else {suoScale = 1.0F / wc * 100.0F;}image.scalePercent(suoScale);}image.setAbsolutePosition(0.0F, 0.0F);document.add(image);}}/*** html 转成 pdf ⽅法* @param htmlPath html路径* @param pdfPath pdf路径* @param fontPaths 字体路径* @throws Exception*/public static void HTML2OPDF(String htmlPath, String pdfPath,List<String> fontPaths)throws Exception{String url = new File(htmlPath).toURI().toURL().toString();//获取⽣成html的路径OutputStream os = new FileOutputStream(pdfPath);//创建输出流ITextRenderer renderer = new ITextRenderer();//itext 对象ITextFontResolver fontResolver = renderer.getFontResolver();//字体// //⽀持中⽂显⽰字体// fontResolver.addFont(ServletActionContext.getServletContext().getRealPath("dzz/pdfFont/simsun_0.ttf"), // BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);if ((fontPaths != null) && (!fontPaths.isEmpty())) {URL classPath = PdfUtil.class.getResource("/");for (String font : fontPaths) {if (font.contains(":"))fontResolver.addFont(font, "Identity-H", false);else {fontResolver.addFont(classPath + "/" + font, "Identity-H",false);}}}renderer.setDocument(url);//设置html路径yout();renderer.createPDF(os);//html转换成pdfSystem.gc();os.close();System.gc();}public static boolean createFile(String localPath, String templateFileName,String newFilePath, Map<String, Object> map){try{VelocityEngine engine = new VelocityEngine();engine.setProperty("file.resource.loader.path", localPath);//指定vm路径Template template = engine.getTemplate(templateFileName, "UTF-8");//指定vm模板VelocityContext context = new VelocityContext();//创建上下⽂对象if (map != null){Object[] keys = map.keySet().toArray();for (Object key : keys) {String keyStr = key.toString();context.put(keyStr, map.get(keyStr));//传递参数到上下⽂对象}}PrintWriter writer = new PrintWriter(newFilePath, "UTF-8");//写⼊参数到vm template.merge(context, writer);writer.flush();writer.close();return true;} catch (Exception e) {e.printStackTrace();}return false;}public static Font FONT = getChineseFont();public static BaseFont BSAE_FONT = getBaseFont();/*** ⽀持显⽰中⽂* @return*/public static Font getChineseFont() {BaseFont bfChinese = null;try {bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Font fontChinese = new Font(bfChinese);return fontChinese;}public static BaseFont getBaseFont() {BaseFont bfChinese = null;try {bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return bfChinese;}public void addFontAbsolutePath(String path) {this.fonts.add(path);}public void addFontClassPath(String path) {this.fonts.add(path);}public List<String> getFonts() {return this.fonts;}public void setFonts(List<String> fonts) {this.fonts = fonts;}}。

Java HTML直接导出PDF

Java HTML直接导出PDF

Java HTML直接导出PDFJava HTML直接导出PDF对于java中如何从html中直接导出pdf,有很多的开源代码,这里个人用itext转。

首先需要的包有:core-renderer-1.0.jarcore-renderer-R8pre1.jarcore-renderer.jariText-2.0.8.jarjtidy-4aug2000r7-dev.jarTidy.jariTextAsian.jarjava代码的话就比较简单了。

具体是先用Tidy将html转换为xhtml,将xhtml转换为其它各种格式的。

虽然在转化到pdf时也是用的iText。

代码如下:Java代码//struts1.x中Java代码elseif("Html2Pdf".equalsIgnoreCase(action)){ exportPdfF ile("http://localhost:8080/jsp/test.jsp"); return null; } // 导出pdf add by huangt 2012.6.1 public File exportPdfFile(String urlStr) throws BaseException{ // String outputFile = this.fileRoot + "/" +// ServiceConstants.DIR_PUBINFO_EXPORT + "/" + getFileName() + ".pdf"; String outputFile = "d:/test3.pdf"; OutputStream os; try { os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer();String str = getHtmlFile(urlStr);renderer.setDocumentFromString(str); ITextFontResolver fontResolver =renderer.getFontResolver();fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc",B aseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",Base Font.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字yout();renderer.createPDF(os);System.out.println("转换成功!"); os.flush(); os.close(); return newFile(outputFile); } catch (FileNotFoundException e) { // logger.error("不存在文件!" +e.getMessage()); throw new BaseException(e); } catch (DocumentExceptione) { // logger.error("生成pdf时出错了!" + e.getMessage()); throw new BaseException(e); } catch (IOException e){ // logger.error("pdf出错了!" +e.getMessage()); throw new BaseException(e); } } // 读取页面内容add by huangt 2012.6.1 public String getHtmlFile(String urlStr) throws BaseException{ URL url; try { if (urlStr.indexOf("?") != -1) { urlStr = urlStr + "&amp;locale=" + LocaleContextHolder.getLocale().toString();} else { urlStr = urlStr + "?locale="+LocaleContextHolder.getLocale().toString();} url = new URL(urlStr); URLConnection uc = url.openConnection();InputStream is = uc.getInputStream();Tidy tidy = new Tidy(); OutputStream os2 = new ByteArrayOutputStream();tidy.setXHTML(true); // 设定输出为xhtml(还可以输出为xml)tidy.setCharEncoding(Configuration.UTF8); // 设定编码以正常转换中文tidy.setTidyMark(false); // 不设置它会在输出的文件中给加条meta信息tidy.setXmlPi(true); // 让它加上&lt;?xml version="1.0"?&gt; tidy.setIndentContent(true); // 缩进,可以省略,只是让格式看起来漂亮一些tidy.parse(is, os2);is.close(); // 解决乱码--将转换后的输出流重新读取改变编码String temp; StringBuffer sb = new StringBuffer();BufferedReader in = new BufferedReader(new InputStreamReader( new ByteArrayInputStream( (( ByteArrayOutputStream) os2).toByteArray()),"utf-8")); while ((temp = in.readLine()) != null){ sb.append(temp); } return sb.toString(); } catch (IOException e) { // logger.error("读取客户端网页文本信息时出错了" + e.getMessage()); throw new BaseException(e); } }为了解决包的问题,加上Maven &lt;!-- pdf导出--&gt;Xml代码&lt;dependency&gt;&lt;groupId&gt;com.lowagie&lt;/groupId&gt;&lt;artifactId&gt;itext&lt;/artifactId&gt;&lt;version&gt;2.1.7&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt;&lt;groupId&gt;org.xhtmlrenderer.flyingsaucer&lt;/groupId& gt; &lt;artifactId&gt;pdf-renderer&lt;/artifactId&gt;&lt;version&gt;1.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt;&lt;groupId&gt;jtidy&lt;/groupId&gt;&lt;artifactId&gt;jtidy&lt;/artifactId&gt;&lt;version&gt;4aug2000r7-dev&lt;/version&gt;&lt;type&gt;jar&lt;/type&gt;&lt;scope&gt;compile&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt;&lt;groupId&gt;net.sf.barcode4j&lt;/groupId&gt;&lt;artifactId&gt;barcode4j-light&lt;/artifactId&gt;&lt;version&gt;2.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt;&lt;groupId&gt;avalon-framework&lt;/groupId&gt;&lt;artifactId&gt;avalon-framework-impl&lt;/artifactId&gt; &lt;version&gt;4.2.0&lt;/version&gt; &lt;/dependency&gt;&lt;!-- pdf --&gt;另外附上稍微复杂的PDFUtils.java文件,由于没时间就不做整理解释了!见下载附件!。

openoffice java 转pdf

openoffice java 转pdf

openoffice java 转pdf将OpenOffice与Java结合使用以将文档转换为PDF的过程可以分为几个步骤。

以下是一个基本的指南:1.安装OpenOffice:确保已安装OpenOffice。

可以从OpenOffice官网下载最新版本。

2.配置OpenOffice服务:OpenOffice需要作为一个服务运行,以便从Java程序中访问它。

可以通过命令行启动OpenOffice服务,如下所示:3.bash复制代码path/to/openoffice/program/soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;"这将启动OpenOffice作为服务,并监听端口8100。

3. 使用Java代码连接OpenOffice:接下来,您需要使用Java代码连接到OpenOffice服务。

这可以通过Socket连接完成。

以下是一个示例代码片段:java复制代码import java.io.File;import java.io.IOException;import .Socket;import java.util.logging.Logger;public class OpenOfficeConnection {private static final Logger LOGGER =Logger.getLogger(OpenOfficeConnection.class.getName());private static final String HOST = "127.0.0.1";private static final int PORT = 8100;private Socket connection;private StringBuilder response = new StringBuilder();public OpenOfficeConnection() throws IOException {connection = new Socket(HOST, PORT);}public void executeCommand(String command) {// Send command to OpenOffice and read response}}4.执行转换命令:一旦连接到OpenOffice服务,就可以发送命令来执行文档转换。

Java 导出PDF文件三个实列

Java 导出PDF文件三个实列

Java 导出PDF文件三个实列一、直接导出成PDFJava代码1. import java.io.FileNotFoundException;2. import java.io.FileOutputStream;3.4. import com.itextpdf.text.Document;5. import com.itextpdf.text.DocumentException;6. import com.itextpdf.text.Paragraph;7. import com.itextpdf.text.pdf.PdfWriter;8.9. public class ItextProduce {10.11. public static void main(String[] args) {12. Document doc = null;13. try {14. doc = new Document();15. PdfWriter.getInstance(doc, new FileOutputStream("C:\\itext.pdf"));16. doc.open();17. doc.add(new Paragraph("Hello World"));18. } catch (FileNotFoundException e) {19. e.printStackTrace();20. } catch (DocumentException e) {21. e.printStackTrace();22. } finally {23. doc.close();24. }25. }26.27. }二、由Servlet导出PDFJava代码1. package com.lwf.eus.servlet;2.3. import java.io.ByteArrayOutputStream;4. import java.io.IOException;6. import javax.servlet.ServletException;7. import javax.servlet.ServletOutputStream;8. import javax.servlet.http.HttpServlet;9. import javax.servlet.http.HttpServletRequest;10. import javax.servlet.http.HttpServletResponse;11.12. import com.itextpdf.text.Document;13. import com.itextpdf.text.DocumentException;14. import com.itextpdf.text.Paragraph;15. import com.itextpdf.text.pdf.PdfWriter;16.17. public class ListRocarsReportServlet extends HttpServlet {18. private static final long serialVersionUID = 1L;19.20. public ListRocarsReportServlet() {21. super();22. }23.24. protected void doGet(HttpServletRequest request,25. HttpServletResponse response) throws ServletException, IOException {26. this.doPost(request, response);27. }28.29. protected void doPost(HttpServletRequest request,30. HttpServletResponse response) throws ServletException, IOException {31. Document doc = new Document();32. ByteArrayOutputStreamba = new ByteArrayOutputStream();33. try {34. PdfWriter writer = PdfWriter.getInstance(doc, ba);35. doc.open();36. doc.add(new Paragraph("Hello World"));37.38. } catch (DocumentException e) {39. e.printStackTrace();40. }41. doc.close();42.43. response.setContentType("application/pdf");44. response.setContentLength(ba.size());45. ServletOutputStream out = response.getOutputStream();46. ba.writeTo(out);47. out.flush();48. }50. }三、由JSP导出成PDFJava代码1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"2. pageEncoding="ISO-8859-1"%>3. <%@ page4. import="java.io.ByteArrayOutputStream,5. com.itextpdf.text.Document,6. java.io.DataOutput,java.io.DataOutputStream,7. com.itextpdf.text.Paragraph,8. com.itextpdf.text.DocumentException,9. com.itextpdf.text.Document.*,10. com.itextpdf.text.pdf.*"%>11.12.13.14. <%15. response.setContentType("application/pdf");16. Document doc = new Document();17. ByteArrayOutputStreamba = new ByteArrayOutputStream();18.19. PdfWriter writer = PdfWriter.getInstance(doc, ba);20. doc.open();21. doc.add(new Paragraph("Hello World"));22. doc.close();23.24. DataOutput output = new DataOutputStream(response.getOutputStream());25. byte[] bytes = ba.toByteArray();26. response.setContentLength(bytes.length);27. for (inti = 0; i<bytes.length; i++) {28. output.writeByte(bytes[i]);29. }30. %>。

JAVA利用XMLWorkHelper导出PDF文件

JAVA利用XMLWorkHelper导出PDF文件

JAVA利⽤XMLWorkHelper导出PDF⽂件1.maven依赖⽂件<!-- 引⼊xmlWorkHelper --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.12</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.8</version></dependency>2.注意:根据html⽣成对应的pdf⽂件,html⾥⾯的标签必须是闭合的3.代码展⽰:public class PdfParserUtil {public static void pdfProcess(String htmlString, String pdfFileAimPath) throws Exception {Document document = new Document(PageSize.A4);PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(pdfFileAimPath));document.open();document.addAuthor("Soren");document.addCreator("Soren");document.addCreationDate();document.addTitle("测试⽣成pdf");XMLWorkerHelper helper = XMLWorkerHelper.getInstance();InputStream inputStream = null;helper.parseXHtml(pdfWriter, document, new ByteArrayInputStream(htmlString.getBytes("utf-8")), inputStream, Charset.forName("UTF-8")); document.close();}public static void main(String[] args) throws Exception {String path = "E:\\测试pad.pdf";String htmlString = "<!DOCTYPE html>\n" +"<html>\n" +" <head>\n" +" <meta charset=\"utf-8\"/>\n" +" <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"/>\n" +" <title>vue-test</title>\n" +" </head>\n" +" <body>\n" +" <div id=\"app\"></div>\n" +" <!-- built files will be auto injected -->\n" +" <h3>Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!!</h3>\n" +" <img src=\"C:\\Users\\wanglu\\Desktop\\go语⾔资料\\39通信过程的组包和解包.PNG\"/>\n" +" </body>\n" +"</html>";PdfParserUtil.pdfProcess(htmlString, path);}}。

java根据模板生成PDF文件

java根据模板生成PDF文件

java根据模板⽣成PDF⽂件1,⾸先下载,安装 Adobe Acrobat DC 步骤⽅法:https:///article/c14654138d7a9c0bfcfc4ce9.html2,新建⼀个Word模板,转成PDF格式3,通过 Adobe Acrobat DC⼯具打开保存好的PDF⽂件4,点击右边准备表单*** (模板中的fell_*,这些变量需要删除重新写⼀遍,不然数据存不进去)4.准备好模板以后开始写Java代码 ⾸先导⼊所需jar包5.具体代码实现 1,模板 private static final String TEMPLATE_PATH="/template/XXX.pdf"; 2.读取模板位置 //Award award=数据对象; //===award==为要导出的对象数据 PdfReader reader=new PdfReader(TEMPLATE_PATH); ByteArrayOutputStream bos=new ByteArrayOutPutStream(); PdfStamper ps=new PdfStamper(reader,bos); AcroFields s=ps.getAcroFields(); //=====解决中⽂不显⽰的问题,注意需要引⼊itext-asian.jar包 BaseFont bf=BaseFont.createFont("STSong-Lignt","UniGB-USC2-H",BaseFont.Not_EMBEDDEL); //====填充PDF //姓名 s.setFieldProperty("fill_1","testfont",bf,null); if(award,getName()!=null){ s.setField("fill_1",award.getName()); } //性别 s.setFieldProperty("fill_2","testfont",bf,null); if(award.getSex()!=null){ if(award.getSex()==0){ s.setField("fill_2","男"); }else if(award.getSex()==1){ s.setField("fill_2:,"⼥"); } } //⾝份证号 s.setFieldProperty("fill_3","testfont",bf,null); if(award.getNumberID() != null) { s.setField("fill_3",award.getNumberID()); } //模板中的图⽚的位置--图⽚ AcroFields from=ps.getAcroFields(); String imgpath=declaration.getFilePath(); int pageNo=from.getFieldPositions("Text1").get(0).page; Rectangle signRect=from.getFieldPosition("Text1").get(0).position; float x=signRect.getLeft(); float y=signRect.getBottom(); //根据路径读取图⽚ Image image=Image.getInstance(imgpath); //获取图⽚页⾯ PdfContentByte under=ps.getOverContent(pageNo); //图⽚⼤⼩⾃适应 image.scaleToFit(signRect.getWidth(),signRect.getHeight()); //添加图⽚ image.setAbsolutePostion(x,y); unser.addImage(image); ps.setFormFlattening(true); ps.close(); //收尾--重新⽣成PDF File file=new File(Contants.ROOT_PATH+Contants.BASE_PATH+declaration.getDocumentPath(); if(!file.exists()) { file.mkdirs(); } String path=Contants.ROOT_PATH+Contants.BASE_PATH+ declaration.getDocumentPath()+File.separatorChar+declaaaration.getName()+".pdf"; FileOutputStream fos=new FileOutputStream(path); fos.write(bos.toByteArray()); fos.flush(); fos.close(); return path; 修改字体⼤⼩⽅式 打开Adobe acrobat pro dc ,双击表单字段。

详解Java生成PDF文档方法

详解Java生成PDF文档方法

详解Java⽣成PDF⽂档⽅法最近项⽬需要实现PDF下载的功能,由于没有这⽅⾯的经验,从⽹上花了很长时间才找到相关的资料。

整理之后,发现有如下⼏个框架可以实现这个功能。

1. 开源框架⽀持1. iText,⽣成PDF⽂档,还⽀持将XML、Html⽂件转化为PDF⽂件;2. Apache PDFBox,⽣成、合并PDF⽂档;3. docx4j,⽣成docx、pptx、xlsx⽂档,⽀持转换为PDF格式。

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

2. 使⽤PDFBox⽣成PDF就像画图似的,⽂字和图像根据页⾯坐标画上去的,需要根据字数⼿动换⾏。

3. docx4j⽤来⽣成docx⽂档,提供了将WORD⽂档转换为PDF⽂档的功能,并不能直接⽣成PDF⽂档。

2. 实现⽅案—格式复杂格式简单数据量⼤docx4j+freemarker docx4j或PDFBox数据量⼩docx4j PDFBox2.1 纯数据⽣成PDF1.docx4j,适⽤于⽣成格式简单或格式复杂且数据量⼩的PDF⽂档;2.Apache PDFBox,适⽤于⽣成格式简单且数据量⼩的PDF⽂档。

1.docx4jdocx4j是⼀个开源Java库,⽤于创建和操作Microsoft Open XML(Word docx,Powerpoint pptx和Excel xlsx)⽂件。

它类似于Microsoft的OpenXML SDK,但适⽤于Java。

docx4j使⽤JAXB来创建内存中的对象表⽰,程序员需要花时间了解JAXB和Open XML⽂件结构。

// word对象WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();// ⽂档主体MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();// 换⾏符Br br = objectFactory.createBr();// 段落P p = objectFactory.createP();// 段落设置PPr ppr = objectFactory.createPPr();// ⽂字位置Jc jc = new Jc();jc.setVal(je);ppr.setJc(jc);// ⾏设置RPr rpr = objectFactory.createRPr();// 字体设置RFonts rFonts = objectFactory.createRFonts();rFonts.setAscii("Times New Roman");rFonts.setEastAsia("宋体");rpr.setRFonts(rFonts);// ⾏R r = objectFactory.createR();// ⽂本Text text = objectFactory.createText();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⼯具。

itextpdfJAVA输出PDF文档

itextpdfJAVA输出PDF文档

itextpdfJAVA输出PDF⽂档使⽤JAVA⽣成PDF的时候,还是有些注意事项需要处理的。

第⼀、中⽂问题,默认的itext是不⽀持中⽂的,想要⽀持,需要做些处理。

1、直接引⽤操作系统的中⽂字体库⽀持,由于此⽅案限制性强,⼜绑定了操作系统,所以此处不做实现,有兴趣可在⽹上搜索看看。

2、引⽤itext-asian.jar包的字体⽀持,代码稍后上。

itext pdf引⼊中⽂常见异常: com.itextpdf.text.DocumentException: Font 'STSongStd-Light' with 'UniGB-UCS2-H' is not recognized. 解决⽅案:a、引⼊操作系统字体;2、将字体维护进jar包中,如果没有,直接找到字体放⼊对应jar包中,如果是路径错误,则更改包路径;3、通过itext-asian.jar来加载中⽂包。

第⼆、表格中的设置,特别是上中下,左中右,不同的对象有不同的枚举实现,刚⼊⼿很容易混淆。

其外是前景⾊,背景⾊,表格颜⾊等等。

第三、输出图⽚,很容易报错。

itext pdf常见输出图⽚异常: An error exists on this page. Acrobat may not display the page correctly. Please contact the person who created the PDF document to correct the problem. 原因:PdfContentByte在addImage的时候需要在beginText()和endText()范围以外调⽤,否则⽣成的PDF就会报上述错误。

⽰例:1package com.itext.test;23import java.io.File;4import java.io.FileOutputStream;5import java.io.IOException;6import java.io.InputStream;7import java.util.ArrayList;8import java.util.List;9import java.util.Random;1011import com.itextpdf.text.BaseColor;12import com.itextpdf.text.Document;13import com.itextpdf.text.DocumentException;14import com.itextpdf.text.Element;15import com.itextpdf.text.Font;16import com.itextpdf.text.Image;17import com.itextpdf.text.PageSize;18import com.itextpdf.text.Paragraph;19import com.itextpdf.text.Rectangle;20import com.itextpdf.text.pdf.BarcodeQRCode;21import com.itextpdf.text.pdf.BaseFont;22import com.itextpdf.text.pdf.PdfContentByte;23import com.itextpdf.text.pdf.PdfGState;24import com.itextpdf.text.pdf.PdfPCell;25import com.itextpdf.text.pdf.PdfPTable;26import com.itextpdf.text.pdf.PdfPageEventHelper;27import com.itextpdf.text.pdf.PdfWriter;2829public class D {3031private static String path = "docs/"; // ⽣成PDF后的存放路径32private static final String logoPath = "logo.png";3334public static void main(String[] args) {35// T t = new T();36 initPDF(initData());37 }3839/**40 * 初始化PDF41 *42 * @param apis43*/44public static void initPDF(List<Api> apis) {45 File folder = new File(path);46if (!folder.exists())47 folder.mkdirs(); // 创建⽬录48 Document doc = null;49try {50// 中⽂字体,要有itext-asian.jar⽀持(默认的itext.jar是不⽀持中⽂的)51 BaseFont bfchinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);52 Rectangle pageSize = new Rectangle(PageSize.A4); // 页⾯⼤⼩设置为A453 doc = new Document(pageSize, 20, 20, 40, 40); // 创建doc对象并设置边距54 PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(folder.getAbsolutePath() + File.separator + "API⽂档.pdf"));55 writer.setPageEvent(new SdkPdfPageEvent());56 doc.open();57 doc.addAuthor("Ares-xby");58 doc.addSubject("SDK附属API⽂档");59 doc.addTitle("API⽂档");60 BaseColor borderColor = new BaseColor(90, 140, 200);61 BaseColor bgColor = new BaseColor(80, 130, 180);62for (Api api : apis) {63 PdfPTable table = new PdfPTable({0.25f, 0.25f, 0.25f, 0.25f});64// table.setWidthPercentage(100); // 设置table宽度为100%65// table.setHorizontalAlignment(PdfPTable.ALIGN_CENTER); // 设置table居中显⽰66for (int i = 0; i < api.getParams().size(); i++) {67if (i == 0) {68// row 169 table.addCell(createCell("API", bfchinese, borderColor, bgColor));70 table.addCell(createCell(api.getApiName(), 12, bfchinese, 3, null, borderColor, bgColor));71// row 272 table.addCell(createCell("描述", bfchinese, borderColor));73 table.addCell(createCell(api.getApiDesc(), 12, bfchinese, 3, null, borderColor));74 } else {75 table.addCell(createCell(api.getParams().get(i).getParamName(), 10, bfchinese, null, Paragraph.ALIGN_RIGHT, borderColor));76 table.addCell(createCell(api.getParams().get(i).getParamName(), 10, bfchinese, null, null, borderColor));77 table.addCell(createCell(api.getParams().get(i).getParamType(), 10, bfchinese, null, null, borderColor));78 table.addCell(createCell(api.getParams().get(i).getParamDesc(), 10, bfchinese, null, null, borderColor));79 }80 }81 doc.add(table);82 }83// ⼆维码84 BarcodeQRCode qrcode = new BarcodeQRCode("", 1, 1, null);85 Image qrcodeImage = qrcode.getImage();86 qrcodeImage.setAbsolutePosition(10, 600);87 qrcodeImage.scalePercent(200);88 doc.add(qrcodeImage);89 doc.close();90 System.out.println("init pdf over.");91 } catch (DocumentException e) {92 e.printStackTrace();93 } catch (IOException e) {94 e.printStackTrace();95 } finally {96if (doc != null)97 doc.close();98 }99100 }101102public static List<Api> initData() {103 List<Api> list = new ArrayList<Api>();104for (int i = 0; i < 100; i++) {105 Api api = new Api();106 api.setApiName("api-" + i);107 api.setApiDesc("描述-" + i);108int paramSize = new Random().nextInt(20);109 List<Params> paramList = new ArrayList<Params>();110for (int j = 0; j < paramSize; j++) {111 Params param = new Params();112 param.setParamName("param-" + i + "-" + j);113 param.setParamType("paramType-" + i + "-" + j);114 param.setParamDesc("描述-" + i + "-" + j);115 paramList.add(param);116 }117 api.setParams(paramList);118 list.add(api);119 }120 System.out.println("init data over. size=" + list.size());121return list;122 }123// ⽤於⽣成cell124private static PdfPCell createCell(String text, BaseFont font, BaseColor borderColor) {125return createCell(text, 12, font, null, null, borderColor, null);126 }127// ⽤於⽣成cell128private static PdfPCell createCell(String text, BaseFont font, BaseColor borderColor, BaseColor bgColor) {129return createCell(text, 12, font, null, null, borderColor, bgColor);130 }131// ⽤於⽣成cell132private static PdfPCell createCell(String text, int fontsize, BaseFont font, Integer colspan, Integer align, BaseColor borderColor) {133return createCell(text, fontsize, font, colspan, align, borderColor, null);134 }135136/**137 * ⽤於⽣成cell138 * @param text Cell⽂字内容139 * @param fontsize 字体⼤⼩140 * @param font 字体141 * @param colspan 合并列数量142 * @param align 显⽰位置(左中右,Paragraph对象)143 * @param borderColor Cell边框颜⾊144 * @param bgColor Cell背景⾊145 * @return146*/147private static PdfPCell createCell(String text, int fontsize, BaseFont font, Integer colspan, Integer align, BaseColor borderColor, BaseColor bgColor) { 148 Paragraph pagragraph = new Paragraph(text, new Font(font, fontsize));149 PdfPCell cell = new PdfPCell(pagragraph);150 cell.setFixedHeight(20);151 cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 上中下,Element对象152if (align != null)153 cell.setHorizontalAlignment(align);154if (colspan != null && colspan > 1)155 cell.setColspan(colspan);156if (borderColor != null)157 cell.setBorderColor(borderColor);158if (bgColor != null)159 cell.setBackgroundColor(bgColor);160return cell;161 }162163/**164 * SDK中PDF相关的PageEvent165*/166static class SdkPdfPageEvent extends PdfPageEventHelper {167168 @Override169public void onStartPage(PdfWriter writer, Document document) {170// ⽔印(water mark)171 PdfContentByte pcb = writer.getDirectContent();172 pcb.saveState();173 BaseFont bf;174try {175 bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);176 pcb.setFontAndSize(bf, 36);177 } catch (DocumentException e) {178 e.printStackTrace();179 } catch (IOException e) {180 e.printStackTrace();181 }182// 透明度设置183 PdfGState gs = new PdfGState();184 gs.setFillOpacity(0.2f);185 pcb.setGState(gs);186187 pcb.beginText();188 pcb.setTextMatrix(60, 90);189 pcb.showTextAligned(Element.ALIGN_LEFT, "XX公司有限公司", 200, 300, 45);190191 pcb.endText();192 pcb.restoreState();193 }194195 @Override196public void onEndPage(PdfWriter writer, Document document) {197// 页眉、页脚198 PdfContentByte pcb = writer.getDirectContent();199try {200 pcb.setFontAndSize(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED), 10);201 } catch (Exception e) {202 e.printStackTrace();203 } // ⽀持中⽂字体204 pcb.saveState();205try {206// pcb.addImage()⽅法要在pcb.beginText();pcb.endText();之外调⽤,207// 否则⽣成的PDF打开时会报错: An error exists on this page. Acrobat may not display the page correctly. Please contact the person who created the PDF document to correct the problem.208byte[] logoBytes = new byte[1000 * 1024]; // 此处数组⼤⼩要⽐logo图⽚⼤⼩要⼤, 否则图⽚会损坏;能够直接知道图⽚⼤⼩最好不过.209 InputStream logoIs = getClass().getResourceAsStream(logoPath);210if(logoIs != null){211int logoSize = logoIs.read(logoBytes); // 尝试了⼀下,此处图⽚复制不完全,需要专门写个⽅法,将InputStream转换成Byte数组,详情参考org.apache.io.IOUtils.java的toByteArray(InputStream in)⽅法212if(logoSize > 0){213byte[] logo = new byte[logoSize];214 System.arraycopy(logoBytes, 0, logo, 0, logoSize);215 Image image = Image.getInstance(logo);// 如果直接使⽤logoBytes,并且图⽚是jar包中的话,会报图⽚损坏异常;本地图⽚可直接getInstance时候使⽤路径。

关于javapoiitext生成pdf文件的例子以及方法

关于javapoiitext生成pdf文件的例子以及方法

关于javapoiitext⽣成pdf⽂件的例⼦以及⽅法最近正在做导出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("//向⽂档添加⽂字. ⽂档由段组成,这⾥只是做个别的说明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等等之类的);//关闭documentdocument1.close();。

java针对pdf的方法

java针对pdf的方法

java针对pdf的方法
Java有几种方法可以处理PDF文件:
1. Apache PDFBox:这是一个流行的开源Java库,用于创建、修改和提取PDF文件的内容。

它提供了各种功能,包括合并
和拆分PDF文件、提取文本和图像以及添加注释和水印。

2. iText:这是另一个流行的开源Java库,用于创建和修改
PDF文件。

它可以用于创建新的PDF文件、合并和添加页面、提取文本和图像以及添加注释和水印。

iText还支持数字签名
和加密。

3. PDFRenderer:这是一个开源的Java库,用于将PDF文件
渲染为图像。

它可以将PDF文件转换为JPEG、PNG和TIFF
等格式的图像,以便于显示或进一步处理。

4. PDF Clown:这是一个开源的Java库,用于创建和修改
PDF文件。

它提供了各种功能,包括添加和删除页面、提取
文本和图像以及添加注释和水印。

PDF Clown还支持数字签名、加密和PDF/A格式。

无论选择哪种方法,都可以使用Java来处理PDF文件。

选择
适合你需求的库,然后按照其文档和示例进行操作即可。

史上最全的springboot导出pdf文件

史上最全的springboot导出pdf文件

史上最全的springboot导出pdf⽂件 最近项⽬有⼀个导出报表⽂件的需求,我脑中闪过第⼀念头就是导出pdf(产品经理没有硬性规定导出excel还是pdf⽂件),于是赶紧上⽹查看相关的资料,直到踩了⽆数的坑把功能做出来了才知道其实导出excel的api更⽅便,⽹上的相关博客也更多,不过坑也踩完了,这⼀次就来把代码和收获整理和分享⼀下。

导出pdf模板的局限性 在看到需求之前,我先去⽹上去搜了⼀波,发现⽹上很⼤⼀部分博客都是将如何导出pdf模板的,就是先制作⼀张pdf模板,把固定不变的地⽅先写好,把需要改变的地⽅留⽩并设置参数,然后在代码⾥为参数赋值就⾏了,这种⽅式很简单,代码量也很少,但是!!!这种⽅式只适合导出格式和内容是固定的⽂件,⽽我们的需求是导出⼀张以产品名称为列,产品属性为⾏的报表,产品数量不定,这很显然就不能⽤模板的⽅式,只好⽼⽼实实把报表的数据从头到尾⼀⼀导出来。

使⽤iText导出pdf表格 iText是⼀种⽣成PDF报表的Java组件,先把jar包下下来,maven依赖如下:<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.0.6</version></dependency>按照惯例,先来⽣⼀个“Hello World”的⽂件,代码如下public class TestPdf {public static void main(String[] args) throws Exception {TestPdf pdf = new TestPdf();String filename = "D:/Program Files/pdfTest/testTable3.pdf";pdf.createPDF(filename);System.out.println("打印完成");}public void createPDF(String filename) throws IOException {Document document = new Document(PageSize.A4);try {PdfWriter.getInstance(document, new FileOutputStream(filename));document.addTitle("example of PDF");document.open();document.add(new Paragraph("Hello World!"));} catch (FileNotFoundException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();} finally {document.close();}}}这个没什么可说的,照着写就⾏了,不过我们导出的pdf⼤多数是以表格的形式,所以我就直接切⼊主题了,这⾥要⽤到⼀个很关键的类com.itextpdf.text.pdf.PDFPTable,先导出⼀张两⾏两列的表格public static PdfPTable createTable(PdfWriter writer) throws DocumentException, IOException{PdfPTable table = new PdfPTable(2);//⽣成⼀个两列的表格PdfPCell cell;int size = 15;cell = new PdfPCell(new Phrase("one"));cell.setFixedHeight(size);//设置⾼度table.addCell(cell);cell = new PdfPCell(new Phrase("two"));cell.setFixedHeight(size);table.addCell(cell);cell = new PdfPCell(new Phrase("three"));cell.setFixedHeight(size);table.addCell(cell);cell = new PdfPCell(new Phrase("four"));cell.setFixedHeight(size);table.addCell(cell);return table;}public void createPDF(String filename) throws IOException {Document document = new Document(PageSize.A4);try {PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));document.addTitle("example of PDF");document.open();PdfPTable table = createTable(writer);document.add(table);} catch (FileNotFoundException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();} finally {document.close();}}效果如下图现在把我们的需求变得更苛刻⼀点,再增加⼀⾏,格⼦数为1,⽂字⽔平和垂直居中对齐,占两⾏⾼度,先贴代码再做解释public static PdfPTable createTable(PdfWriter writer) throws DocumentException, IOException{PdfPTable table = new PdfPTable(2);//⽣成⼀个两列的表格PdfPCell cell;int size = 15;cell = new PdfPCell(new Phrase("one"));cell.setFixedHeight(size);table.addCell(cell);cell = new PdfPCell(new Phrase("two"));cell.setFixedHeight(size);table.addCell(cell);cell = new PdfPCell(new Phrase("three"));cell.setFixedHeight(size);table.addCell(cell);cell = new PdfPCell(new Phrase("four"));cell.setFixedHeight(size);table.addCell(cell);cell = new PdfPCell(new Phrase("five"));cell.setColspan(2);//设置所占列数cell.setFixedHeight(size*2);//设置⾼度cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置⽔平居中cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置垂直居中table.addCell(cell);return table;}这⾥有⼀个很坑的地⽅,就是每⼀⾏的长度要和初始化表格的长度相等,即要把整⾏给占满,否则后⾯的都不会打印出来,所以要⽤到setColspan()⽅法来合并列,接下来还有⼀个就是合并⾏的的⽅法setRowspan()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通过参数pageSize可以设定页面大小、面背景色、以及页面横向/纵向等属性。iText定义了A0-A10、AL、LETTER、 HALFLETTER、_11x17、LEDGER、NOTE、B0-B5、ARCH_A-ARCH_E、FLSA 和FLSE等纸张类型,也可以通过Rectangle pageSize = new Rectangle(144, 720);自定义纸张。通过Rectangle方法rotate()可以将页面设置成横向。
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。
一、前言
在企业的信息系统中,报表处理一直占比较重要的作用,Java组件——iText可以非常快速的生成PDF报表。iText是着名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、 Html文件转化为PDF文件。通过在服务器端使用Jsp或 JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题了。
//添加第二行
table.addCell (new Paragraph ("Sex(CN)",font));
table.addCell (new Paragraph ("男",font));
table.addCell (new Paragraph ("Sex(EN)",font));
public boolean addKeywords(String keywords)
public boolean addAuthor(String author)
public boolean addCreator(String creator)
public boolean addProducer()
image1.setAlignment(image1.ALIGN_CENTER);
image1.scaleToFit( PageSize.A4.getHeight(),PageSize.A4.getWidth());
doc.add (image1);
doc.close ();
doc.open ();
//标题字体
BaseFont bfTitle = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font titleFont = new Font(bfTitle, 18, Font.NORMAL);
Paragraph titleP=new Paragraph("儿童信息 Child Information\n\n",titleFont);
titleP.setAlignment(titleP.ALIGN_CENTER);
doc.add(titleP);
//生成4列的表格
cell.setColspan (3);
table.addCell (cell);
//添加第9行
table.addCell (new Paragraph ("Pictures",font));
Image photo=Image.getInstance("c:/test/pdf/1246588678828.jpg");
PDFWriter.getInstance(document, new FileOutputStream("Helloworld.PDF"));
③打开文档。
document.open();
④向文档中添加内容。
document.add(new Paragraph("Hello World"));
//内容字体
BaseFont bfComic = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bfComic, 9, Font.NORMAL);
PdfPTable table = new PdfPTable (4);
table.setWidthPercentage(100);
table.setWidthPercentage(100);
table.addCell (new Paragraph ("Children-id",font));
public static void main(String[] args) {
Document doc = new Document();
PdfWriter.getInstance(doc, new FileOutputStream("E:/HelloWorld.pdf"));
table.addCell (new Paragraph ("MALE",font));
//添加第8行
table.addCell (new Paragraph ("Note",font));
cell = new PdfPCell (new Paragraph ("儿童资料",font));
int marginBottom);
Байду номын сангаас
构建函数的参数pageSize是文档页面的大小,对于第一个构建函数,页面的大小为A4,同Document(PageSize.A4)的效 果一样;对于第三个构建函数,参数marginLeft、marginRight、marginTop、marginBottom分别为左、右、上、下的 页边距。
doc.open();
doc.add(new Paragraph("Hello World"));
doc.close();
}
Document doc = new Document (PageSize.A4);
PdfWriter.getInstance (doc, new FileOutputStream ("c:/test/pdf/test.pdf"));
if(cells!=null){
cells.setPadding(10.0f);
}
}
}
doc.add (table);
doc.newPage();
//插入图片
doc.newPage();
Image image1 = Image.getInstance ("c:/test/pdf/1246588315281.jpg");
PdfPCell cell = new PdfPCell (new Paragraph ("09140800002",font));
cell.setColspan (3);
table.addCell (cell);
// 添加第一行
table.addCell (new Paragraph ("Name(CN)",font));
三、建立第一个PDF文档
用iText生成PDF文档需要5个步骤:
①建立com.lowagie.text.Document对象的实例。
Document document = new Document();
②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
public void setHeader(HeaderFooter header)
二、iText简介
iText是着名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
iText的安装非常方便,在/iText/download.html - download 网站上下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。
书写器(Writer)对象
一旦文档(document)对象建立好之后,需要建立一个或多个书写器(Writer)对象与之关联。通过书写器(Writer)对象可以将 具体文档存盘成需要的格式,如com.lowagie.text.PDF.PDFWriter可以将文档存成PDF文件, com.lowagie.text.html.HtmlWriter可以将文档存成html文件。
⑤关闭文档。
document.close();
通过上面的5个步骤,就能产生一个Helloworld.PDF的文件,文件内容为"Hello World"。
建立com.lowagie.text.Document对象的实例
相关文档
最新文档