Java生成PDF文件

最近在學(xué)C# xaml,好久沒更新了,今天就水一篇吧

提供自己的一些工具類

生成PDF文件所需的jar包

1、創(chuàng)建PDF —— hello word

public class CreatePdfText {
        public static void main(String[] args) {
        System.out.println("---start----");
        try {
            fillTemplate("F:\\test\\fillTemplate.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("---end----");
    }
    
    //創(chuàng)建一個(gè)最基本的 pdf
    public static void fillTemplate(String outpath) {
        try {
            //1 創(chuàng)建Document
            Document document = new Document();
            //2 獲取PdfWriter
            PdfWriter.getInstance(document, new FileOutputStream(outpath));
            //3 打開
            document.open();
            //4 添加內(nèi)容
            document.add(new Paragraph("Hello World"));
            //5 關(guān)閉
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2拴竹、進(jìn)階

創(chuàng)建一個(gè)PDF字體樣式工具類

package test;

import java.io.IOException;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;

public class PdfFontUtils {

    // 字體
    private static BaseFont baseFont = null;
    
    static{
        try {
            /**
             * 設(shè)置字體
             * 
             * windows路徑字體
             * FONT_TYPE=C:/Windows/fonts/simsun.ttc
             * linux路徑字體 宋體 (如果沒有這個(gè)字體文件,就將windows的字體傳上去)
             * FONT_TYPE=/usr/share/fonts/win/simsun.ttc
             */
            //可以用配置文件讀取
            //獲取配置
            //PropertiesLoader pl = new PropertiesLoader("/config/config.properties");  
            //拼接文件web訪問路徑
            //String FONT_TYPE = pl.getProperty("FONT_TYPE");  
            //解決中文問題  幼圓
            baseFont = BaseFont.createFont("C:/Windows/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
            
    /**
     * 文檔超級(jí)  排版
     * @param type 1-標(biāo)題 2-標(biāo)題一  3-標(biāo)題二 4-標(biāo)題三  5-正文  6-左對(duì)齊
     */
    public static Paragraph getFont(int type, String text){
        Font font = new Font(baseFont);
        if(1 == type){//1-標(biāo)題
            font.setSize(16f);
            font.setStyle(Font.BOLD);
        } else if(2 == type){//2-標(biāo)題一
            font.setSize(16f);
            font.setStyle(Font.BOLD);
        } else if(3 == type){//3-標(biāo)題二
            font.setSize(14f);
            font.setStyle(Font.BOLD);
        } else if(4 == type){//4-標(biāo)題三
            font.setSize(14f);
        } else if(5 == type){//5-正文
            font.setSize(10.5f);
        } else if(6 == type){//6-左對(duì)齊
            font.setSize(10.5f);
        } else {
            font.setSize(10.5f);//默認(rèn)大小
        }
        //注: 字體必須和 文字一起new
        Paragraph paragraph = new Paragraph(text, font);
        if(1 == type){
            paragraph.setAlignment(Paragraph.ALIGN_CENTER);//居中
            paragraph.setSpacingBefore(10f);//上間距
            paragraph.setSpacingAfter(10f);//下間距
        } else if(2 == type){//2-標(biāo)題一
            paragraph.setAlignment(Element.ALIGN_JUSTIFIED); //默認(rèn)
            paragraph.setSpacingBefore(2f);//上間距
            paragraph.setSpacingAfter(2f);//下間距
        } else if(3 == type){
            paragraph.setSpacingBefore(2f);//上間距
            paragraph.setSpacingAfter(1f);//下間距
        } else if(4 == type){//4-標(biāo)題三
            //paragraph.setAlignment(Element.ALIGN_RIGHT);//右對(duì)齊 
            paragraph.setSpacingBefore(2f);//上間距
            paragraph.setSpacingAfter(2f);//下間距
        } else if(5 == type){
            paragraph.setAlignment(Element.ALIGN_JUSTIFIED); 
            paragraph.setFirstLineIndent(24);//首行縮進(jìn)
            paragraph.setSpacingBefore(1f);//上間距
            paragraph.setSpacingAfter(1f);//下間距
        } else if(6 == type){//左對(duì)齊
            paragraph.setAlignment(Element.ALIGN_LEFT); 
            paragraph.setSpacingBefore(1f);//上間距
            paragraph.setSpacingAfter(1f);//下間距
        }
        //paragraph.setIndentationLeft(50);//整體縮進(jìn)左邊
        //paragraph.setFirstLineIndent(40);//首行縮進(jìn)
        return paragraph;
    }
}

創(chuàng)建pdf文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
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.PdfWriter;

public class CreatePdfText {
    
    public static void main(String[] args) {
        System.out.println("===========start=============");
        try {
            Document doc = createPdf("F:\\test\\test.pdf");
            //生成  合同文件
            createFile(doc);
            doc.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("===========end=============");
    }
    
    /**
     * 創(chuàng)建一個(gè)pdf并打開
     * @param outpath  pdf路徑
     */
    public static Document createPdf(String outpath) throws DocumentException, IOException{
        //頁面大小
        //Rectangle rect = new Rectangle(PageSize.A4.rotate());//文檔橫方向
        Rectangle rect = new Rectangle(PageSize.A4);//文檔豎方向
        //如果沒有則創(chuàng)建
        File saveDir = new File(outpath);
        File dir = saveDir.getParentFile();
        if (!dir.exists()) {
            dir.mkdirs();
        }
        Document doc = new Document(rect);
        PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(outpath));
        //PDF版本(默認(rèn)1.4)
        writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2);
        //文檔屬性
        doc.addTitle("Title@wpixel");
        doc.addAuthor("Author@wpixel");
        doc.addSubject("Subject@wpixel");
        doc.addKeywords("Keywords@wpixel");
        doc.addCreator("Creator@wpixel");
        //頁邊空白
        doc.setMargins(40, 40, 40, 40);
        //打開文檔
        doc.open();
        return doc;
    }
    
    public static void createFile(Document doc) throws DocumentException{
        doc.add(PdfFontUtils.getFont(1, "合作協(xié)議"));
        doc.add(PdfFontUtils.getFont(6, "甲方:"));
        doc.add(PdfFontUtils.getFont(6, "乙方:"));
        doc.add(PdfFontUtils.getFont(6, "時(shí)間:"));
        doc.add(PdfFontUtils.getFont(6, "地點(diǎn):"));
        Paragraph text05 = PdfFontUtils.getFont(5, "《根據(jù)中華人民共和國合同法》的有關(guān)規(guī)定剧罩,經(jīng)甲栓拜、乙雙方友好協(xié)商,本著長期平等合作.....吧啦吧啦吧啦吧啦吧啦吧啦吧啦吧啦");
        doc.add(text05);
        
        //一惠昔、合作方式及條件
        doc.add(PdfFontUtils.getFont(2, "一幕与、合作方式及條件"));
        doc.add(PdfFontUtils.getFont(5, "1.雙方根據(jù)國家法律規(guī)定建立合作關(guān)系,雙方嚴(yán)格遵守和執(zhí)行國家各項(xiàng)方針政策和有關(guān)法律镇防、法規(guī)和條例規(guī)定啦鸣。 "));
        doc.add(PdfFontUtils.getFont(5, "2.雙方嚴(yán)格按照《中華人民共和國招標(biāo)投標(biāo)法》及相關(guān)規(guī)定實(shí)施合作。 "));
        doc.add(PdfFontUtils.getFont(5, "3.雙方本著密切配合来氧、分工協(xié)作诫给、保證質(zhì)量香拉、按期完成的原則,共同做好工作中狂。 "));
        
        //二凫碌、權(quán)利義務(wù)
        doc.add(PdfFontUtils.getFont(2, "二、權(quán)利義務(wù)"));
        doc.add(PdfFontUtils.getFont(5, "1.雙方根據(jù)國家法律規(guī)定建立合作關(guān)系胃榕,雙方嚴(yán)格遵守和執(zhí)行國家各項(xiàng)方針政策和有關(guān)法律盛险、法規(guī)和條例規(guī)定。 "));
        doc.add(PdfFontUtils.getFont(5, "2.雙方嚴(yán)格按照《中華人民共和國招標(biāo)投標(biāo)法》及相關(guān)規(guī)定實(shí)施合作勋又。 "));
        doc.add(PdfFontUtils.getFont(5, "3.雙方本著密切配合苦掘、分工協(xié)作、保證質(zhì)量楔壤、按期完成的原則鹤啡,共同做好工作。 "));
        
        //三挺邀、其他
        doc.add(PdfFontUtils.getFont(2, "三揉忘、其他"));
        doc.add(PdfFontUtils.getFont(5, "1.雙方根據(jù)國家法律規(guī)定建立合作關(guān)系,雙方嚴(yán)格遵守和執(zhí)行國家各項(xiàng)方針政策和有關(guān)法律端铛、法規(guī)和條例規(guī)定。 "));
        doc.add(PdfFontUtils.getFont(5, "2.雙方嚴(yán)格按照《中華人民共和國招標(biāo)投標(biāo)法》及相關(guān)規(guī)定實(shí)施合作疲眷。 "));
        doc.add(PdfFontUtils.getFont(5, "3.自定義 "));
        
        PdfPTable table = new PdfPTable(2);
        table.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
        PdfPCell cell;
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "甲方:(蓋章)")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "乙方:(蓋章)")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "法定代表人或負(fù)責(zé)人簽章")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "法定代表人或負(fù)責(zé)人簽章")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "地址:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "地址:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "開戶銀行:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "開戶銀行:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "郵編:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "郵編:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "授權(quán)代理人:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "項(xiàng)目經(jīng)理:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "電話:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        cell.setBorder(Rectangle.NO_BORDER);
        cell = new PdfPCell(new Phrase(PdfFontUtils.getFont(5, "電話:")));
        cell.setColspan(1);
        cell.setBorder(0);
        table.addCell(cell);
        doc.add(table);
    }
    
}

o( ̄︶ ̄)o 有問題回復(fù)


作者是一名自由程序員禾蚕,住在上海,喜歡音樂狂丝、小說换淆、旅行、以及編程几颜。

P.S. 如果您喜歡這篇文章并且希望學(xué)習(xí)編程技術(shù)的話倍试,請(qǐng)關(guān)注一下

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛋哭,隨后出現(xiàn)的幾起案子县习,更是在濱河造成了極大的恐慌,老刑警劉巖谆趾,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躁愿,死亡現(xiàn)場離奇詭異,居然都是意外死亡沪蓬,警方通過查閱死者的電腦和手機(jī)彤钟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跷叉,“玉大人逸雹,你說我怎么就攤上這事营搅。” “怎么了梆砸?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵剧防,是天一觀的道長。 經(jīng)常有香客問我辫樱,道長峭拘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任狮暑,我火速辦了婚禮鸡挠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搬男。我一直安慰自己拣展,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布缔逛。 她就那樣靜靜地躺著备埃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐奴。 梳的紋絲不亂的頭發(fā)上按脚,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音敦冬,去河邊找鬼辅搬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脖旱,可吹牛的內(nèi)容都是我干的堪遂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼萌庆,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼溶褪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起践险,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤猿妈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捏境,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于游,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年垫言,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贰剥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筷频,死狀恐怖蚌成,靈堂內(nèi)的尸體忽然破棺而出前痘,到底是詐尸還是另有隱情,我是刑警寧澤担忧,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布芹缔,位于F島的核電站,受9級(jí)特大地震影響瓶盛,放射性物質(zhì)發(fā)生泄漏最欠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一惩猫、第九天 我趴在偏房一處隱蔽的房頂上張望芝硬。 院中可真熱鬧,春花似錦轧房、人聲如沸拌阴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迟赃。三九已至,卻和暖如春厂镇,著一層夾襖步出監(jiān)牢的瞬間纤壁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國打工剪撬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摄乒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓残黑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斋否。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梨水,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 整理自:Java面試題全集(上)https://blog.csdn.net/jackfrued/article/d...
    在水之天閱讀 3,105評(píng)論 1 24
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,725評(píng)論 0 10
  • 在南方深圳茵臭,一名一線教師疫诽,27歲。熱愛文學(xué)旦委,樂在其中奇徒。我可以陪你浪跡天涯,也可以陪你琴棋書畫缨硝。尋祖國各地的小...
    第77個(gè)小隊(duì)長閱讀 1,162評(píng)論 15 11
  • 文/樂思源 作者:莫提默. J.艾德勒 (學(xué)者摩钙,教育家,編輯) 查爾斯. 范多倫 (曾任哥倫比亞教授) 作者寫這本...
    樂思源閱讀 767評(píng)論 0 2
  • 神奇的牛奶箱(一) 叮玲玲查辩!動(dòng)物學(xué)校打起了放學(xué)鈴胖笛,小動(dòng)物們揮揮手跟鹿老師說著再見网持! 這時(shí),貓小粥撓撓鹿老師的后背长踊,...
    十七一閱讀 314評(píng)論 0 2