java中的接口是类吗
993
2022-11-04
java 后端生成pdf模板合并单元格表格的案例
这里只放部分片段的代码
java中使用二维数组生成表格非常方便,但是每一维的数组都需要排好序,而且,在java中所谓的二维数组,三维数组等,其实都是多个一维数组组成的
/**
* 添加子女教育规划表。
* @param name 子女姓名
* @param educationItems 某个孩子的教育规划的二维数组,每列依次是:学程阶段、年数、费用支出(元)/年、年增长率
* @param spacing
* @throws DocumentException
* @throws IOException
*/
private void addEducationTable(String name, String[][] educationItems, float spacing) throws DocumentException, IOException
{
addParagraphText(name + "的教育支出规划如下:", getMainTextFont(), 0, SPACING_5, LEADING_MULT);//标题字段
//以下是表头
float[] colWidth = new float[] { mm2px_width(34f), mm2px_width(34f), mm2px_width(34f), mm2px_width(34f), mm2px_width(34f) };
String[] colName = { "学程阶段", "年数", "规划值(首次)","发生值(首次)", "年增长率" };//表头列的一维数组
int[] colAlignment = {Element.ALIGN_LEFT, Element.ALIGN_RIGHT, Element.ALIGN_RIGHT, Element.ALIGN_RIGHT, Element.ALIGN_RIGHT }; //表头有几列就写几个对齐方式
float[] colPaddingLeft = { 3f, 3f, 3f, 3f, 3f };
float[] colPaddingRight = { 3f, 3f, 3f, 3f, 3f };
Font[] colFont = { getTabCellTextFont(), getTabCellTextFont(), getTabCellTextFont(), getTabCellTextFont(), getTabCellTextFont() };//字体及颜色的设置
educationItems=swap(educationItems, 3, 4);//这是排序二维数组,把第4列换到第3行(从0开始计数)
PdfPTable table = tableTemplate(educationItems, colWidth, colName, colAlignment, colPaddingLeft, colPaddingRight, colFont);//生成表格
table.setSpacingAfter(mm2px_height(spacing));
this._document.add(table);//生成到PDF去,代码就不贴了
}
/**
* @param items 二维数组表示的表
* @param colWidth 各列的宽度(像素)
* @param colName 各列的名称
* @param colAlignment 各列的水平对齐方式
* @param colPaddingLeft 各列的左padding
* @param colPaddingRight 各列的右padding
* @param colFont 各列的字体
* @return
* @throws DocumentException
* @throws IOException
*/
private PdfPTable tableTemplates(String[][] items, float[] colWidth, String[] colName, int[] colAlignment,
float[] colPaddingLeft, float[] colPaddingRight, Font[] colFont) throws DocumentException, IOException
{
PdfPTable intTable = new PdfPTable(colWidth.length);
intTable.setTotalWidth(colWidth);
intTable.setLockedWidth(true);
intTable.getDefaultCell().setLeading(mm2px_height(LEADING_CELL_TEXT), 1f); //单元格内文字行间距
intTable.getDefaultCell().setBorderColor(COLOR_CELL_BORDER); //边框颜色
intTable.setHeaderRows(1); //第一行做表头,跨页再现表头
//单元格可以跨页
intTable.setSplitLate(false);
intTable.setSplitRows(true);
/*********************************************************************************************/
/***********************************以下是表头标题栏*******************************************/
float headerHeight = mm2px_height(TABLE_HEADER_HEIGHT);
intTable.getDefaultCell().setFixedHeight(headerHeight); //行高
intTable.getDefaultCell().setBorder(Rectangle.NO_BORDER); //无边框
for(int i = 0; i < colName.length; i++)
{
intTable.getDefaultCell().setBackgroundColor(COLOR_TAB_HEADER); //表头背景
intTable.getDefaultCell().setHorizontalAlignment(colAlignment[i]);
intTable.getDefaultCell().setPaddingLeft(colPaddingLeft[i]);
intTable.getDefaultCell().setPaddingRight(colPaddingRight[i]);
intTable.addCell(new Paragraph(colName[i], getTabHeaderTextFont()));
}
/*********************************************************************************************/
/***********************************以下是表格每行*********************************************/
float rowHeight = mm2px_height(TABLE_ROW_HEIGHT);
intTable.getDefaultCell().setMinimumHeight(rowHeight); //单元格内文字不确定,不能设置成固定行高
intTable.getDefaultCell().setBackgroundColor(COLOR_CELL_BACK_WHITE);
for(int i = 0; i < items.length; i++)
{
if(i == items.length - 1) //最后一行有合并单元格
{
intTable.getDefaultCell().setColspan(6);//设置具体合并哪一列
intTable.getDefaultCell().setHorizontalAlignment(colAlignment[0]);
intTable.getDefaultCell().setPaddingLeft(colPaddingLeft[0]);
intTable.getDefaultCell().setPaddingRight(colPaddingRight[0]);
intTable.getDefaultCell().setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
intTable.addCell(new Paragraph(items[i][0], colFont[0]));
}else{
for(int j = 0; j < items[i].length; j++)
{
if(j == 0)intTable.getDefaultCell().setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
else intTable.getDefaultCell().setBorder(Rectangle.RIGHT | Rectangle.BOTTOM);
if(j < colAlignment.length){
intTable.getDefaultCell().setHorizontalAlignment(colAlignment[j]);
intTable.getDefaultCell().setPaddingLeft(colPaddingLeft[j]);
intTable.getDefaultCell().setPaddingRight(colPaddingRight[j]);
intTable.addCell(new Paragraph(items[i][j], colFont[j]));
}
}
}
}
/*********************************************************************************************/
return intTable;
}
/*
*二维数组根据指定列排序到指定位置的方法,f2要大于f1
*/
public String[][] swap(String[][] data,int f1,int f2){
for (int i = 0; i < data.length; i++) {
String tamp=data[i][f2];
for (int j = f2; j >f1; j--) {
data[i][j]=data[i][j-1];
}
data[i][f1]=tamp;
}
return data;
}
/**
* @return 获取表头标题栏字体。
* @throws DocumentException
* @throws IOException
*/
private static Font getTabHeaderTextFont() throws DocumentException, IOException
{
return getFont(GDM.getUrlString(GDM.FONT_SIMHEI), FONT_SIZE_TAB_HEADER_TEXT, Font.NORMAL, COLOR_TAB_HEADER_TEXT);
}
/**
* @return 获取单元格文字字体。
* @throws DocumentException
* @throws IOException
*/
private static Font getTabCellTextFont() throws DocumentException, IOException
{
return getFont(GDM.getUrlString(GDM.FONT_SIMHEI), FONT_SIZE_TAB_CELL_TEXT, Font.NORMAL, GDM.COLOR_666666);
}
/**
* @return 获取标题字体。
* @throws DocumentException
* @throws IOException
*/
private static Font getTitleFont() throws DocumentException, IOException
{
return getFont(GDM.getUrlString(GDM.FONT_HEADER_CH), FONT_SIZE_TITLE, Font.NORMAL, GDM.COLOR_333333);
}
/**
* @return 获取标题字体(小)。
* @throws DocumentException
* @throws IOException
*/
private static Font getTitleFont_Small() throws DocumentException, IOException
{
return getFont(GDM.getUrlString(GDM.FONT_HEADER_CH), FONT_SIZE_TITLE - 1f, Font.NORMAL, GDM.COLOR_333333);
}
/**
* @return 获取正文字体。
* @throws DocumentException
* @throws IOException
*/
private static Font getMainTextFont() throws DocumentException, IOException
{
return getFont(GDM.getUrlString(GDM.FONT_NORMAL), FONT_SIZE_MAINTEXT, Font.NORMAL, GDM.COLOR_666666);
}
加一个生成pdf常用的格式工具类
import java.io.IOException;
import java.net.MalformedURLException;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class FinPlan
{
protected Document _document; //文档对象
protected PdfWriter _writer; //pdf文档输出器
public FinPlan(Document document, PdfWriter writer)
{
super();
this._document = document;
this._writer = writer;
}
/**
* 像素到毫米的转换(高度)
* @param px 纵向像素
* @return
*/
public static float px2mm_height(float px)
{
return px * GDM.PAGE_HEIGHT / PageSize.A4.getHeight();
}
/**
* 在指定位置写入文字
* @param text 需要写入的文字
* @param xPoint 距左边位置(毫米)
* @param yPoint 距底边位置(毫米)
*/
protected void writeOnSpLocation(float xPoint, float yPoint, String text, Font font)
{
PdfContentByte pcb = this._writer.getDirectContent();
xPoint = mm2px_width(xPoint);
yPoint = mm2px_height(yPoint);
Paragraph prg = new Paragraph(text, font);
ColumnText.showTextAligned(pcb, PdfContentByte.ALIGN_LEFT, prg, xPoint, yPoint, 0);
}
/**
* 添加标题。
* @param title 标题
* @param font 标题字体
* @param spacingBefore 标题前的空白(毫米)
* @throws DocumentException
* @throws IOException
*/
protected void addTitle(String title, Font font, float spacingBefore) throws DocumentException, IOException
{
addTitle(title, font, spacingBefore, 0f);
}
/**
* 添加标题。
* @param title 标题
* @param font 标题字体
* @param spacingBefore 标题前的空白(毫米)
* @param spacingAfter 标题后的空白(毫米)
* @throws DocumentException
* @throws IOException
*/
protected void addTitle(String title, Font font, float spacingBefore, float spacingAfter) throws DocumentException, IOException
{
Paragraph prg = new Paragraph(title, font);
spacingBefore = mm2px_height(spacingBefore);
prg.setSpacingBefore(prg.getLeading() * -1 + prg.getFont().getSize() * 0.8f + spacingBefore);
//prg.setSpacingAfter(spacingAfter);
this._document.add(prg);
addSpan(spacingAfter);
}
/**
* 添加标题。
* @param title 标题
* @param font 标题字体
* @param spacingBefore 标题前的空白(毫米)
* @param spacingAfter 标题后的空白(毫米)
* @param alignment 标题的对齐方式(居中用Element.ALIGN_CENTER)
* @throws DocumentException
* @throws IOException
*/
protected void addTitle(String title, Font font, float spacingBefore, float spacingAfter, int alignment) throws DocumentException, IOException
{
Paragraph prg = new Paragraph(title, font);
spacingBefore = mm2px_height(spacingBefore);
prg.setSpacingBefore(prg.getLeading() * -1 + prg.getFont().getSize() * 0.8f + spacingBefore);
prg.setAlignment(alignment);
//prg.setSpacingAfter(spacingAfter); 改用下面的 addSpan(spacingAfter);
this._document.add(prg);
addSpan(spacingAfter);
}
/**
* 添加段落文本。
* @param text 段落文本
* @param font 字体
* @param spacingBefore 段落前的空白(毫米)
* @param leadingMult 文本行间距倍数
* @throws DocumentException
*/
protected void addParagraphText(String text, Font font, float spacingBefore, float leadingMult) throws DocumentException
{
addParagraphText(text, font, spacingBefore, 0f, leadingMult);
}
/**
* 添加段落文本。
* @param text 段落文本
* @param font 字体
* @param spacingBefore 段落前的空白(毫米)
* @param spacingAfter 段落后的空白(毫米)
* @param leadingMult 文本行间距倍数
* @throws DocumentException
*/
protected void addParagraphText(String text, Font font, float spacingBefore, float spacingAfter, float leadingMult) throws DocumentException
{
Paragraph prg = new Paragraph(text, font); //.trim()
spacingBefore = mm2px_height(spacingBefore);
//spacingAfter = mm2px_height(spacingAfter);
prg.setLeading(prg.getLeading() * leadingMult);
prg.setSpacingBefore(prg.getLeading() * -1f + prg.getFont().getSize() * 0.8f + spacingBefore);
//prg.setSpacingAfter(spacingAfter);
//prg.setFirstLineIndent(prg.getFont().getSize() * 2f); //首行缩进
prg.setAlignment(Element.ALIGN_LEFT); //对齐方式
this._document.add(prg);
addSpan(spacingAfter);
}
/**
* 添加跨页后不再起作用的间隔。
* @param gap 间隔大小(毫米)
* @throws DocumentException
*/
protected void addSpan(float gap) throws DocumentException
{
PdfPTable spanTable = new PdfPTable(1);
spanTable.setTotalWidth(this._document.right() - this._document.left());
spanTable.setLockedWidth(true);
spanTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);
spanTable.setSpacingAfter(mm2px_height(gap)); //表后面的间隔,跨页之后不再起作用,要的就是这个效果
spanTable.addCell("");
this._document.add(spanTable);
}
/**
* 添加每一章的头部文字。
* @param headerCH 头部中文
* @param headerEN 头部英文
* @throws DocumentException
* @throws IOException
*/
protected void addChapterHeader(String headerCH, String headerEN) throws DocumentException, IOException
{
Font fontCH = getFont(GDM.getUrlString(GDM.FONT_HEADER_CH), GDM.FONT_SIZE_HEADER_CH, Font.NORMAL, GDM.COLOR_GOLD);
Font fontEN = getFont(GDM.getUrlString(GDM.FONT_HEADER_EN), GDM.FONT_SIZE_HEADER_EN, Font.NORMAL, GDM.COLOR_GOLD);
Phrase phrase = new Phrase();
Chunk chunkCH = new Chunk(headerCH, fontCH);
phrase.add(chunkCH);
phrase.add(Chunk.NEWLINE);
Chunk chunkEN = new Chunk(headerEN, fontEN);
phrase.add(chunkEN);
Paragraph prg = new Paragraph(phrase);
prg.setSpacingAfter(mm2px_width(GDM.SPACING_AFTER_HEADER));
this._document.add(prg);
}
/**
* 添加小节的头部图片
* @param imgFilename 含路径的图片文件名
* @throws MalformedURLException
* @throws IOException
* @throws DocumentException
*/
protected void addSectionHeader(String imgFilename) throws MalformedURLException, IOException, DocumentException
{
Paragraph prg = new Paragraph("");
prg.setLeading(0);
this._document.add(prg);//在新开页中,上面段落的行间距会影响图片的位置
float width = GDM.PAGE_WIDTH - GDM.MARGIN_LEFT - GDM.MARGIN_RIGHT;
float height = GDM.HEIGHT_SECTIONHEADER;
addImage(imgFilename, width, height);
}
/**
* 添加图片。
* @param imgFilename 含路径的图片文件名
* @param width 图片宽度(毫米)
* @param height 图片高度(毫米)
* @throws MalformedURLException
* @throws IOException
* @throws DocumentException
*/
protected void addImage(String imgFilename, float width, float height) throws MalformedURLException, IOException, DocumentException
{
Image img = Image.getInstance(imgFilename);
addImage(img, width, height);
}
/**
* 添加图片。
* @param imgByte 图片内存数组
* @param width 图片宽度(毫米)
* @param height 图片高度(毫米)
* @throws MalformedURLException
* @throws IOException
* @throws DocumentException
*/
protected void addImage(byte[] imgByte, float width, float height) throws MalformedURLException, IOException, DocumentException
{
Image img = Image.getInstance(imgByte);
addImage(img, width, height);
}
/**
* 添加图片。
* @param img 图片
* @param width 图片宽度(毫米)
* @param height 图片高度(毫米)
* @throws DocumentException
*/
private void addImage(Image img, float width, float height) throws DocumentException
{
img.setAlignment(Image.ALIGN_LEFT);
width = mm2px_width(width);
height = mm2px_height(height);
img.scaleAbsolute(width, height);
this._document.add(img);
}
/**
* 在指定位置添加图片。
* @param imgFilename 含路径的图片文件名
* @param width 图片宽度(毫米)
* @param height 图片高度(毫米)
* @param xPoint 距左边位置(毫米)
* @param yPoint 距底边位置(毫米)
* @throws MalformedURLException
* @throws IOException
* @throws DocumentException
*/
protected void addImageOnSpLocation(String imgFilename, float width, float height, float xPoint, float yPoint) throws MalformedURLException, IOException, DocumentException
{
Image img = Image.getInstance(imgFilename);
img.setAlignment(Image.ALIGN_LEFT);
width = mm2px_width(width);
height = mm2px_height(height);
img.scaleAbsolute(width, height);
xPoint = mm2px_width(xPoint);
yPoint = mm2px_height(yPoint);
img.setAbsolutePosition(xPoint, yPoint);
this._document.add(img);
}
/**
* 画线。
* @param beginX 开始X坐标(毫米)
* @param beginY 开始Y坐标(毫米)
* @param endX 终止X坐标(毫米)
* @param endY 终止Y坐标(毫米)
* @param lineWidth
* @param color
*/
protected void drawLint(float beginX, float beginY, float endX, float endY, float lineWidth, BaseColor color)
{
PdfContentByte cb = _writer.getDirectContent();
cb.setLineWidth(lineWidth);
cb.setColorStroke(color);
beginX = mm2px_width(beginX);
beginY = mm2px_height(beginY);
endX = mm2px_width(endX);
endY = mm2px_height(endY);
cb.moveTo(beginX, beginY);
cb.lineTo(endX, endY);
cb.stroke();
}
/**
* 添加新的页面
*/
protected void newPage()
{
this._document.newPage();
//this._writer.setPageEmpty(false); //fasle-页内容为空依然显示; true-页内容为空不会显示
}
/**
* 获取字体。
* @param fontname 字体名称(含路径)
* @param fontsize 字体大小
* @param fontstyle 字体风格
* @param color 字体颜色
* @return 字体
* @throws DocumentException
* @throws IOException
*/
public static Font getFont(String fontname, float fontsize, int fontstyle, BaseColor color) throws DocumentException, IOException
{
BaseFont bfont = BaseFont.createFont(fontname, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
return new Font(bfont, fontsize, fontstyle, color);
}
/**
* 像素到毫米的转换(宽度)
* @param px 横向像素
* @return
*/
public static float px2mm_width(float px)
{
return px * GDM.PAGE_WIDTH / PageSize.A4.getWidth();
}
/**
* 毫米到像素的转换(宽度)
* @param mm 横向毫米
* @return
*/
public static float mm2px_width(float mm)
{
return mm * PageSize.A4.getWidth() / GDM.PAGE_WIDTH; //A4纸宽210毫米
}
/**
* 毫米到像素的转换(高度)
* @param mm 纵向毫米
* @return
*/
public static float mm2px_height(float mm)
{
return mm * PageSize.A4.getHeight() / GDM.PAGE_HEIGHT; //A4纸高297毫米
}
/**
* 添加法律声明、我们的观点、假设和依据、资产配置策略。
* @version 2017-03-30
* @param segments 文字或图片
* @param font 字体
* @param spacingBefore 段落前的空白(毫米)
* @param leadingMult 行间距
* @throws MalformedURLException
* @throws IOException
* @throws DocumentException
*/
protected void addPdfWord(Object[] segments, Font font, float spacingBefore, float leadingMult) throws MalformedURLException, IOException, DocumentException
{
for(Object obj : segments)
{
if(obj instanceof byte[])
{
Image img = Image.getInstance((byte[])obj);
addImageTab(img);
}
else if(obj instanceof String)
{
addParagraphText((String)obj, font, spacingBefore, px2mm_height(font.getSize()) * leadingMult, leadingMult);
}
}
}
/**
* 以表格的方式添加图片。
* @version 2017-04-19
* @param img 图片
* @throws DocumentException
*/
protected void addImageTab(Image img) throws DocumentException
{
float imgWidth = img.getWidth();
float imgHeight = img.getHeight();
float docWidth = this._document.right() - this._document.left();
float docHeight = this._document.top() - this._document.bottom() - 5f * 2;
float scalePercent_w = 100f;
if(imgWidth > docWidth) scalePercent_w = docWidth * 100f / imgWidth;
float scalePercent_h = 100f;
if(imgHeight > docHeight) scalePercent_h = docHeight * 100f / imgHeight;
float scalePercent = Math.min(scalePercent_w, scalePercent_h);
float fixedHeight = imgHeight * scalePercent / 100f;
img.setAlignment(Image.ALIGN_LEFT);
img.scalePercent(scalePercent);
PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100f);
PdfPCell imgCell = new PdfPCell(img);
imgCell.setPadding(0f);
imgCell.setFixedHeight(fixedHeight);
imgCell.setBorder(Rectangle.NO_BORDER);
table.addCell(imgCell);
table.setHorizontalAlignment(Element.ALIGN_CENTER);
table.setSpacingAfter(5f);
table.setSpacingBefore(5f);
table.keepRowsTogether(0);
this._document.add(table);
}
/**
* 根据所在区域的宽高对图片进行不变形缩放。
* @param imgByte 图片
* @param scaleWidth 所在区域宽度
* @param scaleHeight 所在区域高度
* @return
* @throws BadElementException
* @throws MalformedURLException
* @throws IOException
*/
protected Image scaledImage(byte[] imgByte, float scaleWidth, float scaleHeight) throws BadElementException, MalformedURLException, IOException
{
Image img = Image.getInstance(imgByte);
float imgWidth = img.getWidth();
float imgHeight = img.getHeight();
float scalePercent_w = 100f;
if(imgWidth > scaleWidth) scalePercent_w = scaleWidth * 100f / imgWidth;
float scalePercent_h = 100f;
if(imgHeight > scaleHeight) scalePercent_h = scaleHeight * 100f / imgHeight;
float scalePercent = Math.min(scalePercent_w, scalePercent_h);
img.setAlignment(Image.ALIGN_LEFT);
img.scalePercent(scalePercent);
return img;
}
/**
* 获取文档可操作区域的宽度(像素)。
* @return
*/
protected float getDocWidth()
{
return this._document.right() - this._document.left();
}
}
补充:java动态生成pdf含表格table和 合并两个pdf文件功能
1.首先一样需要maven依赖包:
2.废话不多说,上代码,直接拿去运行测试:
public static void test1(){//生成pdf
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:/测试.pdf"));
document.open();
document.add(new Paragraph("就是测试下",font));//引用字体
document.add(new Paragraph("真的测试下",font));//引用字体
float[] widths = {25f,25f,25f };// 设置表格的列宽和列数 默认是4列
PdfPTable table = new PdfPTable(widths);// 建立一个pdf表格
table.setSpacingBefore(20f);
table.setWidthPercentage(100);// 设置表格宽度为100%
PdfPCell cell = null;
cell = new PdfPCell(new Paragraph("姓名",font));//
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("性别",font));//
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("身份证号",font));//
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
//以下代码的作用是创建100行数据,其中每行有四列,列依次为 编号 姓名 性别 备注
for (int i = 1; i <=10; i++) {
//设置编号单元格
PdfPCell cell11=new PdfPCell(new Paragraph("aa名媛",font));
PdfPCell cell22=new PdfPCell(new Paragraph("bb女",font));
PdfPCell cell33=new PdfPCell(new Paragraph("cc花姑娘",font));
//单元格水平对齐方式
cell11.setHorizontalAlignment(Element.ALIGN_CENTER);
//单元格垂直对齐方式
cell11.setVerticalAlignment(Element.ALIGN_CENTER);
cell22.setHorizontalAlignment(Element.ALIGN_CENTER);
cell22.setVerticalAlignment(Element.ALIGN_CENTER);
cell33.setHorizontalAlignment(Element.ALIGN_CENTER);
cell33.setVerticalAlignment(Element.ALIGN_CENTER);
table.addCell(cell11);
table.addCell(cell22);
table.addCell(cell33);
}
document.add(table);
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
以下是合并多个pdf文件功能程序,上代码:
//*********合并 pdfFilenames为文件路径数组,targetFileName为目标pdf路径
public static void combinPdf(String[] pdfFilenames, String targetFilename)
throws Exception {
PdfReader reader = null;
Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, new FileOutputStream(targetFilename));
int pageCount = 0;
doc.open();
for (int i = 0; i < pdfFilenames.length; ++i) {
System.out.println(pdfFilenames[i]);
reader = new PdfReader(pdfFilenames[i]);
pageCount = reader.getNumberOfPages();
for (int j = 1; j <= pageCount; ++j) {
pdfCopy.addPage(pdfCopy.getImportedPage(reader, j));
}
}
doc.close();
}
这里附上测试程序:
public static void main(String[] args) throws InterruptedException {
String fillTemplate1 = "E:/测试.pdf";
String fillTemplate2 = "E:/测试.pdf";
String[] st = {fillTemplate1,fillTemplate2};
try {
combinPdf(st,"E:/合并.pdf");
} catch (Exception e) {
IMUgvwe.printStackTrace();
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~