• Java操作PDF之iText超入门


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

    版本: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"));  

    3、添加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"));  

    4、添加水印(背景图) 

    //图片水印  
    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();  

    5、插入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);

    6、插入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);  

    7、设置段落 

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

    8、删除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();  

    9、排序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);  

    10、目录 

    // 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");  
  • 相关阅读:
    九九乘法表
    获取1-10 的和,并打印 2.1-100 之间 7 的倍数的个数,并打印
    1-100之间 7 的倍数的个数,并打印
    无限循环的最简单的表现形式
    for 和 while 区别
    do while 和 while 区别
    if 和 switch 比较
    星期和月份
    【运筹优化】求职与工作思考 -求职需要的技能(一)
    python 在线笔试的OJ输入输出总结
  • 原文地址:https://www.cnblogs.com/tanyucong/p/11076347.html
Copyright © 2020-2023  润新知