Itext5常用操作


Itext

官網

Maven坐標

<properties>
    <itextpdf.version>5.5.6</itextpdf.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>${itextpdf.version}</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>${itextpdf.version}</version>
    </dependency>
    <!--中文支持-->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>
</dependencies>

Java代碼

常用

塊、短語、段落、圖片、超鏈接等對象

[官網](https://itextpdf.com/en)

## Maven坐標

​```xml
<properties>
    <itextpdf.version>5.5.6</itextpdf.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>${itextpdf.version}</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>${itextpdf.version}</version>
    </dependency>
    <!--中文支持-->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>
</dependencies>

Java代碼

常用

塊、短語、段落、圖片、超鏈接等對象

//new一個Document對象,設置紙張大小
Document document = new Document(PageSize.A4);
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdfText.pdf"));
//添加PDF屬性
/*document.addAuthor("作者");
document.addTitle("標題");
document.addSubject("主題");
document.addKeywords("關鍵字");*/
/*頁邊距*/
document.setMargins(10, 20, 30, 40);

//打開document
document.open();

/***添加新段落***/
document.add(new Paragraph("Hello world"));  //英文段落添加成功
//字體的設置,如顏色,字體,大小等
Font titlefontChinese = new Font(bfChinese, 22, Font.BOLD, BaseColor.BLACK);
Paragraph title_hmc = new Paragraph("添加中文段落",titlefontChinese);
title_hmc.setAlignment(Element.ALIGN_CENTER);
title_hmc.setSpacingBefore(30f);
title_hmc.setSpacingAfter(20f);
document.add(title_hmc);  //中文段落添加成功


//添加新的空白頁
document.newPage();
writer.setPageEmpty(true); //顯示空白頁

/*Chunk:塊對象,可配置字符間距、字符+背景色、背景色的矩形大小可任意調整*/
document.newPage();
document.add(new Chunk("中文輸出: ", getChineseFont()));
Chunk tChunk2 = new Chunk("輸出的內容", getChineseFont());
tChunk2.setBackground(BaseColor.CYAN, 1f, 0.5f, 1f, 1.5f); // 設置背景色
tChunk2.setTextRise(6); // 上浮
tChunk2.setUnderline(0.2f, -2f); // 下划線
document.add(tChunk2);
document.add(Chunk.NEWLINE); // 新建一行

/*Phrase:短語可配置行間距、不會另起一行*/
document.newPage();
document.add(new Phrase("Phrase: "));
Phrase tPhrase = new Phrase();
Chunk name = new Chunk("Chunk1");
name.setUnderline(0.2f, -2f);
tPhrase.add(name);
tPhrase.add(Chunk.NEWLINE);// 放在容器中好用
tPhrase.add(new Chunk("換行Chunk: ", getChineseFont()));
tPhrase.add(new Chunk("Chunk2"));
tPhrase.setLeading(14f);// 行間距
document.add(tPhrase);

/*Paragraph:段落*/
document.newPage();
Paragraph info = new Paragraph("New page");
info.setLeading(20f); //設置行距
info.setSpacingBefore(5f);// 設置段落上空白
info.setSpacingAfter(10f);// 設置段落下空白
info.setFirstLineIndent(24);// 首行縮進
info.setIndentationLeft(12);// 左縮進
info.setIndentationRight(12);// 右縮進
info.setAlignment(Element.ALIGN_CENTER);  //設置居中
document.add(info);

/*Image:圖片,繼承自Rectangle,scaleToFit設置大小,setAbsolutePosition設置絕對位置*/
document.newPage();
Image img = Image.getInstance("C:\\Users\\Administrator\\Pictures\\img10B6-36.jpg");
img.setAlignment(Image.LEFT);  //對齊方式
img.setBorder(Image.BOX);  //邊框
img.setBorderWidth(10);  //邊框寬度
img.setBorderColor(BaseColor.WHITE);  //邊框顏色
img.scaleToFit(800, 600);// 大小
img.setRotationDegrees(-3);// 旋轉
document.add(img);

/*Anchor:超鏈接和錨點對象*/
document.newPage();
Paragraph paragraph = new Paragraph();
Anchor anchor = new Anchor("錨點文字", getChineseFont());
anchor.setName("achorName"); // 設置錨點的名字
anchor.setReference("http://www.baidu.com");// 連接
paragraph.add(anchor);
paragraph.add(String.format(": %d sites", 10000));
document.add(paragraph);

//關閉document
document.close();

表格

Document document = new Document(PageSize.A4.rotate());
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdftable.pdf"));
/*頁邊距*/
document.setMargins(10, 20, 30, 40);
//打開document
document.open();

/*table:表格*/
document.newPage();
//中文字體
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);

int colNumber = 6;
// 創建有6列的表格
PdfPTable datatable = new PdfPTable(colNumber);
// 定義表格的寬度
int[] cellsWidth = { 1, 1, 1, 1, 1, 1 };
datatable.setWidths(cellsWidth);// 單元格寬度
//datatable.setTotalWidth(300f);//表格的總寬度
//datatable.setWidthPercentage(100);// 表格的寬度百分比
datatable.getDefaultCell().setPadding(2);// 單元格的間隔
datatable.getDefaultCell().setBorderWidth(2);// 邊框寬度
//設置表格的底色
datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
datatable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
//跨行跨列表格
PdfPCell pdfPCell; // 單元格
/*跨列*/
pdfPCell = new PdfPCell(new Phrase("大標題--跨6列", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //水平居中
pdfPCell.setColspan(6);// 跨3列
datatable.addCell(pdfPCell);
/*跨行*/
pdfPCell = new PdfPCell(new Phrase("標題一跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題二跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題三跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setColspan(2);// 跨3列
pdfPCell.setRowspan(1);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題四跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題五跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("3子標題", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
datatable.addCell(pdfPCell);
datatable.addCell(pdfPCell);
// 添加表頭元素
for (int i = 0; i < colNumber; i++) {
    datatable.addCell(new Paragraph("中文內容"+i, fontChinese));
}
// 添加表格的內容
for (int i = 0; i < colNumber; i++) {
    datatable.addCell(new Paragraph("Content"+i, fontChinese));
}
// 空白表格
for (int i = 0; i < colNumber; i++) {
    PdfPCell cell = new PdfPCell(new Paragraph(""));  //設置內容為空的表格
    cell.setFixedHeight(10);// 單元格高度
    datatable.addCell(cell);  //添加到表格
}
datatable.setSpacingAfter(40f);// 設置表格下面空白行
document.add(datatable);// 把表格加入文檔

//關閉document
document.close();

獲取默認字體

/**
 * 獲取中國字體
 * @return
 */
public static Font getChineseFont() {
    BaseFont bfChinese;  //確認支持中文
    Font fontChinese = null;  //字體的設置,如顏色,字體,大小等
    try {
        bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        // fontChinese = new Font(bfChinese, 12, Font.NORMAL);
        fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLACK);
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return fontChinese;
}

合並PDF

/** 合並pdf文件
 * @param files 要合並文件數組(絕對路勁{ "D:\\a1.pdf", "D:\\a2.pdf" })
 * @param savepath 合並后新產生的文件絕對路徑如D:\\a.pdf
 */
public static void mergePdfFiles(String[] files, String savepath){
    try {
        //創建一個與a.pdf相同紙張大小的document
        /*PdfReader pdfReader = new PdfReader(files[0]);
        Rectangle pageSize = pdfReader.getPageSize(1);
        pdfReader.close(); //關閉流,不然會一直占用*/
        //創建A4大小的document
        Document document = new Document(PageSize.A4);
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
        document.open();
        for (int i = 0; i < files.length; i++) {  //遍歷文件路徑集合
            //一個一個的遍歷現有的PDF
            PdfReader reader = null;  //獲取文件
            try {
                reader = new PdfReader(files[i]);
            } catch (IOException e) {
                continue;  //如果文件不存在,則繼續合並下一個文件
            }
            int n = reader.getNumberOfPages();  //獲取文件總頁數

            for (int j = 1; j <= n; j++) {  //遍歷頁數,放入document
                document.newPage();  //新頁
                PdfImportedPage page = copy.getImportedPage(reader, j);  //從文件中的指定頁碼拿出page
                copy.addPage(page);  //將page放入PdfCopy
            }
            reader.close();  //關閉流
        }
        document.close();

    }catch (DocumentException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

添加水印

/**
 * 給pdf文件添加水印
 * @param InPdfFile 要加水印的原pdf文件路徑
 * @param outPdfFile 加了水印后要輸出的路徑
 * @param textMark 水印文字
 * @param textWidth 文字橫坐標
 * @param textHeight 文字縱坐標
 * @throws Exception
 */
public static void addPdfTextMark(String InPdfFile, String outPdfFile, String textMark,int textWidth,
                                  int textHeight) throws Exception {
    PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
    PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
    PdfContentByte under;
    BaseFont font = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", "Identity-H", true);// 使用系統字體
    int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
    for(int i = 1; i <= pageSize; i++) {
        under = stamp.getUnderContent(i);// 水印在之前文本下
        // under = stamp.getOverContent(i);//水印在之前文本上
        under.beginText();
        under.setColorFill(BaseColor.GRAY);// 文字水印 顏色
        under.setFontAndSize(font, 38);// 文字水印 字體及字號
        under.setTextMatrix(textWidth, textHeight);// 文字水印 起始位置
        under.showTextAligned(Element.ALIGN_CENTER, textMark, textWidth, textHeight, 45);
        under.endText();
    }
    stamp.close();// 關閉
}


/**
 * 給pdf文件添加圖片水印
 * @param InPdfFile 要加水印的原pdf文件路徑
 * @param outPdfFile 加了水印后要輸出的路徑
 * @param markImagePath 水印圖片路徑
 * @param imgWidth 圖片橫坐標
 * @param imgHeight 圖片縱坐標
 * @throws Exception
 */
public static void addPdfImgMark(String InPdfFile, String outPdfFile, String markImagePath,int imgWidth, int imgHeight) throws Exception {
    PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
    PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));

    PdfContentByte under;
    PdfGState gs1 = new PdfGState();
    gs1.setFillOpacity(0.3f);// 透明度設置
    Image img = Image.getInstance(markImagePath);// 插入圖片水印
    img.setAbsolutePosition(imgWidth, imgHeight); // 坐標
    img.setRotation(-20);// 旋轉 弧度
    img.setRotationDegrees(45);// 旋轉 角度
    // img.scaleAbsolute(200,100);//自定義大小
    // img.scalePercent(50);//依照比例縮放

    int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
    for(int i = 1; i <= pageSize; i++) {
        under = stamp.getUnderContent(i);// 水印在之前文本下
        // under = stamp.getOverContent(i);//水印在之前文本上
        under.setGState(gs1);// 圖片水印 透明度
        under.addImage(img);// 圖片水印
    }

    stamp.close();// 關閉
    // // 刪除不帶水印文件
    //File tempfile = new File(InPdfFile);
    //	if(tempfile.exists()) {
    //	tempfile.delete();
    //}
}

//new一個Document對象,設置紙張大小
Document document = new Document(PageSize.A4);
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdfText.pdf"));
//添加PDF屬性
/document.addAuthor("作者");
document.addTitle("標題");
document.addSubject("主題");
document.addKeywords("關鍵字");
/
/頁邊距/
document.setMargins(10, 20, 30, 40);

//打開document
document.open();

//添加新段落
document.add(new Paragraph("Hello world"));

//添加新的空白頁
document.newPage();
writer.setPageEmpty(true); //顯示空白頁

/Chunk:塊對象,可配置字符間距、字符+背景色、背景色的矩形大小可任意調整/
document.newPage();
document.add(new Chunk("中文輸出: ", getChineseFont()));
Chunk tChunk2 = new Chunk("輸出的內容", getChineseFont());
tChunk2.setBackground(BaseColor.CYAN, 1f, 0.5f, 1f, 1.5f); // 設置背景色
tChunk2.setTextRise(6); // 上浮
tChunk2.setUnderline(0.2f, -2f); // 下划線
document.add(tChunk2);
document.add(Chunk.NEWLINE); // 新建一行

/Phrase:短語可配置行間距、不會另起一行/
document.newPage();
document.add(new Phrase("Phrase: "));
Phrase tPhrase = new Phrase();
Chunk name = new Chunk("Chunk1");
name.setUnderline(0.2f, -2f);
tPhrase.add(name);
tPhrase.add(Chunk.NEWLINE);// 放在容器中好用
tPhrase.add(new Chunk("換行Chunk: ", getChineseFont()));
tPhrase.add(new Chunk("Chunk2"));
tPhrase.setLeading(14f);// 行間距
document.add(tPhrase);

/Paragraph:段落/
document.newPage();
Paragraph info = new Paragraph("New page");
info.setLeading(20f); //設置行距
info.setSpacingBefore(5f);// 設置段落上空白
info.setSpacingAfter(10f);// 設置段落下空白
info.setFirstLineIndent(24);// 首行縮進
info.setIndentationLeft(12);// 左縮進
info.setIndentationRight(12);// 右縮進
info.setAlignment(Element.ALIGN_CENTER); //設置居中
document.add(info);

/Image:圖片,繼承自Rectangle,scaleToFit設置大小,setAbsolutePosition設置絕對位置/
document.newPage();
Image img = Image.getInstance("C:\Users\Administrator\Pictures\img10B6-36.jpg");
img.setAlignment(Image.LEFT); //對齊方式
img.setBorder(Image.BOX); //邊框
img.setBorderWidth(10); //邊框寬度
img.setBorderColor(BaseColor.WHITE); //邊框顏色
img.scaleToFit(800, 600);// 大小
img.setRotationDegrees(-3);// 旋轉
document.add(img);

/Anchor:超鏈接和錨點對象/
document.newPage();
Paragraph paragraph = new Paragraph();
Anchor anchor = new Anchor("錨點文字", getChineseFont());
anchor.setName("achorName"); // 設置錨點的名字
anchor.setReference("http://www.baidu.com");// 連接
paragraph.add(anchor);
paragraph.add(String.format(": %d sites", 10000));
document.add(paragraph);

//關閉document
document.close();

### 表格

​```java
Document document = new Document(PageSize.A4.rotate());
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdftable.pdf"));
/*頁邊距*/
document.setMargins(10, 20, 30, 40);
//打開document
document.open();

/*table:表格*/
document.newPage();
//中文字體
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);

int colNumber = 6;
// 創建有6列的表格
PdfPTable datatable = new PdfPTable(colNumber);
// 定義表格的寬度
int[] cellsWidth = { 1, 1, 1, 1, 1, 1 };
datatable.setWidths(cellsWidth);// 單元格寬度
//datatable.setTotalWidth(300f);//表格的總寬度
//datatable.setWidthPercentage(100);// 表格的寬度百分比
datatable.getDefaultCell().setPadding(2);// 單元格的間隔
datatable.getDefaultCell().setBorderWidth(2);// 邊框寬度
//設置表格的底色
datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
datatable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
//跨行跨列表格
PdfPCell pdfPCell; // 單元格
/*跨列*/
pdfPCell = new PdfPCell(new Phrase("大標題--跨6列", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //水平居中
pdfPCell.setColspan(6);// 跨3列
datatable.addCell(pdfPCell);
/*跨行*/
pdfPCell = new PdfPCell(new Phrase("標題一跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題二跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題三跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setColspan(2);// 跨3列
pdfPCell.setRowspan(1);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題四跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題五跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);  //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("3子標題", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);  //居中
datatable.addCell(pdfPCell);
datatable.addCell(pdfPCell);
// 添加表頭元素
for (int i = 0; i < colNumber; i++) {
    datatable.addCell(new Paragraph("中文內容"+i, fontChinese));
}
// 添加表格的內容
for (int i = 0; i < colNumber; i++) {
    datatable.addCell(new Paragraph("Content"+i, fontChinese));
}
// 空白表格
for (int i = 0; i < colNumber; i++) {
    PdfPCell cell = new PdfPCell(new Paragraph(""));  //設置內容為空的表格
    cell.setFixedHeight(10);// 單元格高度
    datatable.addCell(cell);  //添加到表格
}
datatable.setSpacingAfter(40f);// 設置表格下面空白行
document.add(datatable);// 把表格加入文檔

//關閉document
document.close();

獲取默認字體

/**
 * 獲取中國字體
 * @return
 */
public static Font getChineseFont() {
    BaseFont bfChinese;  //確認支持中文
    Font fontChinese = null;  //字體的設置,如顏色,字體,大小等
    try {
        bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        // fontChinese = new Font(bfChinese, 12, Font.NORMAL);
        fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLACK);
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return fontChinese;
}

合並PDF

/** 合並pdf文件
 * @param files 要合並文件數組(絕對路勁{ "D:\\a1.pdf", "D:\\a2.pdf" })
 * @param savepath 合並后新產生的文件絕對路徑如D:\\a.pdf
 */
public static void mergePdfFiles(String[] files, String savepath) throws Exception{
    try {
        //創建一個與a.pdf相同紙張大小的document
        /*PdfReader pdfReader = new PdfReader(files[0]);
        Rectangle pageSize = pdfReader.getPageSize(1);
        pdfReader.close(); //關閉流,不然會一直占用*/
        //創建A4大小的document
        Document document = new Document(PageSize.A4);
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
        document.open();
        for (int i = 0; i < files.length; i++) {  //遍歷文件路徑集合
            //一個一個的遍歷現有的PDF
            PdfReader reader = new PdfReader(files[i]);  //獲取文件
            int n = reader.getNumberOfPages();  //獲取文件總頁數

            for (int j = 1; j <= n; j++) {  //遍歷頁數,放入document
                document.newPage();  //新頁
                PdfImportedPage page = copy.getImportedPage(reader, j);  //從文件中的指定頁碼拿出page
                copy.addPage(page);  //將page放入PdfCopy
            }
            reader.close();  //關閉流
        }
        document.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}

添加水印

/**
 * 給pdf文件添加水印
 * @param InPdfFile 要加水印的原pdf文件路徑
 * @param outPdfFile 加了水印后要輸出的路徑
 * @param textMark 水印文字
 * @param textWidth 文字橫坐標
 * @param textHeight 文字縱坐標
 * @throws Exception
 */
public static void addPdfTextMark(String InPdfFile, String outPdfFile, String textMark,int textWidth,
                                  int textHeight) throws Exception {
    PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
    PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
    PdfContentByte under;
    BaseFont font = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", "Identity-H", true);// 使用系統字體
    int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
    for(int i = 1; i <= pageSize; i++) {
        under = stamp.getUnderContent(i);// 水印在之前文本下
        // under = stamp.getOverContent(i);//水印在之前文本上
        under.beginText();
        under.setColorFill(BaseColor.GRAY);// 文字水印 顏色
        under.setFontAndSize(font, 38);// 文字水印 字體及字號
        under.setTextMatrix(textWidth, textHeight);// 文字水印 起始位置
        under.showTextAligned(Element.ALIGN_CENTER, textMark, textWidth, textHeight, 45);
        under.endText();
    }
    stamp.close();// 關閉
}


/**
 * 給pdf文件添加圖片水印
 * @param InPdfFile 要加水印的原pdf文件路徑
 * @param outPdfFile 加了水印后要輸出的路徑
 * @param markImagePath 水印圖片路徑
 * @param imgWidth 圖片橫坐標
 * @param imgHeight 圖片縱坐標
 * @throws Exception
 */
public static void addPdfImgMark(String InPdfFile, String outPdfFile, String markImagePath,int imgWidth, int imgHeight) throws Exception {
    PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
    PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));

    PdfContentByte under;
    PdfGState gs1 = new PdfGState();
    gs1.setFillOpacity(0.3f);// 透明度設置
    Image img = Image.getInstance(markImagePath);// 插入圖片水印
    img.setAbsolutePosition(imgWidth, imgHeight); // 坐標
    img.setRotation(-20);// 旋轉 弧度
    img.setRotationDegrees(45);// 旋轉 角度
    // img.scaleAbsolute(200,100);//自定義大小
    // img.scalePercent(50);//依照比例縮放

    int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
    for(int i = 1; i <= pageSize; i++) {
        under = stamp.getUnderContent(i);// 水印在之前文本下
        // under = stamp.getOverContent(i);//水印在之前文本上
        under.setGState(gs1);// 圖片水印 透明度
        under.addImage(img);// 圖片水印
    }

    stamp.close();// 關閉
    // // 刪除不帶水印文件
    //File tempfile = new File(InPdfFile);
    //	if(tempfile.exists()) {
    //	tempfile.delete();
    //}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM