iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
http://itextpdf.com/
版本:itextpdf-5.2.1.jar,文末附下载链接

需要注意的是,IText使用的单位是pt而不是px,一帮情况下要想保持原来px的大小需要将px*3/4

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")); 

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")); 

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);  

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");  

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();  

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);  

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

36、生成Barcode QRCode

 String myString = "http://www.google.com";  Barcode128 code128 = new Barcode128();
code128.setCode(myString.trim());
code128.setCodeType(Barcode128.CODE128);
Image code128Image = code128.createImageWithBarcode(cb, null, null);
code128Image.setAbsolutePosition(10,700);
code128Image.scalePercent(125);
doc.add(code128Image);  BarcodeQRCode qrcode = new BarcodeQRCode(myString.trim(), 1, 1, null);
Image qrcodeImage = qrcode.getImage();
qrcodeImage.setAbsolutePosition(10,600);
qrcodeImage.scalePercent(200);
doc.add(qrcodeImage);

37、HTML to PDF

 Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream("c://testpdf1.pdf"));
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader("<h1>This is a test!</h1>"));
document.close(); 

你可能需要的iText的jar:http://download.csdn.net/detail/weixin_36380516/9926308

安利一个,关注后端技术精选,号内回复“学习资料”,领取100套小程序源码+小程序开发视频和Java经典书籍电子版!

Java使用iText实现对PDF文件的操作相关推荐

  1. Java实现对PDF文件添加水印

    Java实现对PDF文件添加水印 目录 Java实现对PDF文件添加水印 导入依赖 工具方法 效果 最近项目中遇到对PDF添加水印,实现有多种,采取的是itextpdf 导入依赖 <!-- 对P ...

  2. java实现对pdf文件压缩,拆分,修改水印,添加水印

    最近要实现一个文件上传,并且在线预览上传文件的功能,设计思路是:把上传的文件通过openoffice转成pdf文件,并将pdf文件以流的形式返回到浏览器,由于上传的部分文件过大,转成pdf后传回前端浏 ...

  3. java代码实现对pdf文件文本和图片内容的提取

    教程 pom文件引入jar依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><depend ...

  4. java使用itext生成表格pdf文件

    以下主要讲解的是java使用itext生成表格pdf文件,话不多说,直接上代码 一.首先引入itext所使用的包 <dependency><groupId>com.itextp ...

  5. [原创]C#通过引用Office Excel (2007) 组件实现对Excel文件的操作

    对用应用软件来说,将报表转出为Excel文件,进行二次加工,或者根据Excel模版填充数据,是非常常用的.实现对Excel文件的操作,如将报表转出为Excel或根据已有的Excel模版进行填充,有很多 ...

  6. IText实现对PDF文档属性的基本设置

    一.Itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...

  7. 轻松实现对pdf文件编辑修改

    虽然pdf文件现在应用的比较多,但还是有很多人对这种文件不太了解,当要对pdf文件进行编辑修改时也不知道该怎么去操作.其实pdf文件的编辑也是很简单的,就和普通的文档一样.下面就来讲下pdf文件怎么编 ...

  8. itext 5.3.0实现对pdf文件添加(文字和图片)水印

    在itext 较新的版本中, 对中文的支持还是存在着问题,在网络上得到的信息和多方尝试下,将字体文件xx.TTF放到项目里面,然后加载到BaseFont 中,可行.如下: BaseFont font ...

  9. java实现对rar文件和zip文件的解压缩

    java实现对rar文件和zip文件的解压缩 一.对zip文件的解压缩 1.1 使用ZIP4J实现 zip4j官方说明: Create, Add, Extract, Update, Remove fi ...

最新文章

  1. Metaspace 引起的 FullGC 问题排查过程及解决方案
  2. 第一周——数据分析之表示 —— Numpy入门
  3. 7.04 -2018-长沙机场笔试总结
  4. Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)
  5. 使用swiper_关于使用swiper制作web轮播图
  6. 一加9R将推12+256GB新版本:骁龙870+120Hz高刷屏
  7. php1到12取值,零起点php入门第12课-php数组(1)
  8. swagger 使用
  9. 语法》第一章 基本语法
  10. c#基础知识——main
  11. 深搜和广搜--原理彼此的优缺点
  12. 谷粒学院(一)项目介绍
  13. 贪心算法解决哈夫曼编码问题
  14. PDF怎么转换成CAD图纸?两个方法轻松操作。
  15. c语言根二的连分数,纯循环连分数 与 二次方程的根
  16. 开源机器人库orocos KDL 学习笔记(二):Geometric
  17. 30系列显卡使用tensorflow1版本
  18. sqlite主键与唯一约束
  19. 房天下APP竞品分析
  20. 三行代码解决electron-updater升级失败问题

热门文章

  1. 女子将车垂直开上标志杆,警方回应...
  2. 索尼Xperia 2带壳渲染图曝光:外形依然很索尼
  3. 新能源界首陷“漏电门”奥迪将召回1644辆电动车e-tron
  4. 拼多多回应“鼓励刷单”:文章描述有歧义 已删除
  5. h.264 视频解码的一点小经验
  6. 不写一行代码,基于Jmeter打造性能测试数据平台
  7. 关于浏览器的那些事情1【面试】
  8. 50个常用的笔试、面试sql语句
  9. java8 hashmap_Java8 中的 HashMap
  10. tensorflow,Anaconda和 vscode 如何连接以及问题解决