- 浏览: 18567 次
- 性别:
- 来自: 北京
最新评论
import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.pdfview.PDFFile; import com.sun.pdfview.PDFPage; /** * 功能:生成pdf表格 、转化成图片 * * @author Shizw * @CreateTime 2011-12-08 */ public class CreatePdfToImage { /** * 中文字体(默认黑体) * 具体字体可到C:\\WINDOWS\FONTS下去拷 */ public String character_font_ch = "simhei.TTF"; // 黑体 /** * 左边距 */ public float margin_left = 2;; /** * 右边距 */ public float margin_right = 2; /** * 上边距 */ public float margin_top = 8; /** * 下边距 */ public float margin_bottom = 2; /** * 字体显示(水平或垂直)默认水平显示 */ public String identity = BaseFont.IDENTITY_H; /** * 字体大小(默认16) */ public int size = 16; /** * 字体样式(默认NORMAL) */ public int style = Font.NORMAL; /** * 字体颜色(默认黑色) */ public BaseColor color = BaseColor.BLACK; /** * 设置表格所占pdf宽度的比例 默认100% */ public float widthPercentage = 100; /** * 表格的单元格高度(默认28) */ public float table_height = 28; /** * 单元格内容与左边距间隔(默认0) */ public float padding_left = 0; /** * pdftable */ private PdfPTable pdfTable; /** * ColorList */ private List colorList = new ArrayList();// 设置字体颜色 /** * 设置字体位置List */ private List backList = new ArrayList(); /** * 设置字体align */ public int align = Element.ALIGN_CENTER; /** * 默认行背景色 */ public BaseColor back_color = BaseColor.WHITE; /** * 行背景色list */ private List backgroundList = new ArrayList(); /** * 自定义背景颜色 */ private BaseColor back_color_def; /** * 自定义列字体位置 */ private int align_def; private Document document = null; /** * 生成pdf并且生成图片 * * @param fileName * 生成的.pdf文件路径及名称 * @param path * 图片生成路径及名称(jpg 或png) * @param width * 图片宽度 * @param rowHeight * 行高 * @param cell_width * 列及列的宽度比例 * @param content * 结果集 * */ public void createTabToImage(String fileName, String path, float width, float rowHeight, float[] cell_width, String[][] content) { try { int rownum = content.length; this.table_height=rowHeight; Rectangle rec = createHeWidth(width,rowHeight,rownum); createDocument(fileName,rec); BaseFont f = createChineseFont(); Font font = createFont(f, this.size, this.style, this.color); this.pdfTable = createTable(cell_width); PdfPCell cell; Font fonts = null; for (int i = 0; i < content.length; i++) { // 自定义行颜色 for (int t = 0; t < backgroundList.size(); t++) { Map m = (Map) backgroundList.get(t); int row = ((Integer) m.get("row")).intValue(); BaseColor back_color = (BaseColor) m.get("color"); if (row == (i + 1)) { back_color_def = back_color; break; } else { back_color_def=this.back_color; } } // 自定义列的字体位置 for (int j = 0; j < content[i].length; j++) { for (int c = 0; c < backList.size(); c++) { Map m = (Map) backList.get(c); int cols = ((Integer) m.get("cols")).intValue(); int align = ((Integer) m.get("align")).intValue(); if (cols == (j + 1)) { align_def = align; break; } else { align_def=this.align ; } } if (content[i].length < cell_width.length) {// 列数不足时,自动把最后一个cell // 合并单元格 if (j == content[i].length - 1) { // 自定义字体的颜色 for (int k = 0; k < colorList.size(); k++) { Map m = (Map) colorList.get(k); int row = ((Integer) m.get("row")).intValue(); int cols = ((Integer) m.get("cols")).intValue(); BaseColor colors = (BaseColor) m.get("color"); if ((i + 1) == row && (j + 1) == cols) { fonts = new Font(f, this.size, this.style, colors); break; } else { fonts = font; } } cell = addToTable(content[i][j], fonts); cell.setColspan(cell_width.length - content[i].length + 1); this.pdfTable.addCell(cell); } else { for (int k = 0; k < colorList.size(); k++) { Map m = (Map) colorList.get(k); int row = ((Integer) m.get("row")).intValue(); int cols = ((Integer) m.get("cols")).intValue(); BaseColor colors = (BaseColor) m.get("color"); if ((i + 1) == row && (j + 1) == cols) { fonts = new Font(f, this.size, this.style, colors); break; } else { fonts = font; } } cell = addToTable(content[i][j], fonts); this.pdfTable.addCell(cell); } } else { for (int k = 0; k < colorList.size(); k++) { Map m = (Map) colorList.get(k); int row = ((Integer) m.get("row")).intValue(); int cols = ((Integer) m.get("cols")).intValue(); BaseColor colors = (BaseColor) m.get("color"); if ((i + 1) == row && (j + 1) == cols) { fonts = new Font(f, this.size, this.style, colors); break; } else { fonts = font; } } cell = addToTable(content[i][j], fonts); this.pdfTable.addCell(cell); } } } addTable(this.pdfTable); closeDocument(); setup(fileName, path); } catch (Exception ex) { ex.printStackTrace(); } } /** * 自定义字体颜色3 * * @param row * 行 * @param cols * 列 * @param color * 颜色 */ public void setCellStyle(int row, int cols, BaseColor color) { try { Map m = new HashMap(); m.put("row", Integer.valueOf(row)); m.put("cols", Integer.valueOf(cols)); m.put("color", color); colorList.add(m); } catch (Exception ex) { ex.printStackTrace(); } } /** * 设置单元格的对齐方式,只能指定列 * * @param cols * @param Element.ALIGN_CENTER,Element.ALIGN_LEFT * 等 */ public void setAlign(int cols, int align) { Map m = new HashMap(); m.put("cols", Integer.valueOf(cols)); m.put("align", Integer.valueOf(align)); backList.add(m); } /** * 设置背景色,只能指定行 * * @param row * @param color */ public void setBackgroundColor(int row, BaseColor color) { Map m = new HashMap(); m.put("row", Integer.valueOf(row)); m.put("color", color); backgroundList.add(m); } /** * 创建pdf文档 * * @param fileName * pdf文件 * @param rectangle * 页面大小 */ private void createDocument(String fileName, Rectangle rectangle) { File file = new File(fileName); FileOutputStream out = null; document = new Document(rectangle, this.margin_left, this.margin_right, this.margin_top, this.margin_bottom); try { out = new FileOutputStream(file); PdfWriter.getInstance(document, out); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } document.open(); } /** * 创建pdf的宽度\高度 返回一个Rectangle ,createDocument时用 * * @param rowHeight * 行高 * @param rownum * 表格的行数 * @param width * pdf宽度 * @return Rectangle */ private Rectangle createHeWidth(float width, float rowHeight, int rownum) { return new Rectangle(width, rowHeight * (rownum + 1)); } /** * 功能:返回支持中文的字体,字体样式等 * * @return Font */ private BaseFont createChineseFont() { BaseFont bfChinese = null; try { bfChinese = BaseFont.createFont(this.character_font_ch, this.identity, BaseFont.EMBEDDED); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException io) { io.printStackTrace(); } return bfChinese; } /** * 创建字体样式 * * @param font * @param size * 大小 * @param style * Font.NORMAL 等 * @param color * 颜色 * @return */ private Font createFont(BaseFont font, int size, int style, BaseColor color) { return new Font(font, size, style, color); } /** * 功能:返回支持中文的字体,字体样式等 * * @param size * 字体大小 * @param style * 字体 * @param font * Font.NORMAL,Font.BOLD等 * @param color * 字体颜色 */ private Font createChineseFont(int size, int style, BaseColor color) { BaseFont bfChinese = null; Font font = null; try { bfChinese = BaseFont.createFont(this.character_font_ch, this.identity, BaseFont.EMBEDDED); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException io) { io.printStackTrace(); } font = new Font(bfChinese, size, style, color); return font; } /** * 功能:创建一个空表格 * * @param cell_perct * 数组,设定列的数目,及每列所占表格比例 * 例:5列及比例cell_widths[]={0.4f,0.1f,0.15f,0.15f,0.15f}; */ private PdfPTable createTable(float[] cell_width) { // 生成一个表格 PdfPTable table = new PdfPTable(cell_width); table.setWidthPercentage(this.widthPercentage); return table; } /** * 创建单元格,添加到表格,默认字体居中,背景色白色 * */ private PdfPCell addToTable(String content, Font fonts) { PdfPCell cell; cell = new PdfPCell(new Paragraph(content, fonts)); cell.setFixedHeight(this.table_height); cell.setHorizontalAlignment(this.align_def); cell.setBackgroundColor(this.back_color_def); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setPaddingLeft(this.padding_left); return cell; } /** * 把表格添加到pdf中 */ private void addTable(PdfPTable table) { try { if (document != null) { if(table!=null){ document.add(table); } } } catch (Exception ex) { ex.printStackTrace(); } } /** * 把表格添加到pdf中 */ private void addTable() { try { if (document != null) { if (this.pdfTable != null) { document.add(this.pdfTable); } } } catch (Exception ex) { ex.printStackTrace(); } } /** * 功能:关闭文档 */ private void closeDocument() { if (document != null) { document.close(); } } /** * 生成图片 * * @return */ private void setup(String fileName, String path) throws IOException { File file = new File(fileName); RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel(); ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel .size()); PDFFile pdffile = new PDFFile(buf); for (int i = 1; i <= pdffile.getNumPages(); i++) { PDFPage page = pdffile.getPage(i); java.awt.Rectangle rect = new java.awt.Rectangle(0, 0, (int) page .getBBox().getWidth(), (int) page.getBBox().getHeight()); Image img = page.getImage(rect.width, rect.height, // width & // // height rect, // clip rect null, // null for the ImageObserver true, // fill background with white true // block until drawing is done ); BufferedImage tag = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(img, 0, 0, rect.width, rect.height, null); FileOutputStream out; if(i>1){ System.out.println(path.substring(0,path.length()-4)); out = new FileOutputStream(path.substring(0,path.length()-4)+i+path.substring(path.length()-4)); }else{ out = new FileOutputStream(path); } JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); // JPEG out.close(); } } public float getMargin_left() { return margin_left; } /** * 设置左边距 * * @param margin_left */ public void setMargin_left(float margin_left) { this.margin_left = margin_left; } public float getMargin_right() { return margin_right; } /** * 设置右边距 * * @param margin_right */ public void setMargin_right(float margin_right) { this.margin_right = margin_right; } public float getMargin_top() { return margin_top; } /** * 设置上边距 * * @param margin_top */ public void setMargin_top(float margin_top) { this.margin_top = margin_top; } public float getMargin_bottom() { return margin_bottom; } public void setMargin_bottom(float margin_bottom) { this.margin_bottom = margin_bottom; } public String getCharacter_font_ch() { return character_font_ch; } /** * 设置中文字体(仿宋、黑体等) * * @param character_font_ch */ public void setCharacter_font_ch(String character_font_ch) { this.character_font_ch = character_font_ch; } public String getIdentity() { return identity; } /** * 字体显示(水平或垂直)BaseFont.IDENTITY_H 等 * * @param identity */ public void setIdentity(String identity) { this.identity = identity; } public int getSize() { return size; } /** * 设置字体大小 * * @param size */ public void setSize(int size) { this.size = size; } public int getStyle() { return style; } /** * 设置字体样式 * * @param style */ public void setStyle(int style) { this.style = style; } public BaseColor getColor() { return color; } /** * 设置字体颜色 * * @param color */ public void setColor(BaseColor color) { this.color = color; } public float getWidthPercentage() { return widthPercentage; } /** * 设置表格宽度 * * @param widthPercentage */ public void setWidthPercentage(float widthPercentage) { this.widthPercentage = widthPercentage; } public float getTable_height() { return table_height; } /** * 设置表格单元格的高度 * * @param table_height */ public void setTable_height(float table_height) { this.table_height = table_height; } public float getPadding_left() { return padding_left; } public void setPadding_left(float padding_left) { this.padding_left = padding_left; } public int getAlign() { return align; } public void setAlign(int align) { this.align = align; } public BaseColor getBack_color() { return back_color; } public void setBack_color(BaseColor back_color) { this.back_color = back_color; } }
相关推荐
5. **图片和图像**:要插入图片,需要使用Image类,并指定图片文件的路径: ```java Image image = Image.getInstance("image.jpg"); document.add(image); ``` 6. **表格和列表**:iText也提供了创建表格...
对于生成表格,iText提供了一个名为`PdfPTable`的类,它是表格的核心组件。 创建一个简单的表格,首先要导入必要的iText库,并初始化一个`Document`对象,接着创建一个`PdfPTable`实例。例如: ```java import ...
iText提供了一个名为`PdfPTable`的类,用于创建表格。你可以通过指定列数、行数以及单元格的宽度来构建表格。如果需要合并单元格,可以使用`setMergeFirst()`和`setMergeLast()`方法。比如,如果你想合并一整行的两...
`core-renderer-R8-20170706.jar.sha1`是文件的SHA1校验和,用于验证文件的完整性和未被篡改。 总之,处理Itext生成PDF时的中文换行问题,关键在于正确设置字体、编码和布局策略。如果遇到困难,不妨尝试更新库或...
如果你的项目需要在没有构建工具的情况下运行,你需要确保`lib`目录下的iText JAR文件被正确地包含在运行时的类路径中。 总的来说,使用iText生成2003版Word文档涉及创建`Document`对象,添加内容元素,以及设置...
根据提供的文件信息,以下是关于使用iText生成PDF文档供前台打印及下载的详细知识点: ### iText生成PDF文档的概述 iText是一个用于创建和操作PDF文档的Java类库。它可以让开发者通过编写代码来生成PDF文件,以...
运行这个Demo,你应该能得到一个包含文字、图片和表格的完整PDF文件。 在开发过程中,你可能会遇到各种问题,比如字符编码、图像缩放、页面布局等。IText库提供了丰富的API来处理这些问题,但需要仔细阅读官方文档...
在这个主题中,我们将深入探讨如何利用Itext进行PDF文档的生成。 ### 1. PDF基础 PDF(Portable Document Format)是一种跨平台的文件格式,能够保持文档的原始布局和样式,无论在何种设备上查看。Itext作为PDF...
iText是一款广泛使用的Java库,专门用于生成和操作PDF文档。在IT领域,尤其是在文档处理和报告生成中,iText有着重要地位...结合提供的教程和源码,你将能快速上手并灵活运用iText生成包含中文、图片和表格的PDF文件。
在提供的压缩包文件"itext报表生成工程"中,可能包含了示例代码、配置文件、资源文件等,这些可以帮助你更好地理解和实践IText报表生成。通过研究这些文件,你可以学习到如何将IText库集成到你的项目中,以及如何...
但我们可以利用ITEXT的`PdfWriter`和`Document`类来模拟Excel的表格结构,然后将生成的PDF转换为XLS或XLSX格式。以下是一些关键步骤: 1. **初始化**: 创建一个`Document`对象,它是ITEXT文档的基本构建块。这将...
iText 提供了 `PdfStamper` 类来处理现有的 PDF 文件,其中包括填充表单的功能。这为生成带有特定样式的报表提供了一种简单有效的方法: 1. **Word 制作报表样式**:使用 Microsoft Word 设计报表模板。 2. **...
在iText中,`PdfWriter`是负责将数据写入PDF文件的核心类,而`PdfDocument`则用来管理PDF文档的结构。例如,你可以这样创建一个新的PDF文档: ```java PdfWriter writer = PdfWriter.getInstance(document, new ...
JavaPDF文件生成是Java开发中一个重要的领域,主要用于创建、编辑和处理PDF文档。iTextPDF是一个流行的开源库,它提供了丰富的API,使得在Java环境中生成高质量的PDF文档变得简单易行。本篇文章将深入探讨如何使用...
这个教程主要聚焦于使用C#编程语言来生成PDF文件,通过iTextSharp库实现各种功能,如添加文本、图像、表格以及复杂的布局。下面将详细介绍如何使用iTextSharp实现这些功能。 1. **创建PDF文档** - 首先,你需要...
iText是一款广泛使用的Java库,专门用于创建和编辑PDF文档。在版本2.0.8中,它提供了将HTML转换为PDF的功能,这对于从网页内容生成打印版或者提供离线阅读材料非常有用。这个过程涉及到多个步骤和技术,下面将详细...
本篇将详细介绍如何在Java中使用Itext库来生成PDF文件。 首先,我们需要了解Itext库的基本概念。Itext是一个基于Java的PDF库,它提供了丰富的API来处理PDF文档,包括创建新的PDF文档、添加文本、图像、表格、链接、...
2. **表格和列表**:iText提供` PdfPTable`类来创建表格,并且可以对单元格进行格式化。 3. **图像处理**:使用`Image`类可以插入JPEG、PNG等格式的图片。 4. **链接和超文本**:可以创建内部和外部链接,以及书签。...
4. **创建表格**:`PdfPTable`类允许创建具有多个行和列的表格。每个单元格由` PdfPCell`对象表示,可以自定义单元格的样式。 5. **链接与动作**:使用`Action`类可以创建超链接,如跳转到其他页面、打开URL等。 6...
在处理大量数据时,我们可能需要创建表格来展示信息,iText提供了`PdfPTable`类来实现这一功能。 步骤1:引入依赖 在Java项目中,我们需要将iText相关的jar包引入到项目构建路径中。在给定的压缩包中,应包含iText...