Java編輯PDF寫入文字 插入圖片


package com.test;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;
import org.junit.Test;

import java.io.FileOutputStream;

/**
 *編輯PDF
 */
public class PDFTest {
    @Test
    public void testPDF(){
        generatePDF("D:/1.pdf","D:/2.pdf","D:1.png");
    }


    /**
     * 生成新的PDF
     * @param pdfPath 要編輯的PDF路徑
     * @param newPDFPath 生成新的PDF路徑
     * @param imagePath 插入圖片路徑
     */
    public void generatePDF(String pdfPath,String newPDFPath,String imagePath){
PdfReader reader = null;
PdfStamper stamper = null; try{ //創建一個pdf讀入流 reader = new PdfReader(pdfPath); //根據一個pdfreader創建一個pdfStamper.用來生成新的pdf. stamper = new PdfStamper(reader,new FileOutputStream(newPDFPath)); //這個字體是itext-asian.jar中自帶的 所以不用考慮操作系統環境問題. BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); //baseFont不支持字體樣式設定.但是font字體要求操作系統支持此字體會帶來移植問題. Font font = new Font(bf,10); font.setStyle(Font.BOLD); font.getBaseFont(); PdfContentByte over; //頁數是從1開始的 for (int i=1; i<=reader.getNumberOfPages(); i++){ //獲得pdfstamper在當前頁的上層打印內容.也就是說 這些內容會覆蓋在原先的pdf內容之上. over = stamper.getOverContent(i); //當前頁的下層打印內容 按自己需求選擇 //over = stamper.getUnderContent(i); //用pdfreader獲得當前頁字典對象.包含了該頁的一些數據.比如該頁的坐標軸信息. PdfDictionary p = reader.getPageN(i); //拿到mediaBox 里面放着該頁pdf的大小信息. PdfObject po = p.get(new PdfName("MediaBox")); //po是一個數組對象.里面包含了該頁pdf的坐標軸范圍. PdfArray pa = (PdfArray) po; //開始寫入文本 over.beginText(); //設置字體和大小 over.setFontAndSize(font.getBaseFont(), 90); //設置字體顏色 over.setColorFill(new BaseColor(0,110,107,100)); com.itextpdf.text.pdf.PdfGState gState = new PdfGState(); gState.setStrokeOpacity(0.1f); over.setGState(gState); //要輸出的text 對齊方式 寫的字 設置字體的輸出位置 字體是否旋轉 over.showTextAligned(0,"HELLO WORLD",0,100,100); over.endText(); //創建一個image對象. Image image = Image.getInstance(imagePath); //設置image對象的輸出位置pa.getAsNumber(pa.size()-1).floatValue() 是該頁pdf坐標軸的y軸的最大值 0, 0, 841.92, 595.32 image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue()); //設置插入的圖片大小 image.scaleToFit(50,50); over.addImage(image); //畫一個圈. over.setRGBColorStroke(0xFF, 0x00, 0x00); over.setLineWidth(5f); over.ellipse(250, 450, 350, 550); over.stroke(); } stamper.close(); }catch (Exception e){ e.printStackTrace(); }
finally {
try {
if (null != is)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} }
PDF開發包下載地址:http://pdfbox.apache.org/


免責聲明!

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



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