搜档网
当前位置:搜档网 › 利用itext生成复杂pdf

利用itext生成复杂pdf

利用itext生成复杂pdf
利用itext生成复杂pdf

利用itext生成复杂pdf

内容包括:复杂表格的生成(单元格合并,边框,位置布局,背景色)

页脚输出,中文字体输出

划直线

下载包iText-5.0.3.jar

import java.io.FileOutputStream;

import java.io.IOException;

import https://www.sodocs.net/doc/3c10697759.html,.MalformedURLException;

import com.itextpdf.text.*;

import com.itextpdf.text.pdf.BaseFont;

import com.itextpdf.text.pdf.CMYKColor;

import com.itextpdf.text.pdf.ColumnText;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;

import com.itextpdf.text.pdf.draw.LineSeparator;

public class ITextTest{

// public void onEndPage(PdfWriter pdfWriter, Document document) {

// ColumnText.showTextAligned(pdfWriter.getDirectContent(),

// Element.ALIGN_CENTER,new Phrase(String.format("page %d", //设置页码

// pdfWriter.getPageNumber())),300,50,0);

// }

public static void main(String[] args) throws DocumentException,

MalformedURLException, IOException {

// 1、实例化文档对象

Document document = new Document(PageSize.A4, 37, 30, 50, 40);

// 2、创建PdfWriter 对象(其他编写器包括HtmlWriter、RtfWriter、XmlWriter)

PdfWriter writer = PdfWriter.getInstance(document,

new FileOutputStream("d:\\new.pdf")); //生成的pdf存放位置document.open();

//中文字体格式

// BaseFont bfChinese = BaseFont.createFont("SIMYOU.TTF", //SIMYOU.TTF在本地目录下去拷贝C:/WINDOWS/Fonts/SIMYOU.TTF

// BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

// Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

Font font1=FontFactory.getFont(FontFactory.COURIER,8, Font.BOLD,BaseColor.BLACK);

Font font2=FontFactory.getFont(FontFactory.COURIER,8, Font.NORMAL,BaseColor.BLACK);

Font font3=FontFactory.getFont(FontFactory.COURIER,9, Font.NORMAL,BaseColor.GRAY);

Font font5=FontFactory.getFont(FontFactory.COURIER,8, Font.NORMAL,BaseColor.BLACK);

//设置页脚

LineSeparator line=new LineSeparator(0.5f,1.3f,BaseColor.CYAN,Element.ALIGN_CENTER,0);

//直线

Chunk c=new Chunk(line); //line不能直接放入Paragraph或Phrase中

ColumnText.showTextAligned(writer.getDirectContent(),

1,new Paragraph(String.format("Notes"),font3),55,55,0);//通过坐标控制显示位置

ColumnText.showTextAligned(writer.getDirectContent(),

Element.ALIGN_CENTER,new Paragraph(c),300,50,0);

//设置页码

// ColumnText.showTextAligned(writer.getDirectContent(),

// Element.ALIGN_CENTER,new Phrase(String.format("page %d",

// writer.getPageNumber())),300,50,0);

// document.newPage();

PdfPTable t = new PdfPTable(2);//创建表格

t.setWidthPercentage(100);//百分比

t.setSpacingBefore(20);

//表格元素1

Image image1 = Image.getInstance("1.jpg");

image1.scaleAbsolute(170f, 100f);//宽、高

PdfPCell c1 = new PdfPCell();

c1.addElement(image1);

Paragraph []parr=new Paragraph[16];

parr[0] = new Paragraph("Zycoo EU",font1);

parr[1] = new Paragraph("LS 21 Armstrong House,First Avenue",font2);

parr[2] = new Paragraph("Doncaster south yorkshire DN9 3GA",font2);

parr[3] = new Paragraph("United Kingdom",font2);

parr[4] = new Paragraph("VAT GB2065852514",font2);

for(int i=0;i<5;i++){

c1.addElement(parr[i]);

}

c1.setBorder(0); //设置单元格边框的无颜色

t.addCell(c1);

//表格元素2

Image image2 = Image.getInstance("2.jpg");

image2.setAlignment(Image.RIGHT);

image2.scaleAbsolute(110f, 110f);//宽、高,值为像素

PdfPCell c2 = new PdfPCell();

c2.addElement(image2); //设置图像对齐方式

c2.setBorder(0); //

t.addCell(c2);

//表格元素3

parr[5] = new Paragraph("Bill To",font2);

parr[6]= new Paragraph("A Time 2 Change T/A VoIP.PT",font2);

parr[7]= new Paragraph("Rua Consiglieri Pedroso, 123 (Iberfar)",font2); parr[8]= new Paragraph("Edificio H ",font2);

PdfPCell c3 = new PdfPCell();

c3.addElement(new Paragraph(" "));

for(int i=5;i<8;i++)

c3.addElement(parr[i]);

c3.setBorder(0);

t.addCell(c3);

//元素4

PdfPCell c4 = new PdfPCell();

c4.setBorder(0);

t.addCell(c4);

//元素5

PdfPCell c5 = new PdfPCell();

parr[9]= new Paragraph("Queluz de Baixo",font2);

parr[10]= new Paragraph("2730-501 Barcarena ",font2);

parr[11]= new Paragraph("Portugal",font2);

c5.addElement(new Paragraph(" "));

for(int i=9;i<12;i++)

c5.addElement(parr[i]);

c5.setBorder(0);

t.addCell(c5);

//元素6

PdfPCell c6 = new PdfPCell();

c6.setBorder(0);

t.addCell(c6);

//元素7

PdfPCell c7 = new PdfPCell();

parr[12]= new Paragraph("Ship To",font2);

parr[13]= new Paragraph("Rua Consiglieri Pedroso, 123",font2);

parr[14] = new Paragraph("(Iberfar)",font2);

parr[15]= new Paragraph("Edificio H",font2);

c7.addElement(new Paragraph(" "));

for(int i=12;i<16;i++)

c7.addElement(parr[i]);

c7.setBorder(0);

t.addCell(c7);

//元素8

PdfPCell c8 = new PdfPCell();

PdfPTable tt = new PdfPTable(2);//向表格单项中镶嵌表格

tt.getDefaultCell().setBorder(0);

tt.addCell(" ");tt.addCell(" ");

tt.addCell(" ");tt.addCell(" ");

Paragraph []pars=new Paragraph[10];

PdfPCell []cells = new PdfPCell[10];

pars[0]= new Paragraph("Invoice Date :",font2);

pars[1]=new Paragraph("09/03/2015",font2);

pars[2]=new Paragraph("Terms :",font2);

pars[3]=new Paragraph("Due on Receipt",font2);

pars[4]=new Paragraph("Due Date :",font2);

pars[5]=new Paragraph("09/03/2015",font2);

pars[6]=new Paragraph("P.O.# :",font2);

pars[7]=new Paragraph("EU VAT - PT507441338",font2);

pars[8]=new Paragraph("EU VAT No. :",font2);

pars[9]=new Paragraph("PT 507441338",font2);

for(int i=0;i<10;i++){

pars[i].setAlignment(2);//设置该段落为靠右显示

cells[i]=new PdfPCell();

cells[i].setBorder(0);

//cell必须有,再addElement添加才能设置对齐方式

//cell1.setPhrase(para);是错的

cells[i].addElement(pars[i]);

tt.addCell(cells[i]);

}

tt.setWidthPercentage(100);//百分比

c8.addElement(tt);

c8.setVerticalAlignment(Element.ALIGN_RIGHT);

c8.setRowspan(2); //向下合并单元格

c8.setBorder(0);

t.addCell(c8);

//元素9

PdfPCell c9 = new PdfPCell();

Paragraph par17 = new Paragraph("Queluz de Baixo",font2); Paragraph par18 = new Paragraph("2730-501 Barcarena",font2); Paragraph par19 = new Paragraph("Portugal",font2);

c9.addElement(new Paragraph(" "));

c9.addElement(par17);

c9.addElement(par18);

c9.addElement(par19);

c9.setBorder(0);

t.addCell(c9);

//第二张大表

PdfPTable t2 = new PdfPTable(5);//创建表格

int width[] = {8,47,10,10,25};//设置每列宽度比例

t2.setWidths(width);

t2.setWidthPercentage(100);//百分比

t2.getDefaultCell().setMinimumHeight(25);

t2.getDefaultCell().setBorder(0);

//设置默认最低高度(再加入空格行时候可以直接用);t2.addCell(" ");显示为默认高度

//向第二张大表中加入元素

Font font4=FontFactory.getFont(FontFactory.COURIER,8, Font.BOLD,BaseColor.WHITE);

PdfPCell [][]ccs1 = new PdfPCell[5][5];

Paragraph [][]ppars1 = new Paragraph[5][5];

ppars1[0][0]=new Paragraph("#",font4);

ppars1[0][1]=new Paragraph("Item & Description",font4);

ppars1[0][2]= new Paragraph("Qty",font4);

ppars1[0][3]=new Paragraph("Rate",font4);

ppars1[0][4]=new Paragraph("Amount",font4);

ppars1[1][0]=new Paragraph("1",font2);

ppars1[1][1]=new Paragraph("U20-A202",font2);

ppars1[1][2]= new Paragraph("1,00",font2);

ppars1[1][3]= new Paragraph("140,00",font2);

ppars1[1][4]=new Paragraph("140,00",font2);

ppars1[2][0]=new Paragraph("2",font2);

ppars1[2][1]=new Paragraph("2GSM",font2);

ppars1[2][2]=new Paragraph("1,00",font2);

ppars1[2][3]=new Paragraph("117,00",font2);

ppars1[2][4]=new Paragraph("117,00",font2);

ppars1[3][0]=new Paragraph("3",font2);

ppars1[3][1]= new Paragraph("Coofone D60",font2);

ppars1[3][2]= new Paragraph("5,00",font2);

ppars1[3][3]= new Paragraph("46,80",font2);

ppars1[3][4]= new Paragraph("234,00",font2);

ppars1[4][0]= new Paragraph("4",font2);

ppars1[4][1]= new Paragraph("Shipping",font2);

ppars1[4][2]= new Paragraph("1,00",font2);

ppars1[4][3]=new Paragraph("38,60",font2);

ppars1[4][4]=new Paragraph("38,60",font2);

for(int i=0;i<5;i++){

for(int j=0;j<5;j++){

ccs1[i][j]=new PdfPCell();

if(i==0){

ccs1[i][j].setBackgroundColor(BaseColor.DARK_GRAY);

}

if(i==0){

ccs1[i][j].setBorder(0);//无边框

}

else{

ccs1[i][j].setBorderColor(BaseColor.CYAN);

ccs1[i][j].setBorder(Rectangle.BOTTOM);//设置只有下边框NO_BORDER(无边框)、TOP上边框、

}

if(j==0){

ccs1[i][j].setMinimumHeight(25);// 设置行高(每一行的第一个设置就OK)

ppars1[i][j].setAlignment(1);//居中显示

}

else if(j==1){

ppars1[i][j].setAlignment(0);

}

else{

ppars1[i][j].setAlignment(2);//靠右显示

}

ccs1[i][j].addElement(ppars1[i][j]);

t2.addCell(ccs1[i][j]);

}

}

PdfPCell [][]ccs2 = new PdfPCell[5][2];

Paragraph [][]ppars2 = new Paragraph[5][2];

ppars2[0][0]= new Paragraph("Sub Total",font2);

ppars2[0][1]=new Paragraph("529,60",font2);

ppars2[1][0]= new Paragraph("Zero Rate (0%)",font2);

ppars2[1][1]=new Paragraph("0,00",font2);

ppars2[2][0]= new Paragraph("Total",font1);

ppars2*2+*1+=new Paragraph("€529,60",font1);

ppars2[3][0]= new Paragraph("Payment Made",font2);

ppars2[3][1]=new Paragraph("(-) 529,60",font2);

ppars2[4][0]= new Paragraph("Balance Due",font1);

ppars2*4+*1+=new Paragraph("€0,00",font1);

for(int i=0;i<5;i++){

t2.addCell("");

t2.addCell("");

for(int j=0;j<2;j++){

ccs2[i][j]=new PdfPCell();

if(j==0)

ccs2[i][j].setColspan(2); //合并单元格(2列)

ccs2[i][j].setBorder(0); //无边框

ppars2[i][j].setAlignment(2); //靠右显示

ccs2[i][j].addElement(ppars2[i][j]);

t2.addCell(ccs2[i][j]);

}

}

Paragraph parag =new Paragraph("", FontFactory.getFont(

FontFactory.HELVETICA, 18, Font.BOLDITALIC, new CMYKColor(0,

255, 255, 17)));

parag.add(t);

parag.add(t2);

document.add(parag);

document.newPage(); //生成新页

ColumnText.showTextAligned(writer.getDirectContent(), //设置页脚

Element.ALIGN_CENTER,new Paragraph(c),300,50,0);

document.add(new Paragraph("Bank Details",font5));

document.add(new Paragraph("Bank of Scotland, 600, GORGIE ROAD, EDINBURGH, EH11 3XP.",font5));

document.add(new Paragraph("BAN - GB57BOFS80226013044960",font5));

document.add(new Paragraph("Swift - BOFSGB2S",font5));

document.add(new Paragraph(" "));

document.add(new Paragraph(" "));

document.add(new Paragraph("Terms & Conditions",font3));

document.add(new Paragraph("Payment in advance of shipmen",font5));

document.close();

}

}

相关主题