`
dannyhz
  • 浏览: 398299 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

操作pdf的itext 各种操作实例

 
阅读更多
http://www.open-open.com/lib/view/open1339726488115.html

http://rensanning.iteye.com/blog/1538689

iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 

http://itextpdf.com/ 

版本:itextpdf-5.2.1.jar

1、生成一个PDF 
//Step 1—Create a Document.
Document document = new Document();
//Step 2—Get a PdfWriter instance.
PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createSamplePDF.pdf"));
//Step 3—Open the Document.
document.open();
//Step 4—Add content.
document.add(new Paragraph("Hello World"));
//Step 5—Close the Document.
document.close();


2、页面大小,页面背景色,页边空白,Title,Author,Subject,Keywords 
//页面大小
Rectangle rect = new Rectangle(PageSize.B5.rotate());
//页面背景色
rect.setBackgroundColor(BaseColor.ORANGE);

Document doc = new Document(rect);

PdfWriter writer = PdfWriter.getInstance(doc, out);

//PDF版本(默认1.4)
writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2);

//文档属性
doc.addTitle("Title@sample");
doc.addAuthor("Author@rensanning");
doc.addSubject("Subject@iText sample");
doc.addKeywords("Keywords@iText");
doc.addCreator("Creator@iText");

//页边空白
doc.setMargins(10, 20, 30, 40);

doc.open();
doc.add(new Paragraph("Hello World"));

d1.gif 

3、设置密码 
PdfWriter writer = PdfWriter.getInstance(doc, out);

// 设置密码为:"World"
writer.setEncryption("Hello".getBytes(), "World".getBytes(),
		PdfWriter.ALLOW_SCREENREADERS,
		PdfWriter.STANDARD_ENCRYPTION_128);

doc.open();
doc.add(new Paragraph("Hello World"));

d2.gif 

4、添加Page 
document.open();
document.add(new Paragraph("First page"));
document.add(new Paragraph(Document.getVersion()));

document.newPage();
writer.setPageEmpty(false);

document.newPage();
document.add(new Paragraph("New page"));


5、添加水印(背景图) 
//图片水印
PdfReader reader = new PdfReader(FILE_DIR + "setWatermark.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR
		+ "setWatermark2.pdf"));

Image img = Image.getInstance("resource/watermark.jpg");
img.setAbsolutePosition(200, 400);
PdfContentByte under = stamp.getUnderContent(1);
under.addImage(img);

//文字水印
PdfContentByte over = stamp.getOverContent(2);
over.beginText();
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,
		BaseFont.EMBEDDED);
over.setFontAndSize(bf, 18);
over.setTextMatrix(30, 30);
over.showTextAligned(Element.ALIGN_LEFT, "DUPLICATE", 230, 430, 45);
over.endText();

//背景图
Image img2 = Image.getInstance("resource/test.jpg");
img2.setAbsolutePosition(0, 0);
PdfContentByte under2 = stamp.getUnderContent(3);
under2.addImage(img2);

stamp.close();
reader.close();


6、插入Chunk, Phrase, Paragraph, List 
//Chunk对象: a String, a Font, and some attributes
document.add(new Chunk("China"));
document.add(new Chunk(" "));
Font font = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);
Chunk id = new Chunk("chinese", font);
id.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
id.setTextRise(6);
document.add(id);
document.add(Chunk.NEWLINE);

document.add(new Chunk("Japan"));
document.add(new Chunk(" "));
Font font2 = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);
Chunk id2 = new Chunk("japanese", font2);
id2.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
id2.setTextRise(6);
id2.setUnderline(0.2f, -2f);
document.add(id2);
document.add(Chunk.NEWLINE);

//Phrase对象: a List of Chunks with leading
document.newPage();
document.add(new Phrase("Phrase page"));

Phrase director = new Phrase();
Chunk name = new Chunk("China");
name.setUnderline(0.2f, -2f);
director.add(name);
director.add(new Chunk(","));
director.add(new Chunk(" "));
director.add(new Chunk("chinese"));
director.setLeading(24);
document.add(director);

Phrase director2 = new Phrase();
Chunk name2 = new Chunk("Japan");
name2.setUnderline(0.2f, -2f);
director2.add(name2);
director2.add(new Chunk(","));
director2.add(new Chunk(" "));
director2.add(new Chunk("japanese"));
director2.setLeading(24);
document.add(director2);
		
//Paragraph对象: a Phrase with extra properties and a newline
document.newPage();
document.add(new Paragraph("Paragraph page"));

Paragraph info = new Paragraph();
info.add(new Chunk("China "));
info.add(new Chunk("chinese"));
info.add(Chunk.NEWLINE);
info.add(new Phrase("Japan "));
info.add(new Phrase("japanese"));
document.add(info);

//List对象: a sequence of Paragraphs called ListItem
document.newPage();
List list = new List(List.ORDERED);
for (int i = 0; i < 10; i++) {
	ListItem item = new ListItem(String.format("%s: %d movies",
			"country" + (i + 1), (i + 1) * 100), new Font(
			Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE));
	List movielist = new List(List.ORDERED, List.ALPHABETICAL);
	movielist.setLowercase(List.LOWERCASE);
	for (int j = 0; j < 5; j++) {
		ListItem movieitem = new ListItem("Title" + (j + 1));
		List directorlist = new List(List.UNORDERED);
		for (int k = 0; k < 3; k++) {
			directorlist.add(String.format("%s, %s", "Name1" + (k + 1),
					"Name2" + (k + 1)));
		}
		movieitem.add(directorlist);
		movielist.add(movieitem);
	}
	item.add(movielist);
	list.add(item);
}
document.add(list);


7、插入Anchor, Image, Chapter, Section 
//Anchor对象: internal and external links
Paragraph country = new Paragraph();
Anchor dest = new Anchor("china", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD, BaseColor.BLUE));
dest.setName("CN");
dest.setReference("http://www.china.com");//external
country.add(dest);
country.add(String.format(": %d sites", 10000));
document.add(country);

document.newPage();
Anchor toUS = new Anchor("Go to first page.", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD, BaseColor.BLUE));
toUS.setReference("#CN");//internal
document.add(toUS);

//Image对象
document.newPage();
Image img = Image.getInstance("resource/test.jpg");
img.setAlignment(Image.LEFT | Image.TEXTWRAP);
img.setBorder(Image.BOX);
img.setBorderWidth(10);
img.setBorderColor(BaseColor.WHITE);
img.scaleToFit(1000, 72);//大小
img.setRotationDegrees(-30);//旋转
document.add(img);

//Chapter, Section对象(目录)
document.newPage();
Paragraph title = new Paragraph("Title");
Chapter chapter = new Chapter(title, 1);

title = new Paragraph("Section A");
Section section = chapter.addSection(title);
section.setBookmarkTitle("bmk");
section.setIndentation(30);
section.setBookmarkOpen(false);
section.setNumberStyle(
Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT);

Section subsection = section.addSection(new Paragraph("Sub Section A"));
subsection.setIndentationLeft(20);
subsection.setNumberDepth(1);

document.add(chapter);


8、画图 
//左右箭头
document.add(new VerticalPositionMark() {

	public void draw(PdfContentByte canvas, float llx, float lly,
			float urx, float ury, float y) {
		canvas.beginText();
		BaseFont bf = null;
		try {
			bf = BaseFont.createFont(BaseFont.ZAPFDINGBATS, "", BaseFont.EMBEDDED);
		} catch (Exception e) {
			e.printStackTrace();
		}
		canvas.setFontAndSize(bf, 12);
		
		// LEFT
		canvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), llx - 10, y, 0);
		// RIGHT
		canvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), urx + 10, y + 8, 180);
		
		canvas.endText();
	}
});

//直线
Paragraph p1 = new Paragraph("LEFT");
p1.add(new Chunk(new LineSeparator()));
p1.add("R");
document.add(p1);
//点线
Paragraph p2 = new Paragraph("LEFT");
p2.add(new Chunk(new DottedLineSeparator()));
p2.add("R");
document.add(p2);
//下滑线
LineSeparator UNDERLINE = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);
Paragraph p3 = new Paragraph("NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN");
p3.add(UNDERLINE);
document.add(p3);

d3.gif 

9、设置段落 
Paragraph p = new Paragraph("In the previous example, you added a header and footer with the showTextAligned() method. This example demonstrates that it’s sometimes more interesting to use PdfPTable and writeSelectedRows(). You can define a bottom border for each cell so that the header is underlined. This is the most elegant way to add headers and footers, because the table mechanism allows you to position and align lines, images, and text.");

//默认
p.setAlignment(Element.ALIGN_JUSTIFIED);
document.add(p);

document.newPage();
p.setAlignment(Element.ALIGN_JUSTIFIED);
p.setIndentationLeft(1 * 15f);
p.setIndentationRight((5 - 1) * 15f);
document.add(p);

//居右
document.newPage();
p.setAlignment(Element.ALIGN_RIGHT);
p.setSpacingAfter(15f);
document.add(p);

//居左
document.newPage();
p.setAlignment(Element.ALIGN_LEFT);
p.setSpacingBefore(15f);
document.add(p);

//居中
document.newPage();
p.setAlignment(Element.ALIGN_CENTER);
p.setSpacingAfter(15f);
p.setSpacingBefore(15f);
document.add(p);


10、删除Page 
FileOutputStream out = new FileOutputStream(FILE_DIR + "deletePage.pdf");

Document document = new Document();

PdfWriter writer = PdfWriter.getInstance(document, out);

document.open();
document.add(new Paragraph("First page"));
document.add(new Paragraph(Document.getVersion()));

document.newPage();
writer.setPageEmpty(false);

document.newPage();
document.add(new Paragraph("New page"));

document.close();

PdfReader reader = new PdfReader(FILE_DIR + "deletePage.pdf");
reader.selectPages("1,3");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR
		+ "deletePage2.pdf"));
stamp.close();
reader.close();


11、插入Page 
FileOutputStream out = new FileOutputStream(FILE_DIR + "insertPage.pdf");

Document document = new Document();

PdfWriter.getInstance(document, out);

document.open();
document.add(new Paragraph("1 page"));

document.newPage();
document.add(new Paragraph("2 page"));

document.newPage();
document.add(new Paragraph("3 page"));

document.close();

PdfReader reader = new PdfReader(FILE_DIR + "insertPage.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR
		+ "insertPage2.pdf"));

stamp.insertPage(2, reader.getPageSize(1));

ColumnText ct = new ColumnText(null);
ct.addElement(new Paragraph(24, new Chunk("INSERT PAGE")));
ct.setCanvas(stamp.getOverContent(2));
ct.setSimpleColumn(36, 36, 559, 770);

stamp.close();
reader.close();


12、排序page 
PdfWriter writer = PdfWriter.getInstance(doc, out);
writer.setLinearPageMode();

doc.open();
doc.add(new Paragraph("1 page"));
doc.newPage();
doc.add(new Paragraph("2 page"));
doc.newPage();
doc.add(new Paragraph("3 page"));
doc.newPage();
doc.add(new Paragraph("4 page"));
doc.newPage();
doc.add(new Paragraph("5 page"));

int[] order = {4,3,2,1};
writer.reorderPages(order);


13、目录 
// Code 1
document.add(new Chunk("Chapter 1").setLocalDestination("1"));

document.newPage();
document.add(new Chunk("Chapter 2").setLocalDestination("2"));
document.add(new Paragraph(new Chunk("Sub 2.1").setLocalDestination("2.1")));
document.add(new Paragraph(new Chunk("Sub 2.2").setLocalDestination("2.2")));

document.newPage();
document.add(new Chunk("Chapter 3").setLocalDestination("3"));

// Code 2
PdfContentByte cb = writer.getDirectContent();
PdfOutline root = cb.getRootOutline();

// Code 3
@SuppressWarnings("unused")
PdfOutline oline1 = new PdfOutline(root, PdfAction.gotoLocalPage("1", false), "Chapter 1");

PdfOutline oline2 = new PdfOutline(root, PdfAction.gotoLocalPage("2", false), "Chapter 2");
oline2.setOpen(false);

@SuppressWarnings("unused")
PdfOutline oline2_1 = new PdfOutline(oline2, PdfAction.gotoLocalPage("2.1", false), "Sub 2.1");
@SuppressWarnings("unused")
PdfOutline oline2_2 = new PdfOutline(oline2, PdfAction.gotoLocalPage("2.2", false), "Sub 2.2");

@SuppressWarnings("unused")
PdfOutline oline3 = new PdfOutline(root, PdfAction.gotoLocalPage("3", false), "Chapter 3");

d4.gif 

14、Header, Footer 
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(FILE_DIR + "setHeaderFooter.pdf"));

writer.setPageEvent(new PdfPageEventHelper() {

	public void onEndPage(PdfWriter writer, Document document) {
		
		PdfContentByte cb = writer.getDirectContent();
        cb.saveState();

        cb.beginText();
		BaseFont bf = null;
		try {
			bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
		} catch (Exception e) {
			e.printStackTrace();
		}
		cb.setFontAndSize(bf, 10);
		
        //Header
		float x = document.top(-20);
		
        //左
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT,
                           "H-Left",
                           document.left(), x, 0);
        //中
        cb.showTextAligned(PdfContentByte.ALIGN_CENTER,
        					writer.getPageNumber()+ " page",
                           (document.right() + document.left())/2,
                           x, 0);
        //右
        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT,
                           "H-Right",
                           document.right(), x, 0);

        //Footer
        float y = document.bottom(-20);

        //左
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT,
                           "F-Left",
                           document.left(), y, 0);
        //中
        cb.showTextAligned(PdfContentByte.ALIGN_CENTER,
        					writer.getPageNumber()+" page",
                           (document.right() + document.left())/2,
                           y, 0);
        //右
        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT,
                           "F-Right",
                           document.right(), y, 0);

        cb.endText();
        
        cb.restoreState();
	}
});

doc.open();
doc.add(new Paragraph("1 page"));        
doc.newPage();
doc.add(new Paragraph("2 page"));        
doc.newPage();
doc.add(new Paragraph("3 page"));        
doc.newPage();
doc.add(new Paragraph("4 page"));


15、左右文字 
PdfWriter writer = PdfWriter.getInstance(document, out);

document.open();

PdfContentByte canvas = writer.getDirectContent();

Phrase phrase1 = new Phrase("This is a test!left");
Phrase phrase2 = new Phrase("This is a test!right");
Phrase phrase3 = new Phrase("This is a test!center");
ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase1, 10, 500, 0);
ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, phrase2, 10, 536, 0);
ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, phrase3, 10, 572, 0);


16、幻灯片放映 
PdfWriter writer = PdfWriter.getInstance(doc, out);

writer.setPdfVersion(PdfWriter.VERSION_1_5);

writer.setViewerPreferences(PdfWriter.PageModeFullScreen);//全屏
writer.setPageEvent(new PdfPageEventHelper() {
	public void onStartPage(PdfWriter writer, Document document) {
		writer.setTransition(new PdfTransition(PdfTransition.DISSOLVE, 3));
		writer.setDuration(5);//间隔时间
	}
});

doc.open();
doc.add(new Paragraph("1 page"));
doc.newPage();
doc.add(new Paragraph("2 page"));
doc.newPage();
doc.add(new Paragraph("3 page"));
doc.newPage();
doc.add(new Paragraph("4 page"));
doc.newPage();
doc.add(new Paragraph("5 page"));


17、压缩PDF到Zip 
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(FILE_DIR + "zipPDF.zip"));
for (int i = 1; i <= 3; i++) {
	ZipEntry entry = new ZipEntry("hello_" + i + ".pdf");
	zip.putNextEntry(entry);
	Document document = new Document();
	PdfWriter writer = PdfWriter.getInstance(document, zip);
	writer.setCloseStream(false);
	document.open();
	document.add(new Paragraph("Hello " + i));
	document.close();
	zip.closeEntry();
}
zip.close();

d5.gif 

18、分割PDF 
FileOutputStream out = new FileOutputStream(FILE_DIR + "splitPDF.pdf");

Document document = new Document();

PdfWriter.getInstance(document, out);

document.open();
document.add(new Paragraph("1 page"));

document.newPage();
document.add(new Paragraph("2 page"));

document.newPage();
document.add(new Paragraph("3 page"));

document.newPage();
document.add(new Paragraph("4 page"));

document.close();

PdfReader reader = new PdfReader(FILE_DIR + "splitPDF.pdf");

Document dd = new Document();
PdfWriter writer = PdfWriter.getInstance(dd, new FileOutputStream(FILE_DIR + "splitPDF1.pdf"));
dd.open();
PdfContentByte cb = writer.getDirectContent();
dd.newPage();
cb.addTemplate(writer.getImportedPage(reader, 1), 0, 0);
dd.newPage();
cb.addTemplate(writer.getImportedPage(reader, 2), 0, 0);
dd.close();
writer.close();

Document dd2 = new Document();
PdfWriter writer2 = PdfWriter.getInstance(dd2, new FileOutputStream(FILE_DIR + "splitPDF2.pdf"));
dd2.open();
PdfContentByte cb2 = writer2.getDirectContent();
dd2.newPage();
cb2.addTemplate(writer2.getImportedPage(reader, 3), 0, 0);
dd2.newPage();
cb2.addTemplate(writer2.getImportedPage(reader, 4), 0, 0);
dd2.close();
writer2.close();


19、合并PDF 
PdfReader reader1 = new PdfReader(FILE_DIR + "splitPDF1.pdf");
PdfReader reader2 = new PdfReader(FILE_DIR + "splitPDF2.pdf");

FileOutputStream out = new FileOutputStream(FILE_DIR + "mergePDF.pdf");

Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, out);

document.open();
PdfContentByte cb = writer.getDirectContent();

int totalPages = 0;
totalPages += reader1.getNumberOfPages();
totalPages += reader2.getNumberOfPages();

java.util.List<PdfReader> readers = new ArrayList<PdfReader>();
readers.add(reader1);
readers.add(reader2);

int pageOfCurrentReaderPDF = 0;
Iterator<PdfReader> iteratorPDFReader = readers.iterator();

// Loop through the PDF files and add to the output.
while (iteratorPDFReader.hasNext()) {
	PdfReader pdfReader = iteratorPDFReader.next();

	// Create a new page in the target for each source page.
	while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
		document.newPage();
		pageOfCurrentReaderPDF++;
		PdfImportedPage page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
		cb.addTemplate(page, 0, 0);
	}
	pageOfCurrentReaderPDF = 0;
}
out.flush();
document.close();
out.close();


20、Annotation 
PdfWriter writer = PdfWriter.getInstance(doc, out);
writer.setLinearPageMode();

doc.open();
doc.add(new Paragraph("1 page"));
doc.add(new Annotation("Title", "This is a annotation!"));

doc.newPage();
doc.add(new Paragraph("2 page"));
Chunk chunk = new Chunk("\u00a0");
chunk.setAnnotation(PdfAnnotation.createText(writer, null, "Title", "This is a another annotation!", false, "Comment"));
doc.add(chunk);

//添加附件
doc.newPage();
doc.add(new Paragraph("3 page"));
Chunk chunk2 = new Chunk("\u00a0\u00a0");
PdfAnnotation annotation = PdfAnnotation.createFileAttachment(
		writer, null, "Title", null,
		"resource/test2.jpg",
		"img.jpg");
annotation.put(PdfName.NAME,
		new PdfString("Paperclip"));
chunk2.setAnnotation(annotation);
doc.add(chunk2);

d6.gif 

21、插入一个Table 
PdfPTable table = new PdfPTable(3);
PdfPCell cell;
cell = new PdfPCell(new Phrase("Cell with colspan 3"));
cell.setColspan(3);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
cell.setRowspan(2);
table.addCell(cell);
table.addCell("row 1; cell 1");
table.addCell("row 1; cell 2");
table.addCell("row 2; cell 1");
table.addCell("row 2; cell 2");

document.add(table);


22、表格嵌套 
PdfPTable table = new PdfPTable(4);

//1行2列
PdfPTable nested1 = new PdfPTable(2);
nested1.addCell("1.1");
nested1.addCell("1.2");

//2行1列
PdfPTable nested2 = new PdfPTable(1);
nested2.addCell("2.1");
nested2.addCell("2.2");

//将表格插入到指定位置
for (int k = 0; k < 24; ++k) {
    if (k == 1) {
        table.addCell(nested1);
    } else if (k == 20) {
        table.addCell(nested2);
    } else {
        table.addCell("cell " + k);
    }
}

document.add(table);


23、设置表格宽度 
PdfPTable table = new PdfPTable(3);
PdfPCell cell;
cell = new PdfPCell(new Phrase("Cell with colspan 3"));
cell.setColspan(3);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
cell.setRowspan(2);
table.addCell(cell);
table.addCell("row 1; cell 1");
table.addCell("row 1; cell 2");
table.addCell("row 2; cell 1");
table.addCell("row 2; cell 2");

//100%
table.setWidthPercentage(100);
document.add(table);        
document.add(new Paragraph("\n\n"));

//宽度50% 居左
table.setHorizontalAlignment(Element.ALIGN_LEFT);
document.add(table);
document.add(new Paragraph("\n\n"));

//宽度50% 居中
table.setHorizontalAlignment(Element.ALIGN_CENTER);
document.add(table);
document.add(new Paragraph("\n\n"));

//宽度50% 居右
table.setWidthPercentage(50);
table.setHorizontalAlignment(Element.ALIGN_RIGHT);
document.add(table);
document.add(new Paragraph("\n\n"));

//固定宽度
table.setTotalWidth(300);
table.setLockedWidth(true);
document.add(table);


24、设置表格前后间隔 
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Paragraph("合并3个单元格",fontZH));
cell.setColspan(3);
table.addCell(cell);
table.addCell("1.1");
table.addCell("2.1");
table.addCell("3.1");
table.addCell("1.2");
table.addCell("2.2");
table.addCell("3.2");

cell = new PdfPCell(new Paragraph("红色边框",fontZH));
cell.setBorderColor(new BaseColor(255, 0, 0));
table.addCell(cell);

cell = new PdfPCell(new Paragraph("合并单2个元格",fontZH));
cell.setColspan(2);
cell.setBackgroundColor(new BaseColor(0xC0, 0xC0, 0xC0));
table.addCell(cell);

table.setWidthPercentage(50);

document.add(new Paragraph("追加2个表格",fontZH));
document.add(table);
document.add(table);

document.newPage();
document.add(new Paragraph("使用'SpacingBefore'和'setSpacingAfter'",fontZH));
table.setSpacingBefore(15f);
document.add(table);
document.add(table);
document.add(new Paragraph("这里没有间隔",fontZH));
table.setSpacingAfter(15f);


25、设置单元格宽度 
//按比例设置单元格宽度
float[] widths = {0.1f, 0.1f, 0.05f, 0.75f};
PdfPTable table = new PdfPTable(widths);
table.addCell("10%");
table.addCell("10%");
table.addCell("5%");
table.addCell("75%");
table.addCell("aa");
table.addCell("aa");
table.addCell("a");
table.addCell("aaaaaaaaaaaaaaa");
table.addCell("bb");
table.addCell("bb");
table.addCell("b");
table.addCell("bbbbbbbbbbbbbbb");
table.addCell("cc");
table.addCell("cc");
table.addCell("c");
table.addCell("ccccccccccccccc");
document.add(table);
document.add(new Paragraph("\n\n"));

//调整比例
widths[0] = 20f;
widths[1] = 20f;
widths[2] = 10f;
widths[3] = 50f;
table.setWidths(widths);
document.add(table);

//按绝对值设置单元格宽度
widths[0] = 40f;
widths[1] = 40f;
widths[2] = 20f;
widths[3] = 300f;
Rectangle r = new Rectangle(PageSize.A4.getRight(72), PageSize.A4.getTop(72));
table.setWidthPercentage(widths, r);
document.add(new Paragraph("\n\n"));
document.add(table);


26、设置单元格高度 
PdfPTable table = new PdfPTable(2);

PdfPCell cell;

//折行
table.addCell(new PdfPCell(new Paragraph("折行", fontZH)));
cell = new PdfPCell(new Paragraph("blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah"));
cell.setNoWrap(false);
table.addCell(cell);

//不折行
table.addCell(new PdfPCell(new Paragraph("不折行", fontZH)));
cell.setNoWrap(true);
table.addCell(cell);

//设置高度
table.addCell(new PdfPCell(new Paragraph("任意高度",fontZH)));
cell = new PdfPCell(new Paragraph("1. blah blah\n2. blah blah blah\n3. blah blah\n4. blah blah blah\n5. blah blah\n6. blah blah blah\n7. blah blah\n8. blah blah blah"));
table.addCell(cell);

//固定高度
table.addCell(new PdfPCell(new Paragraph("固定高度",fontZH)));
cell.setFixedHeight(50f);
table.addCell(cell);

//最小高度
table.addCell(new PdfPCell(new Paragraph("最小高度",fontZH)));
cell = new PdfPCell(new Paragraph("最小高度:50",fontZH));
cell.setMinimumHeight(50f);
table.addCell(cell);

//最后一行拉长到page底部
table.setExtendLastRow(true);
table.addCell(new PdfPCell(new Paragraph("拉长最后一行",fontZH)));
cell = new PdfPCell(new Paragraph("最后一行拉长到page底部",fontZH));
table.addCell(cell);

document.add(table);


27、设置单元格颜色 
PdfPTable table = new PdfPTable(4);
PdfPCell cell;
cell = new PdfPCell(new Paragraph("颜色测试",fontZH));
table.addCell(cell);

//红色背景,无边框
cell = new PdfPCell(new Paragraph("红色背景,无边框",fontZH));
cell.setBorder(Rectangle.NO_BORDER);
cell.setBackgroundColor(BaseColor.RED);
table.addCell(cell);

//绿色背景,下边框
cell = new PdfPCell(new Paragraph("绿色背景,下边框",fontZH));
cell.setBorder(Rectangle.BOTTOM);
cell.setBorderColorBottom(BaseColor.MAGENTA);
cell.setBorderWidthBottom(5f);
cell.setBackgroundColor(BaseColor.GREEN);
table.addCell(cell);

//蓝色背景,上边框
cell = new PdfPCell(new Paragraph("蓝色背景,上边框",fontZH));
cell.setBorder(Rectangle.TOP);
cell.setUseBorderPadding(true);
cell.setBorderWidthTop(5f);
cell.setBorderColorTop(BaseColor.CYAN);
cell.setBackgroundColor(BaseColor.BLUE);
table.addCell(cell);

cell = new PdfPCell(new Paragraph("背景灰色度",fontZH));
table.addCell(cell);
cell = new PdfPCell(new Paragraph("0.25"));
cell.setBorder(Rectangle.NO_BORDER);
cell.setGrayFill(0.25f);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("0.5"));
cell.setBorder(Rectangle.NO_BORDER);
cell.setGrayFill(0.5f);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("0.75"));
cell.setBorder(Rectangle.NO_BORDER);
cell.setGrayFill(0.75f);
table.addCell(cell);

document.add(table);


28、插入图像 
Image image = Image.getInstance("resource/test2.jpg");
float[] widths = { 1f, 4f };

PdfPTable table = new PdfPTable(widths);

//插入图片
table.addCell(new PdfPCell(new Paragraph("图片测试", fontZH)));
table.addCell(image);

//调整图片大小
table.addCell("This two");
table.addCell(new PdfPCell(image, true));

//不调整
table.addCell("This three");
table.addCell(new PdfPCell(image, false));
document.add(table);


29、设置表头 
String[] bogusData = { "M0065920", "SL", "FR86000P", "PCGOLD",
        "119000", "96 06", "2001-08-13", "4350", "6011648299",
        "FLFLMTGP", "153", "119000.00" };
int NumColumns = 12;
// 12
PdfPTable datatable = new PdfPTable(NumColumns);
int headerwidths[] = { 9, 4, 8, 10, 8, 11, 9, 7, 9, 10, 4, 10 }; // percentage
datatable.setWidths(headerwidths);
datatable.setWidthPercentage(100);
datatable.getDefaultCell().setPadding(3);
datatable.getDefaultCell().setBorderWidth(2);
datatable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

datatable.addCell("Clock #");
datatable.addCell("Trans Type");
datatable.addCell("Cusip");
datatable.addCell("Long Name");
datatable.addCell("Quantity");
datatable.addCell("Fraction Price");
datatable.addCell("Settle Date");
datatable.addCell("Portfolio");
datatable.addCell("ADP Number");
datatable.addCell("Account ID");
datatable.addCell("Reg Rep ID");
datatable.addCell("Amt To Go ");

datatable.setHeaderRows(1);

//边框
datatable.getDefaultCell().setBorderWidth(1);

//背景色
for (int i = 1; i < 1000; i++) {
    for (int x = 0; x < NumColumns; x++) {
        datatable.addCell(bogusData[x]);
    }
}

document.add(datatable);


30、分割表格 
//横向分割
PdfContentByte cb = writer.getDirectContent();
PdfPTable table = new PdfPTable(10);
for (int k = 1; k <= 100; ++k) {
    table.addCell("The number " + k);
}
table.setTotalWidth(400);

table.writeSelectedRows(0, 5, 0, -1, 5, 700, cb);
table.writeSelectedRows(5, -1, 0, -1, 210, 700, cb);


31、设置单元格留白 
PdfPTable table = new PdfPTable(2);
PdfPCell cell;
Paragraph p = new Paragraph("Quick brown fox jumps over the lazy dog. Quick brown fox jumps over the lazy dog.");
table.addCell(new PdfPCell(new Paragraph("默认",fontZH)));
table.addCell(p);
table.addCell(new PdfPCell(new Paragraph("Padding:10",fontZH)));
cell = new PdfPCell(p);
cell.setPadding(10f);
table.addCell(cell);
table.addCell(new PdfPCell(new Paragraph("Padding:0",fontZH)));
cell = new PdfPCell(p);
cell.setPadding(0f);
table.addCell(cell);
table.addCell(new PdfPCell(new Paragraph("上Padding:0 左Padding:20",fontZH)));
cell = new PdfPCell(p);
cell.setPaddingTop(0f);
cell.setPaddingLeft(20f);
table.addCell(cell);
document.add(table);

document.newPage();
table = new PdfPTable(2);
table.addCell(new PdfPCell(new Paragraph("没有Leading",fontZH)));
table.getDefaultCell().setLeading(0f, 0f);
table.addCell("blah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\n");
table.getDefaultCell().setLeading(14f, 0f);
table.addCell(new PdfPCell(new Paragraph("固定Leading:14pt",fontZH)));
table.addCell("blah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\n");
table.addCell(new PdfPCell(new Paragraph("相对于字体",fontZH)));
table.getDefaultCell().setLeading(0f, 1.0f);
table.addCell("blah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\n");
document.add(table);


32、设置单元格边框 
//没有边框
PdfPTable table1 = new PdfPTable(3);  
table1.getDefaultCell().setBorder(PdfPCell.NO_BORDER);  
table1.addCell(new Paragraph("Cell 1")); 
table1.addCell(new Paragraph("Cell 2")); 
table1.addCell(new Paragraph("Cell 3")); 
document.add(table1);

//边框粗细颜色
document.newPage();
Rectangle b1 = new Rectangle(0f, 0f);
b1.setBorderWidthLeft(6f);
b1.setBorderWidthBottom(5f);
b1.setBorderWidthRight(4f);
b1.setBorderWidthTop(2f);
b1.setBorderColorLeft(BaseColor.RED);
b1.setBorderColorBottom(BaseColor.ORANGE);
b1.setBorderColorRight(BaseColor.YELLOW);
b1.setBorderColorTop(BaseColor.GREEN);
PdfPTable table2 = new PdfPTable(1);
PdfPCell cell =  new PdfPCell(new Paragraph("Cell 1"));
cell.cloneNonPositionParameters(b1);
table2.addCell(cell);
document.add(table2);


33、PdfPTableEvent 

34、PdfPCellEvent 

35、PdfPageEventHelper 


分享到:
评论

相关推荐

    JAVA 操作PDF itext5.05

    ### IText库与Java操作PDF文档 #### 一、IText简介 IText是一款功能强大的开源Java库,用于创建和操作PDF文档。自1999年发布以来,IText已成为许多开发人员处理PDF文件的首选工具。它支持多种语言环境,包括中文,...

    itext合并和拆分PDF实例

    根据提供的文件信息,我们可以深入探讨如何使用iText库在Java环境中进行PDF文件的合并与拆分操作。以下是对这些操作的详细解释。 ### iText简介 iText 是一个开源库,用于生成、修改以及处理PDF文件。它支持多种...

    iText生成PDF - 实例

    通过熟练掌握iText,开发者能够创建功能强大的PDF应用程序,满足各种业务需求。对于想要深入了解iText的读者,可以参考官方文档或者博客文章(如给定的博文链接)获取更多信息。 总结来说,iText是一个强大且灵活的...

    itextpdf-5.5.13

    iTextPDF不仅仅能添加文本,还支持插入图像、创建表格、定义字体样式、添加链接等复杂操作。例如,插入一幅图像可以使用`Image.getInstance()`方法,表格可以通过` PdfPTable`类创建,如下: ```java Image image =...

    itext2.1.7动态生成PDF实例

    **IText 2.1.7 动态生成PDF实例详解** 在IT行业中,PDF(Portable Document Format)是一种广泛使用的文件格式,它能够保持文档的原始格式,方便跨平台查看和打印。iText是一个强大的开源Java库,用于生成和修改PDF...

    PDF之itextpdf.jar操作实例

    本实例实现了pdf的创建、安全加密、添加附件到pdf、文字水印、图片水印、段落和块使用等。 开发环境:eclipse,导入即可运行;依赖jar:itextpdf、itext-pdfa、itext-xtra、xmlworker、bcprov-jdk15on。

    PDF iText操作简介

    iText 是一个强大的Java库,专门用于生成和编辑PDF文档。它是开源的,可以在SourceForge网站上免费下载。iText不仅能够创建PDF和RTF文档,还...通过熟练掌握iText,开发者可以创建出满足各种业务需求的高质量PDF文档。

    itext 生成pdf 目录

    - 考虑兼容性和版本问题,确保生成的PDF能被各种PDF阅读器正确识别。 通过以上步骤和注意事项,你就能利用iText有效地生成PDF目录,提升文档的可读性和用户体验。不断探索iText的功能,你会发现更多创建专业PDF文档...

    java 操作PDF实例

    在这个实例中,我们看到几个Java类,它们展示了如何使用IText进行PDF操作。 首先,`SilentPrintServlet.java`可能是一个实现了PDF静默打印功能的服务端程序。在Java中,由于浏览器限制,客户端无法直接执行PDF打印...

    使用itextpdf将PDF大文件拆分成若干份指定大小文件.zip

    首先,我们需要理解PDF文件的结构以及iTextPDF库的基本操作。 iTextPDF是一个强大的Java库,它提供了丰富的API来创建、修改和处理PDF文档。在拆分PDF文件时,我们需要考虑的主要因素是每页的大小不一致,这意味着不...

    PDF iText 使用简单介绍

    【iText 简介与应用】 iText 是一个强大的 Java 类库,专门用于生成 PDF 文档。作为 sourceforge 上的开源项目...通过熟练掌握 iText,开发者可以轻松实现 PDF 文档的创建和操作,提升企业信息系统的效率和用户体验。

    itext7 pdf转图片

    首先,需要创建`PdfDocument`对象来加载PDF,然后创建`PdfRenderer`实例。 - 使用`PdfRenderer`的`renderImageWithDpi`方法可以将PDF页面转换为`BufferedImage`,这个方法接受DPI(每英寸点数)作为参数,以控制...

    html to pdf itext

    iText是一个流行的Java和.NET库,常用于处理PDF文档,包括创建、编辑和操作PDF文档。在本篇中,我们将深入探讨如何使用iText库将HTML转换为PDF。 首先,了解HTML和PDF的基本差异是必要的。HTML是一种标记语言,用于...

    itext将图片生成PDF(高清版)

    `iText`是一个强大的Java库,专门用于创建、编辑和处理PDF文档。本教程将详细介绍如何使用`iText`将图片转换为高清PDF,并提供一个无坑版的demo示例。 首先,我们需要理解`iText`库的核心概念。`iText`提供了丰富的...

    Itext利用模板生成PDF实例demo,导入即可使用,供前台下载,打印,预览等

    在这个实例中,我们看到Itext被用来通过模板生成PDF文件,这种做法可以极大地简化PDF内容的构建过程。 **模板驱动的PDF生成** 模板驱动的PDF生成是一种高效的方法,特别是当需要多次重复类似内容但细节略有不同的...

    C#拆分PDF(iText)

    2. **创建PDF写入器**:为每个要拆分的新PDF创建一个`PdfCopy`或`PdfSmartCopy`实例,这取决于是否需要保持原文档的交互性。 3. **遍历PDF页面**:通过`PdfReader.GetNumberOfPages()`获取PDF的总页数,然后使用`...

    Itext删除PDF的图层

    Itext是PDF处理的强力工具,它允许开发者进行各种操作,包括添加文本、图像、表格,以及处理PDF的安全性、表单、链接等。对于图层管理,Itext提供了对PDF/CO(PDF with Optional Content)标准的支持,即对PDF中的...

    iText使用简单介绍.pdf

    iText 简单介绍 iText 是一款功能强大的开源 Java 组件,用于生成 PDF 文档。通过 iText,可以生成 PDF 或 ...iText 是一个功能强大、灵活、易用的 Java 组件,能够满足各种 PDF 文档生成需求,是一个非常实用的工具。

    Itext5文本转PDF,含图片,代码实例

    Itext5文本转PDF,含图片,代码实例,是5版本的,含亚洲文字支持,有文本,图片转pdf的实例,支持自定义编码,整理好的,直接能用,乱码是因为编码不对,设置编码就好了,具体百度怎样设置编码,里面有设置编码的接口...

    itextpdf在已有pdf指定页及位置添加图片(包含jar及实例)

    在IT行业中,PDF(Portable Document Format)是一种广泛用于文档共享的标准格式,因为它能保持文档的原始格式和布局。...通过熟练掌握iTextPDF的API,你可以处理更多复杂的PDF操作,提高工作效率。

Global site tag (gtag.js) - Google Analytics