Java iText5:在创建PDF时,标题内容出现了两次

Java iText5:在创建PDF时,标题内容出现了两次,java,pdf,itext,pdf-generation,Java,Pdf,Itext,Pdf Generation,我正在尝试生成PDF。所有其他事情都很正常,唯一的问题是当我在标题中添加一个表时,它会被添加两次 以下是我得到的PDF截图:- 背景,我可以稍后修复它帮助我修复由部分完成的 这是我的GeneratePDFUtil类:- package genetatePDF; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import com.itext

我正在尝试生成PDF。所有其他事情都很正常,唯一的问题是当我在标题中添加一个表时,它会被添加两次

以下是我得到的PDF截图:-

背景,我可以稍后修复它帮助我修复由部分完成的

这是我的
GeneratePDFUtil
类:-

package genetatePDF;

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;

import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
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.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;

public class GeneratePDFUtil {

    private static float topRightTextSpace = -2f;
    private static float signatureWidth = 70f;
    private static float signatureHeight = 20f;

    static String LogoUrl = "https://www.stockfreeimages.com/Company-Logo-Ending-Y-thumb4456521.jpg";
    private static String SIGNATURE = "Signature";

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

        generatePrescriptionPdf();
    }

    public static void generatePrescriptionPdf() throws DocumentException, MalformedURLException, IOException {

        Document document = new Document(PageSize.A4);
        document.setMargins(36, 36, 6, 36);

        String name = "try_" + System.currentTimeMillis() + ".pdf";
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(name));

        Rectangle rect = new Rectangle(36, 0, 550, 780);
        writer.setBoxSize("art", rect);
        HeaderFooterPageEvents event = new HeaderFooterPageEvents();
        event.setHeader(LogoUrl);
        writer.setPageEvent(event);

        document.open();
        document.add(spaceTable(8));

        document.add(topSpaceTable(4));
        float[] threeColumnWidth = { 1, 1, 1 };
        PdfPTable table = new PdfPTable(3);
        table.setWidthPercentage(100);
        table.setWidths(threeColumnWidth);
        table.addCell(leftBorderColumn("Id: ", "12345"));
        table.addCell(noBorderColumn("Date: ", "13/02/2017"));
        table.addCell(rightBorderColumn("ID: ", "Abc35"));
        document.add(table);

        table.deleteLastRow();
        table.addCell(leftBorderColumn("Name: ", "Manshavi"));
        table.addCell(noBorderColumn("Age: ", "23"));
        table.addCell(rightBorderColumn("Gender: ", "Male"));
        document.add(table);

        table.deleteLastRow();
        table.addCell(leftBorderColumn("Name: ", "Kumar"));
        table.addCell(noBorderColumn("Number: ", "1234"));
        table.addCell(rightBorderColumn("Specialization: ", "Java"));
        document.add(table);

        for (int i = 0; i < 5; i++) {
            PdfPCell cell1 = new PdfPCell(new Paragraph("cell 1"));
            cell1.setBorderColor(BaseColor.BLUE);
            cell1.setPaddingLeft(10);
            cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell cell2 = new PdfPCell(new Paragraph("cell 2"));
            cell2.setBorderColor(BaseColor.GREEN);
            cell2.setPaddingLeft(50);
            cell2.setHorizontalAlignment(Element.ALIGN_BASELINE);
            cell2.setVerticalAlignment(Element.ALIGN_RIGHT);

            PdfPCell cell3 = new PdfPCell(new Paragraph("cell 3"));
            cell3.setBorderColor(BaseColor.GRAY);
            cell3.setPaddingLeft(10);
            cell3.setHorizontalAlignment(Element.ALIGN_JUSTIFIED);
            cell3.setVerticalAlignment(Element.ALIGN_JUSTIFIED_ALL);

            table.deleteLastRow();
            table.addCell(cell1);
            table.addCell(cell2);
            table.addCell(cell3);
            document.add(table);
        }

        document.add(spaceTable(8));

        Paragraph paragraph = addParagraphContent(SIGNATURE, Font.NORMAL, topRightTextSpace);
        Image signImage = Image.getInstance(
                "https://thumbs.dreamstime.com/z/selfie-dogs-couple-dog-taking-together-smartphone-40248448.jpg");
        signImage.scaleToFit(signatureWidth, signatureHeight);
        signImage.setAlignment(Element.ALIGN_RIGHT);
        document.add(signImage);

        paragraph.setSpacingAfter(2);
        paragraph.setAlignment(Element.ALIGN_RIGHT);
        document.add(paragraph);

        paragraph = addParagraphContent("Name ", Font.BOLD, topRightTextSpace);
        paragraph.setAlignment(Element.ALIGN_RIGHT);
        document.add(paragraph);

        document.close();
        writer.close();

    }

    private static PdfPTable spaceTable(int height) {

        PdfPTable table = new PdfPTable(1);
        table.setWidthPercentage(100);
        PdfPCell cell = new PdfPCell();
        cell.setFixedHeight(height);
        cell.setBorder(Rectangle.NO_BORDER);
        table.addCell(cell);
        return table;
    }

    private static PdfPTable topSpaceTable(int height) {

        PdfPTable table = new PdfPTable(1);
        table.setWidthPercentage(100);
        PdfPCell cell = new PdfPCell();
        cell.setFixedHeight(height);
        cell.setBorder(Rectangle.LEFT | Rectangle.TOP | Rectangle.RIGHT);
        table.addCell(cell);
        return table;
    }

    // alphabetType is like BOLD or NORMAL type
    private static Paragraph addParagraphContent(String content, int alphabetType, float spacingAfter) {

        Paragraph paragraph = new Paragraph(content, new Font(Font.FontFamily.TIMES_ROMAN, 10, alphabetType));
        paragraph.setSpacingAfter(spacingAfter);
        return paragraph;
    }

    private static PdfPCell leftBorderColumn(String boldContent, String normalContent) {

        Paragraph resultField = new Paragraph(boldContent, new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD));
        resultField.setFont(new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL));
        resultField.add(normalContent);
        PdfPCell cell = new PdfPCell(resultField);
        cell.setBorder(Rectangle.LEFT);
        cell.setPaddingLeft(10);
        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
        cell.setVerticalAlignment(Element.ALIGN_CENTER);
        return cell;
    }

    private static PdfPCell rightBorderColumn(String boldContent, String normalContent) {

        Paragraph resultField = new Paragraph(boldContent, new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD));
        resultField.setFont(new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL));
        resultField.add(normalContent);
        PdfPCell cell = new PdfPCell(resultField);
        cell.setBorder(Rectangle.RIGHT);
        cell.setPaddingLeft(10);
        cell.setHorizontalAlignment(Element.ALIGN_MIDDLE);
        cell.setVerticalAlignment(Element.ALIGN_CENTER);
        return cell;
    }

    private static PdfPCell noBorderColumn(String boldContent, String normalContent) {

        Paragraph resultField = new Paragraph(boldContent, new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD));
        resultField.setFont(new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL));
        resultField.add(normalContent);
        PdfPCell cell = new PdfPCell(resultField);
        cell.setBorder(Rectangle.NO_BORDER);
        cell.setPaddingLeft(10);
        cell.setHorizontalAlignment(Element.ALIGN_MIDDLE);
        cell.setVerticalAlignment(Element.ALIGN_CENTER);
        return cell;
    }
}

class HeaderFooterPageEvents extends PdfPageEventHelper {

    private static String FULFILLED_BY = "Fulfilled By";
    protected String imageUrl;

    public void setHeader(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public void onStartPage(PdfWriter writer, Document document) {
        Rectangle rect = writer.getBoxSize("art");
        try {
            Image image = Image.getInstance(imageUrl);
            image.scaleToFit(150, 300);
            image.setAbsolutePosition(rect.getLeft(), rect.getTop() - 20);
            image.setSpacingAfter(10);
            image.setSpacingBefore(10);
            document.add(image);
            PdfPTable table = new PdfPTable(1);
            table.setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.setWidthPercentage(100);
            table.setTotalWidth(180f);
            PdfPCell cell = new PdfPCell(new Phrase(FULFILLED_BY, new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD)));
            cell.setBorder(Rectangle.NO_BORDER);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase("Shope Name",new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL)));
            cell.setBorder(Rectangle.NO_BORDER);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase("Address1",new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL)));
            cell.setBorder(Rectangle.NO_BORDER);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase("Address2, City Name",new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL)));
            cell.setBorder(Rectangle.NO_BORDER);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase("Cont. no.:1234454",new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL)));
            cell.setBorder(Rectangle.NO_BORDER);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase("Email:manshavikumar1993@gmail.com",new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL)));
            cell.setBorder(Rectangle.NO_BORDER);
            table.addCell(cell);

            table.writeSelectedRows(0, -1, rect.getRight() - table.getTotalWidth(), document.top(), writer.getDirectContent());

            document.add(table);
        } catch (BadElementException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
package-genetate-pdf;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.net.MalformedURLException;
导入com.itextpdf.text.BadElementException;
导入com.itextpdf.text.BaseColor;
导入com.itextpdf.text.Document;
导入com.itextpdf.text.DocumentException;
导入com.itextpdf.text.Element;
导入com.itextpdf.text.Font;
导入com.itextpdf.text.Image;
导入com.itextpdf.text.PageSize;
导入com.itextpdf.text.paragration;
导入com.itextpdf.text.Phrase;
导入com.itextpdf.text.Rectangle;
导入com.itextpdf.text.pdf.PdfPCell;
导入com.itextpdf.text.pdf.PdfPTable;
导入com.itextpdf.text.pdf.PdfPageEventHelper;
导入com.itextpdf.text.pdf.PdfWriter;
公共类GeneratePDFUtil{
私有静态浮点topRightTextSpace=-2f;
专用静态浮点签名宽度=70f;
专用静态浮点签名高=20f;
静态字符串LogoUrl=”https://www.stockfreeimages.com/Company-Logo-Ending-Y-thumb4456521.jpg";
私有静态字符串签名=“签名”;
publicstaticvoidmain(字符串[]args)抛出畸形的durlexception、DocumentException、IOException{
GenerateDescriptionPDF();
}
public static void generateDescriptionPDF()引发DocumentException、MalformedURLException、IOException{
文件=新文件(页面大小为A4);
文件。设置页边距(36,36,6,36);
String name=“try”+System.currentTimeMillis()+”.pdf”;
PdfWriter writer=PdfWriter.getInstance(文档,新文件输出流(名称));
矩形rect=新矩形(36,0550780);
作者:setBoxSize(“艺术”,rect);
HeaderFooterPageEvents事件=新建HeaderFooterPageEvents();
setHeader(LogoUrl);
writer.setPageEvent(事件);
document.open();
文件。添加(空格表(8));
新增文件(topSpaceTable(4));
float[]threeColumnWidth={1,1,1};
PdfPTable=新的PdfPTable(3);
表1.设定宽度百分比(100);
表.设置宽度(三列宽度);
表.addCell(左边框列(“Id:”,“12345”);
表1.addCell(noBorderColumn(“日期:,”2017年2月13日”);
表.addCell(右边框列(“ID:”,“Abc35”);
文件。添加(表);
table.deleteLastRow();
表.addCell(左边框列(“名称:”,“Manshavi”);
表.addCell(noBorderColumn(“年龄:,“23”));
表.addCell(右边框栏(“性别:”,“男性”);
文件。添加(表);
table.deleteLastRow();
表.addCell(左边框列(“名称:”,“Kumar”);
表.addCell(noBorderColumn(“编号:”,“1234”);
table.addCell(rightBorderColumn(“专门化:”,“Java”);
文件。添加(表);
对于(int i=0;i<5;i++){
PdfPCell cell1=新的PdfPCell(新段落(“单元格1”);
单元格1.颜色(基色.蓝色);
单元格1.设置填充左(10);
单元格1.设置水平对齐(元素.对齐\中心);
单元格1.设置垂直对齐(元素对齐\中间);
PdfPCell cell2=新的PdfPCell(新段落(“单元格2”);
单元格2.颜色(基色.绿色);
单元格2.设置填充左(50);
单元格2.设置水平对齐(元素对齐\基线);
单元格2.设置垂直对齐(元素.右对齐);
PdfPCell cell3=新的PdfPCell(新段落(“单元格3”);
单元格3.颜色(基色.灰色);
单元格3.设置填充左(10);
单元格3.设置水平对齐(元素对齐);
单元格3.设置垂直对齐(元素.对齐\u对齐\u全部);
table.deleteLastRow();
表1.addCell(cell1);
表1.addCell(第2单元);
表1.addCell(第3单元);
文件。添加(表);
}
文件。添加(空格表(8));
段落=添加段落内容(签名,Font.NORMAL,topRightTextSpace);
Image signImage=Image.getInstance(
"https://thumbs.dreamstime.com/z/selfie-dogs-couple-dog-taking-together-smartphone-40248448.jpg");
签名尺寸(签名宽度、签名高度);
signImage.setAlignment(元素.右对齐);
文件。添加(签名);
第(2)款之后的定格;
段落.设置对齐(元素.向右对齐);
文件.添加(第段);
段落=添加段落内容(“名称”,Font.BOLD,topRightTextSpace);
段落.设置对齐(元素.向右对齐);
文件.添加(第段);
document.close();
writer.close();
}
专用静态PdfPTable spaceTable(整数高度){
PdfPTable table=新的PdfPTable(1);
表1.设定宽度百分比(100);
PdfPCell cell=新的PdfPCell();
单元格。设置固定高度(高度);
单元格顺序(矩形,无边框);
表2.addCell(cell);
返回表;
}
专用静态PdfPTable topSpaceTable(内部高度){
PdfPTable table=新的PdfPTable(1);
表1.设定宽度百分比(100);
PdfPCell cell=新的PdfPCell();
单元格。设置固定高度(高度);
cell.setBorder(Rectangle.LEFT | Rectangle.TOP | Rectangle.RIGHT);
表2.addCell(cell);
返回表;
}
//alphabetType类似于粗体或普通类型
私有静态段落addParagraphContent(字符串内容、int-alphabetType、float-spacingAfter){
段落=新段落(内容,新字体(Font.FontFamily.TIMES_ROMAN,10,alphabetType));
段落.设置间隔后(间隔后);
table.writeSelectedRows(0, -1, rect.getRight() - table.getTotalWidth(), document.top(), writer.getDirectContent());
document.add(table)