Itext PDF 編輯 合並 圖片轉PDF以及表單域


Itext PDF 編輯 合並 圖片轉PDF以及表單域

編輯PDF

 
 
 
x
 
 
 
 
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import org.junit.Test;
 
import java.io.FileOutputStream;
 
/**
 * @Classname ItextPDF
 * @Description TODO
 * @Date 2021/9/17 0017 16:27
 * @Created by Mr.Fang
 */
public class ItextPDF {
 
    /**
     * @return void
     * @Description 編輯現有 PDF 文件
     * @date 2021/9/17 0017 16:28
     * @auther Mr.Fang
     **/
    @Test
    public void editPdf() throws Exception {
        String src = "C:/IText合同.pdf";
        String desc = "C:/IText合同-edit.pdf";
        // 這里字體使用了本地字體,中文不設置字體 PDF 文件上顯示空白
        BaseFont baseFont_zh = BaseFont
            .createFont("C:\\Windows\\Fonts\\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        //創建一個 pdf 讀入流
        PdfReader reader = new PdfReader(src);
        //根據一個 PdfReader 創建一個 pdfStamper.用來生成新的pdf.
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(desc));
        //指定 PDF 文件頁面
        PdfContentByte canvas = stamper.getUnderContent(1);
        canvas.saveState(); // 保存狀態
        canvas.beginText(); // 開始寫入
        canvas.setFontAndSize(baseFont_zh, 12); // 設置字體 大小
        canvas.setTextMatrix(138, 687); // 坐標 橫坐標 縱坐標 這里如果 px取值 需要 px*0.75
        canvas.showText("2021-09-17");
        canvas.endText(); // 寫入結束
        canvas.restoreState(); // 恢復狀態
        stamper.setFormFlattening(true); // 禁止編輯
        stamper.close(); // 關閉流
    }
 
                 
}
 

編輯PDF附件

合並PDF

 
 
 
xxxxxxxxxx
 
 
 
 
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.*;
import org.junit.Test;
 
                 
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
                 
/**
 * @Classname ItextPDF
 * @Description TODO
 * @Date 2021/9/17 0017 16:27
 * @Created by Mr.Fang
 */
public class ItextPDF {
 
                 
    /**
     * @return void
     * @Description 合並 PDF
     * @date 2021/9/17 0017 16:56
     * @auther Mr.Fang
     **/
    @Test
    public void mergePdf() throws Exception {
        List<String> list = new ArrayList(); // 需要合並的文件路徑
        list.add("C:/IText合同-edit.pdf");
        list.add("C:/自我申明.pdf");
        String desc = "C:/IText合同-merge.pdf";
        Document document = new Document(new PdfReader(list.get(0)).getPageSize(1));
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(desc));
        document.open();
        for (int i = 0; i < list.size(); i++) {
            PdfReader reader = new PdfReader(list.get(i));
            int n = reader.getNumberOfPages();
            for (int j = 1; j <= n; j++) {
                document.newPage();
                PdfImportedPage page = copy.getImportedPage(reader, j);
                copy.addPage(page);
            }
        }
        document.close();
    }
 
                 
}
 

合並PDF附件

圖片轉PDF

 
 
 
xxxxxxxxxx
 
 
 
 
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import org.junit.Test;
 
                 
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
                 
/**
 * @Classname ItextPDF
 * @Description TODO
 * @Date 2021/9/17 0017 16:27
 * @Created by Mr.Fang
 */
public class ItextPDF {
 
                 
    /**
     * @return void
     * @Description 圖片轉 PDF
     * @date 2021/9/17 0017 17:20
     * @auther Mr.Fang
     **/
    @Test
    public void imageToPdf() throws Exception {
        List<String> list = new ArrayList(); // 需要合並的文件路徑
        list.add("C:/1.png");
        list.add("C:/2.png");
        list.add("C:/3.png");
        String desc = "C:/imageToPdf.pdf";
        // 創建一個 document 流
        Document document = new Document(PageSize.A4);
        FileOutputStream fos = new FileOutputStream(desc);
        PdfWriter.getInstance(document, fos);
        //打開文檔
        document.open();
        // 添加PDF文檔的某些信息,比如作者,主題等等.必須 open 以后才起作用
        document.addTitle("標題:合並圖片");
        document.addAuthor("作者:Mr.Fang");
        document.addSubject("主題:圖片轉PDF");
        document.addCreator("創建者:Mr.Fang");
        for (String source : list) {
            //獲取圖片的寬高
            com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(source);
            // 也可設置頁面尺寸
//           float imageHeight = image.getScaledHeight();
//           float imageWidth = image.getScaledWidth();
//           document.setPageSize(new Rectangle(imageWidth,imageHeight));
            //圖片居中
            image.scaleToFit(PageSize.A4); // 圖片大小縮小在 A4 尺寸以內自適應
            image.setAlignment(Image.ALIGN_CENTER); // 對齊方式居中
            image.setCompressionLevel(0); // 壓縮 0-9
//           image.scalePercent(40); // 百分比縮小圖片
            //新建一頁添加圖片
            document.newPage();
            document.add(image);
        }
        document.close();
        fos.flush();
        fos.close();
    }
 
                 
}
 
                
 

圖片轉PDF附件

表單域

  1. 創建一個 word,當然直接用 PDF也可以。
  2. 轉成 PDF 文件,使用Adobe Acrobat DC 工具掃描添加表單域,其他工具也可以。
  3. 另存為 PDF 文件
 
 
 
xxxxxxxxxx
 
 
 
 
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import org.junit.Test;
 
                 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
                 
/**
 * @Classname ItextPDF
 * @Description TODO
 * @Date 2021/9/17 0017 16:27
 * @Created by Mr.Fang
 */
public class ItextPDF {
 
                 
    /**
     * @return void
     * @Description 表單域
     * @date 2021/9/17 0017 17:40
     * @auther Mr.Fang
     **/
    @Test
    public void formPdf() throws Exception {
        String src = "C:/Itext表單域-form.pdf";
        String desc = "C:/form.pdf";
        // key value 賦值
        Map<String, String> map = new HashMap<>();
        map.put("fill_1", "表單1");
        map.put("fill_2", "表單2");
        map.put("fill_3", "表單3");
        map.put("fill_4", "表單4");
        // 設置字體否則中文不顯示
        BaseFont baseFont_zh = BaseFont
        .createFont("C:\\Windows\\Fonts\\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        //創建一個 pdf 讀入流
        PdfReader reader = new PdfReader(src);
        //根據一個 PdfReader 創建一個pdfStamper 用來生成新的pdf.
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(desc));
        AcroFields form = stamper.getAcroFields();
        form.addSubstitutionFont(baseFont_zh);
        //遍歷map裝入數據
        for (Map.Entry<String, String> entry : map.entrySet()) {
            form.setField(entry.getKey(), entry.getValue());
        }
        stamper.setFormFlattening(true);// 如果為false那么生成的PDF文件還能編輯,一定要設為true
        stamper.close();
    }
 
                 
}
 
                
 

表單域附件

maven

 
 
 
xxxxxxxxxx
 
 
 
 
<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itextpdf</artifactId>
   <version>5.5.13</version>
</dependency>
 

其他

表單域

表單域2

 

 


免責聲明!

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



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