最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用itextpdf實現(xiàn)生成PDF并添加圖片,水印和文字

 更新時間:2024年02月15日 08:05:57   作者:alex很累  
這篇文章主要為大家詳細介紹了Java在使用itextpdf實現(xiàn)生成PDF時如何實現(xiàn)添加圖片,水印和文字等效果,感興趣的小伙伴可以跟隨小編一起學習一下

一、概述

在上一篇博客中,介紹了excel轉(zhuǎn)pdf的方法;在這里,整理了一些方法:在生成pdf時,插入圖片、新增水印、添加文字等。

二、依賴

依賴和上一篇博客相同,在這里不再贅述。

三、相關工具類

1. FontGenerater.java (在上篇博客中,已貼出)

2. Excel2Pdf.java (在上篇博客中,已貼出)

3. PDFUtil.java

public class PDFUtil {
    /**
     * 給pdf添加圖片水印
     * @param waterMar
     * @param imgpath 圖片路徑
     * @throws Exception
     */
    public static void addImgWaterMark(PdfContentByte waterMar, String imgpath) throws Exception {
        waterMar.beginText();

        PdfGState gs = new PdfGState();
        // 設置填充字體不透明度為0.4f
        gs.setFillOpacity(0.2f);
        waterMar.setFontAndSize(FontGenerater.getFont(FontGenerater.FONT_SONTI_NAME), 40);
        // 設置透明度
        waterMar.setGState(gs);
        // 設置水印對齊方式 水印內(nèi)容 X坐標 Y坐標 旋轉(zhuǎn)角度
        Image img = Image.getInstance(imgpath);
        img.setAbsolutePosition(200, 380);
        img.scaleAbsolute(200, 200);

        waterMar.addImage(img);
        // 設置水印顏色
        waterMar.setColorFill(BaseColor.GRAY);

        //結束設置
        waterMar.endText();
        waterMar.stroke();
    }

    /**
     * 給pdf添加文字水?。ㄆ戒仯?
     * @param waterMar
     * @param text 水印文本
     * @throws Exception
     */
    public static void addTextFullWaterMark(PdfContentByte waterMar, String text) throws Exception {
        waterMar.beginText();

        PdfGState gs = new PdfGState();
        // 設置填充字體不透明度為0.4f
        gs.setFillOpacity(0.2f);
        waterMar.setFontAndSize(FontGenerater.getFont(FontGenerater.FONT_SONTI_NAME), 40);
        // 設置透明度
        waterMar.setGState(gs);
        // 設置水印對齊方式 水印內(nèi)容 X坐標 Y坐標 旋轉(zhuǎn)角度
        for (int x = 0; x <= 700; x += 200) {
            for (int y = 0; y <= 800; y += 200) {
                waterMar.showTextAligned(Element.ALIGN_RIGHT, text, x, y, 35);
            }
        }

        // 設置水印顏色
        waterMar.setColorFill(BaseColor.GRAY);

        //結束設置
        waterMar.endText();
        waterMar.stroke();
    }

    /**
     * 給pdf添加文字水?。▎蝹€)
     * @param waterMar
     * @param text 水印文本
     * @throws Exception
     */
    public static void addTextWaterMark(PdfContentByte waterMar, String text) throws Exception {
        waterMar.beginText();

        PdfGState gs = new PdfGState();
        // 設置填充字體不透明度為0.4f
        gs.setFillOpacity(0.2f);
        waterMar.setFontAndSize(FontGenerater.getFont(FontGenerater.FONT_SONTI_NAME), 80);
        // 設置透明度
        waterMar.setGState(gs);
        // 設置水印對齊方式 水印內(nèi)容 X坐標 Y坐標 旋轉(zhuǎn)角度
        waterMar.showTextAligned(Element.ALIGN_RIGHT, text, 475, 600, 45);

        // 設置水印顏色
        waterMar.setColorFill(BaseColor.GRAY);

        //結束設置
        waterMar.endText();
        waterMar.stroke();
    }

    /**
     * 添加頁眉、頁腳
     * @param writer
     * @param content
     * @param pagewidth
     * @param pageheight
     * @throws Exception
     */
    public static void addText(PdfWriter writer, String content, int pagewidth, int pageheight) throws Exception {
        PdfPTable table = new PdfPTable(1);
        table.setTotalWidth(530);
        PdfPCell cell = new PdfPCell(new Phrase(content, Excel2Pdf.getFont(FontGenerater.FONT_SONTI_NAME, 12, false)));
        cell.setBorder(0);
        // cell.setPaddingLeft(30f);
        cell.setPaddingTop(-15f);
        cell.setPaddingRight(20f);

        table.addCell(cell);
        Header event = new Header(table, pagewidth, pageheight);
        writer.setPageEvent(null);
        writer.setPageEvent(event);
    }

    //頁眉事件
    private static class Header extends PdfPageEventHelper {
        public static PdfPTable header;
        public int pagewidth;
        public int pageheight;

        public Header(PdfPTable header, int pagewidth, int pageheight) {
            Header.header = header;
            this.pagewidth = pagewidth;
            this.pageheight = pageheight;
        }

        @Override
        public void onEndPage(PdfWriter writer, Document document) {
            //把頁眉表格定位
            header.writeSelectedRows(0, -1, this.pagewidth, this.pageheight, writer.getDirectContent());
        }
    }

    /**
     * 添加圖片
     * @param document
     * @param imgPath
     * @param newWidth
     * @param newHeight
     * @param absoluteX
     * @param absoluteY
     * @throws IOException
     * @throws DocumentException
     */
    public static void addImg(Document document, String imgPath, float newWidth, float newHeight,
                              float absoluteX, float absoluteY) throws IOException, DocumentException {
        Image img1 = Image.getInstance(imgPath);
        img1.setAbsolutePosition(absoluteX, absoluteY);
        img1.scaleAbsolute(newWidth, newHeight);
        document.add(img1);
    }
}

四、示例

1.添加圖片水印

// A4大小
RectangleReadOnly shuban = new RectangleReadOnly(PageSize.A4);
Document document = new Document(shuban);
// 獲取一個pdfwriter實例
FileOutputStream stream = new FileOutputStream("D:\\website\\demo.pdf");
PdfWriter writer = PdfWriter.getInstance(document, stream);
// 打開document
document.open();
// 新增頁
document.newPage();
// **************添加水印**************
PdfContentByte waterMar = writer.getDirectContentUnder();
PDFUtil.addImgWaterMark(waterMar, "D:\\website\\java.png");
// **************完成圖片水印添加***********
// 關閉
document.close();
writer.close();
stream.close();

添加圖片水印示例

2.添加平鋪的文字水印

// **************添加平鋪的文字水印**************
PdfContentByte waterMar = writer.getDirectContentUnder();
String text = "這是一個示例";
PDFUtil.addTextFullWaterMark(waterMar, text);
// **************完成水印***********************

添加平鋪的文字水印示例

3.添加單個文字水印

// **************添加單個的文字水印**************
PdfContentByte waterMar = writer.getDirectContentUnder();
String text = "這是一個示例";
PDFUtil.addTextWaterMark(waterMar, text);
// **************完成水印***********************

添加單個文字水印示例

4.插入文字、圖片

// 插入文字,最后兩個參數(shù)是文字的位置
PDFUtil.addText(writer, "這是一段文字", 480, 802);
// 插入圖片,第二、三個參數(shù)表示圖片寬高,第四、五個參數(shù)表示位置
PDFUtil.addImg(document, "D:\\website\\start.png", 100, 100, 70, 700);

插入文字、圖片示例

以上就是Java使用itextpdf實現(xiàn)生成PDF并添加圖片,水印和文字的詳細內(nèi)容,更多關于Java itextpdf生成PDF的資料請關注腳本之家其它相關文章!

相關文章

  • Mybatis plus實現(xiàn)Distinct去重功能

    Mybatis plus實現(xiàn)Distinct去重功能

    這篇文章主要介紹了Mybatis plus實現(xiàn)Distinct去重功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Spring?Boot多數(shù)據(jù)源事務@DSTransactional的使用詳解

    Spring?Boot多數(shù)據(jù)源事務@DSTransactional的使用詳解

    本文主要介紹了Spring?Boot多數(shù)據(jù)源事務@DSTransactional的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • mybatis中oracle實現(xiàn)分頁效果實例代碼

    mybatis中oracle實現(xiàn)分頁效果實例代碼

    實現(xiàn)分頁的方式有很多,但常用的是通過SQL來顯示分頁。這篇文章主要介紹了mybatis中oracle實現(xiàn)分頁效果實例代碼,有興趣的可以了解一下。
    2017-04-04
  • Java 線程安全與 volatile與單例模式問題及解決方案

    Java 線程安全與 volatile與單例模式問題及解決方案

    文章主要講解線程安全問題的五個成因(調(diào)度隨機、變量修改、非原子操作、內(nèi)存可見性、指令重排序)及解決方案,強調(diào)使用volatile關鍵字可同時解決內(nèi)存可見性和指令重排問題,并結合單例模式中的餓漢與懶漢實現(xiàn)方式分析線程安全的處理,感興趣的朋友一起看看吧
    2025-06-06
  • @Transactional注解異常報錯之多數(shù)據(jù)源詳解

    @Transactional注解異常報錯之多數(shù)據(jù)源詳解

    這篇文章主要介紹了@Transactional注解異常報錯之多數(shù)據(jù)源詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Mybatis-Plus雪花id的使用以及解析機器ID和數(shù)據(jù)標識ID實現(xiàn)

    Mybatis-Plus雪花id的使用以及解析機器ID和數(shù)據(jù)標識ID實現(xiàn)

    這篇文章主要介紹了Mybatis-Plus雪花id的使用以及解析機器ID和數(shù)據(jù)標識ID實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Spring Security結合JWT的方法教程

    Spring Security結合JWT的方法教程

    這篇文章主要給大家介紹了關于Spring Security結合JWT的方法教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • Java將字符串String轉(zhuǎn)換為整型Int的兩種方式

    Java將字符串String轉(zhuǎn)換為整型Int的兩種方式

    這篇文章主要介紹了Java如何將字符串String轉(zhuǎn)換為整型Int,在 Java 中要將 String 類型轉(zhuǎn)化為 int 類型時,需要使用 Integer 類中的 parseInt() 方法或者 valueOf() 方法進行轉(zhuǎn)換,本文通過實例代碼給大家詳細講解,需要的朋友可以參考下
    2023-04-04
  • java圖論普利姆及克魯斯卡算法解決最小生成樹問題詳解

    java圖論普利姆及克魯斯卡算法解決最小生成樹問題詳解

    這篇文章主要為大家介紹了java圖論普利姆算法及克魯斯卡算法解決最小生成樹問題的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Java微信掃碼登錄功能并實現(xiàn)認證授權全過程

    Java微信掃碼登錄功能并實現(xiàn)認證授權全過程

    這篇文章主要給大家介紹了關于Java微信掃碼登錄功能并實現(xiàn)認證授權的相關資料,要在Java中實現(xiàn)微信掃碼登錄,您可以按照以下步驟進行操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10

最新評論

莲花县| 高雄县| 济源市| 凤台县| 仙居县| 凌海市| 苍山县| 武功县| 宣化县| 仲巴县| 登封市| 麻栗坡县| 子洲县| 大关县| 通城县| 潞城市| 雷山县| 东至县| 沧州市| 凤庆县| 苍山县| 葫芦岛市| 温宿县| 晋江市| 巴楚县| 仙居县| 马山县| 乌恰县| 嵊泗县| 凤翔县| 龙泉市| 伊川县| 谢通门县| 玉屏| 通许县| 山丹县| 宁武县| 沁阳市| 海晏县| 灵宝市| 沙湾县|