/** * 设置表体,根据传入的参数进行设置 * @return * @throws DocumentException * @throws IOException */ @SuppressWarnings("unchecked") private PdfPTable setTableBody(List list) throws DocumentException, IOException { Rectangle whiteBorder = new Rectangle(12f, 12f); whiteBorder.setBorderWidth(0f); PdfPTable tab = new PdfPTable(7); //设置列的宽度,这种参数也应该是传进来的,设计时你不知道到底有多少列,列表和列宽都要传进来进行设置 int table[] = { 15, 15, 15, 13, 15, 15, 12 }; tab.setWidths(table); tab.setWidthPercentage(100); tab.setSpacingBefore(0f);// 设置标题和第一个表格间的距离.不然会粘在一起 for (int i = 0; i < 840; i++) { PdfPCell pdfcell = new PdfPCell(new Phrase("批量查询", font1)); pdfcell.setHorizontalAlignment(Element.ALIGN_CENTER); tab.addCell(pdfcell); } return tab; } /** * 设置表头,根据传入的参数进行设置 * @return * @throws DocumentException */ @SuppressWarnings("unchecked") private PdfPTable setHeaderTable(List list) throws DocumentException{ PdfPTable tab = new PdfPTable(7); int table[] = { 15, 15, 15, 13, 15, 15, 12 }; tab.setWidths(table); tab.setWidthPercentage(100); for (int i = 0; i < list.size(); i++) { String headerName = (String) list.get(i); PdfPCell pdfcell = new PdfPCell(new Phrase(headerName, font)); pdfcell.setHorizontalAlignment(Element.ALIGN_CENTER); tab.addCell(pdfcell); } return tab; } /** * 生成pdf时调用的字体 * 这是中文用的 */ public void onOpenDocument(PdfWriter writer, Document document) { try { tpl = writer.getDirectContent().createTemplate(100, 100); bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); } catch (Exception e) { throw new ExceptionConverter(e); } } /** * 生成时间,如果转入了时间就显示输入的时间,转入的时间格式为20100909、2010-09-09、2010/09/09、2010\09\09就会返回2010年09月09日 * 如果转入的是空的字符串或是null则返回系统时间,其格式为2010年09月09日 * @param dateString * @return String */ private static String getDifferentTime(String dateString) { GregorianCalendar calendar = (GregorianCalendar) Calendar.getInstance(); StringBuffer sb = new StringBuffer(); if (dateString == null || "".equals(dateString)) { sb.append(calendar.get(Calendar.YEAR)).append("年").append(calendar.get(Calendar.MONTH)+1).append("月").append(calendar.get(Calendar.DAY_OF_MONTH)).append("日"); return sb.toString(); } else { String year = "", month = "", day = ""; if(dateString.indexOf("-") != -1 || dateString.indexOf("/") != -1 || dateString.indexOf("\\") != -1){ year = dateString.substring(0, 4); month = dateString.substring(5, 7); day = dateString.substring(8); }else{ year = dateString.substring(0, 4); month = dateString.substring(4, 6); day = dateString.substring(6); } sb.append(year).append("年").append(month).append("月").append(day).append("日"); return sb.toString(); } } /*public static Table getEmptyTable() { Table emptyTable = null; try { emptyTable = new Table(1); emptyTable.setWidth(100); emptyTable.setBorder(Rectangle.NO_BORDER); Cell c = new Cell(new Phrase("\n", normalFont)); c.setBorder(Rectangle.NO_BORDER); emptyTable.addCell(c); } catch (Exception e) { e.printStackTrace(); } return emptyTable; }*/ @SuppressWarnings("unchecked") private List getTitleList(){ List list = new ArrayList(); list.add("交易日期"); list.add("划拨类型"); list.add("总账号"); list.add("子账号"); list.add("子账号名称"); list.add("交易金额"); list.add("划拨结果"); return list; } private String getTileName(){ String str = new String("批量查询功能"); return str; } /** * pdf生成时会首先调用这个方法,是itext自己调用的。 * @param writer * @param document * @return void */ public void onStartPage(PdfWriter writer, Document document) { int pageSize = writer.getPageNumber(); //只在第一页中加入标题,如果想在每一个页面中都加入标题和时间,把if条件去掉就可以了 if(pageSize == 1){ try { document.add(setTiteAndDate(getTileName())); } catch (DocumentException e) { e.printStackTrace(); } } try { //在每一页中都加入表头 document.add(setHeaderTable(getTitleList())); } catch (Exception e) { e.printStackTrace(); } } /** * pdf生成完成之后itext要执行的方法 * @param writer * @param document * @return void */ public void onEndPage(PdfWriter writer, Document document) { // 在每页结束的时候把“第x页”信息写道模版指定位置 // 页码在头部 /* * PdfContentByte cb = writer.getDirectContent(); cb.saveState(); String * text = "第" + writer.getPageNumber() + "页,共"; cb.beginText(); * cb.setFontAndSize(bf, 8); cb.setTextMatrix(460, 786);// 定位“第x页,共” * 在具体的页面调试时候需要更改这xy的坐标 cb.showText(text); cb.endText(); * cb.addTemplate(tpl, 492, 786);// 定位“y页” 在具体的页面调试时候需要更改这xy的坐标 * * cb.saveState(); cb.stroke(); cb.restoreState(); cb.closePath();// * sanityCheck(); */ //页码在尾部加 PdfContentByte cb = writer.getDirectContent(); cb.saveState(); String text = "第" + writer.getPageNumber() + "页,共"; float textSize = bfChinese.getWidthPoint(text, 8); float textBase = document.bottom() - 20; cb.beginText(); cb.setFontAndSize(bfChinese, 8); float adjust = bfChinese.getWidthPoint("0", 8); cb.setTextMatrix(document.right() - textSize - adjust, textBase); cb.showText(text); cb.endText(); cb.addTemplate(tpl, document.right() - adjust, textBase); cb.saveState(); } /** * 关闭document的时候获取总页数,并把总页数按模版写道之前预留的位置 * @param writer * @param document * @return void */ public void onCloseDocument(PdfWriter writer, Document document) { tpl.beginText(); tpl.setFontAndSize(bf, 8); tpl.showText(Integer.toString(writer.getPageNumber() - 1) + "页"); tpl.endText(); tpl.closePath();// sanityCheck(); } }
分享到:
相关推荐
通过iText,开发者可以轻松地插入文本、图像、表格,甚至复杂的布局设计,实现自定义的PDF打印功能。 二、PDF基本概念 在深入iText之前,我们需要了解一些PDF的基础知识。PDF(Portable Document Format)是一种跨...
本篇文章将详细介绍iTextPDF 5.5.13的核心功能及使用方法,并通过"printPdfTest.java"这个示例代码来进一步解析其实现步骤。 首先,iTextPDF的核心在于其 PdfWriter 类,它是生成PDF文件的关键。PdfWriter允许...
7. **安全与权限**:iText支持设置PDF文档的访问权限,如禁止复制、打印等,这可以通过`PdfWriter.setEncryption()`方法实现。 8. **PDF合并与分割**:`PdfCopy`类可以用于合并多个PDF文档,而`PdfStamper`则能用于...
2. **遍历OCGs**:使用`PdfDocument`的API获取所有的OCGs,这可以通过`PdfDocument.getStructTreeRoot().getOptionalContent()`实现。 3. **分析OCGs**:遍历得到的OCGs,读取每个图层的信息,如ID、名称和可见性。 ...
2. **表单处理**:iText允许创建交互式PDF表单,包括按钮、复选框、单选按钮、文本字段等,用户可以在PDF阅读器上填写并保存表单数据。 3. **数字签名和安全**:通过iText,开发者可以为PDF文档添加数字签名,确保...
2. **HTML和XML转换**:iTextPDF可以通过DOM解析器将HTML或XML文档转换成PDF格式,这使得网页内容可以直接导出为PDF,方便离线阅读或打印。同时,它支持CSS样式,可以保留原始文档的视觉效果。 3. **表单处理**:...
iText 是一个强大的 Java 类库,专为生成和编辑PDF文档而设计。它以其灵活性和易用性在开发社区中广受欢迎。...在实际开发中,还可以结合iText的其他高级特性,如书签、超链接、数字签名等,实现更复杂的PDF生成任务。
这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...
7. **与现有系统的集成**:iTextPDF可以轻松地与Java应用服务器、Web应用、桌面应用等环境集成,通过Java的I/O流操作,实现PDF的动态生成和输出。 总结来说,iTextPDF 5.5.5是一个功能强大的PDF处理库,它简化了PDF...
在IT行业中,PDF(Portable Document Format)文件是一种广泛应用的文档格式,它能够保持文档的原始布局和样式,方便跨平台分享和打印。为了处理PDF文件,开发者经常需要借助第三方库,其中iTextPDF是一个强大的Java...
《深入解析itext5.4.2与html2pdf:打造中文支持的PDF转换利器》 在数字化的时代,HTML和PDF两种格式在信息传递中占据了重要地位。HTML用于网页展示,而PDF则常用于文档保存和打印。然而,将HTML转换为PDF的需求时常...
使用iTextpdf库,开发者可以实现以下功能: 1. **创建PDF**:从头开始创建全新的PDF文档,设置页面大小、边距,添加各种元素。 2. **编辑PDF**:修改已有PDF的文本、图像、页眉页脚等,甚至可以合并多个PDF文件。 3...
iText是一款广泛使用的开源Java库,专门用于生成和编辑PDF文档。这个中文帮助文档提供了详细的指导,帮助开发者理解和使用iText来创建包含丰富内容的PDF文件。以下是对iText库和文档中涉及的关键知识点的详细解释: ...
这意味着开发人员可能已经实现了相关的JavaScript或者HTML5 API来与后端交互,获取由Itext生成的PDF文件,并在用户界面上提供预览和打印功能。前端预览通常使用`<iframe>`或者PDF.js这样的库实现,而打印则可以通过...
在IT行业中,PDF(Portable Document Format)是一种广泛用于存储和分发文档的格式,它能够保持文档的原始格式不变,方便跨平台查看和打印。iText是一个强大的Java库,允许开发者在应用程序中创建、修改和处理PDF...
对于打印PDF文件,iText提供了一个`PdfWriter`类,它能创建一个与现有PDF文件关联的写入器,从而实现打印功能。 在描述的场景中,我们提到“拆分list数据”。这可能指的是将一个List对象中的每一项数据分别写入到...
9. 运行demo:提供的`itext图片转pdf的demo`可能是一个完整的Java程序,包含了上述步骤的实现。运行这个示例,可以直观地看到如何使用`iText`库生成高清PDF。 在实际应用中,可能还需要考虑其他因素,如图片的原始...
iText 5.5.5 jar 文件是这个库的可执行组件,包含了所有必要的类和方法,使得开发者无需深入了解PDF规范就能实现复杂的PDF操作。 1. PDF生成:iText允许开发者通过编程方式创建PDF文档。你可以动态添加文本、图像、...
接下来,我们创建一个名为`TestExcel2Pdf.java`的Java类,用来实现Excel到PDF的转换。首先,我们需要使用POI读取Excel文件中的数据: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf....