Java PDFBox 添加高亮注釋 PDF高亮

1. 引入pom文件

    <dependency>
      <groupId>org.apache.pdfbox</groupId>
      <artifactId>pdfbox</artifactId>
      <version>2.0.28</version>
    </dependency>

2. 創(chuàng)建坐標(biāo)點(diǎn)實(shí)體

通過四個點(diǎn)虚循,確定一個高亮區(qū)域嗓袱,創(chuàng)建一個實(shí)體方便輸入坐標(biāo)扫倡。

public class PositionPoint {

    private float[] leftLower;
    private float[] rightLower;
    private float[] leftTop;
    private float[] rightTop;

    public PositionPoint(){

    }

    public float[] getLeftLower() {
        return leftLower;
    }

    public PositionPoint setLeftLower(float x,float y) {
        this.leftLower = new float[]{x, y};
        return this;
    }

    public float[] getRightLower() {
        return rightLower;
    }

    public PositionPoint setRightLower(float x,float y) {
        this.rightLower = new float[]{x, y};
        return this;
    }

    public float[] getLeftTop() {
        return leftTop;
    }

    public PositionPoint setLeftTop(float x,float y) {
        this.leftTop = new float[]{x, y};
        return this;
    }

    public float[] getRightTop() {
        return rightTop;
    }

    public PositionPoint setRightTop(float x,float y) {
        this.rightTop = new float[]{x, y};
        return this;
    }
}

3. 通過PDFBox設(shè)置高亮區(qū)域

添加設(shè)置PDF高亮區(qū)域分為以下幾個步驟

  • 讀取PDF文件
  • 獲取添加注釋的頁對象
  • 獲取頁對象中已包含的注釋集合
  • 創(chuàng)建文本標(biāo)記注釋豹缀,并設(shè)置標(biāo)記類型為高亮
  • 設(shè)置PDF矩形大小
  • 設(shè)置注釋的位置點(diǎn)
  • 設(shè)置注釋的顏色
  • 添加創(chuàng)建的文本標(biāo)記注釋到注釋集合
  • 輸出文件流
  • 關(guān)閉流

示例代碼如下:

 public static void main( String[] args )
    {
        try {
            String inputPath = "your PDF input file path";
            String outputPath = "your PDF output file path";

            //創(chuàng)建需要添加高亮的區(qū)域塊坐標(biāo)
            List<PositionPoint> groupPoint = new ArrayList<>();
            PositionPoint positionPoint1 = new PositionPoint();
            positionPoint1.setLeftLower(100,100);
            positionPoint1.setLeftTop(100,200);
            positionPoint1.setRightLower(200,100);
            positionPoint1.setRightTop(200,200);
            PositionPoint positionPoint2 = new PositionPoint();
            positionPoint2.setLeftLower(300,100);
            positionPoint2.setLeftTop(300,200);
            positionPoint2.setRightLower(500,100);
            positionPoint2.setRightTop(500,200);
            groupPoint.add(positionPoint1);
            groupPoint.add(positionPoint2);

            float[] pointArray = new float[groupPoint.size()*8];
            int index = 0;
            for (int k = 0; k < groupPoint.size(); k++) {
                PositionPoint point = groupPoint.get(k);
                pointArray[index++] =  point.getLeftLower()[0];
                pointArray[index++] =  point.getLeftLower()[1];
                pointArray[index++] =  point.getRightLower()[0];
                pointArray[index++] =  point.getRightLower()[1];
                pointArray[index++] =  point.getLeftTop()[0];
                pointArray[index++] =  point.getLeftTop()[1];
                pointArray[index++] =  point.getRightTop()[0];
                pointArray[index++] =  point.getRightTop()[1];
            }

            //讀取PDF文件
            PDDocument document = PDDocument.load(new File(inputPath));

            //獲取添加注釋的頁對象
            PDPage page = document.getPage(0);

            //獲取頁對象中已包含的注釋集合
            List<PDAnnotation> annotations = page.getAnnotations();
            if (annotations == null) {
                annotations = new ArrayList<>();
                page.setAnnotations(annotations);
            }

            //創(chuàng)建文本標(biāo)記注釋坟漱,并設(shè)置標(biāo)記類型為高亮
            PDAnnotationTextMarkup textMarkupAnnotation = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT);

            //設(shè)置PDF矩形大小
            textMarkupAnnotation.setRectangle(PDRectangle.A4);

            //設(shè)置注釋的位置點(diǎn)
            textMarkupAnnotation.setQuadPoints(pointArray);

            //設(shè)置注釋的顏色
            textMarkupAnnotation.setColor(new PDColor(new float[]{0, 0, 0}, PDDeviceRGB.INSTANCE));

            //添加創(chuàng)建的文本標(biāo)記注釋
            annotations.add(textMarkupAnnotation);

            //輸出流
            document.save(outputPath);

            //關(guān)閉流
            document.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

這段示例代碼是在一個注釋中添加了兩個區(qū)域的黑色高亮塊鼠次,可以通過修改PDColor中的RGB值控制高亮顏色;如需要添加多個高亮注釋可以創(chuàng)建多個PDAnnotationTextMarkup類芋齿,設(shè)置屬性并加入到注釋集合中须眷;另外PDFBox并不支持直接在文本上添加高亮,需要獲取到對應(yīng)文本的位置沟突,計(jì)算坐標(biāo)來添加高亮花颗,或者有更好的方案小伙伴歡迎一起討論!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠拭,一起剝皮案震驚了整個濱河市扩劝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌职辅,老刑警劉巖棒呛,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異域携,居然都是意外死亡簇秒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來左医,“玉大人,你說我怎么就攤上這事侈净≈逄常” “怎么了编曼?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剩辟。 經(jīng)常有香客問我掐场,道長,這世上最難降的妖魔是什么贩猎? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任熊户,我火速辦了婚禮,結(jié)果婚禮上吭服,老公的妹妹穿的比我還像新娘嚷堡。我一直安慰自己,他們只是感情好噪馏,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布麦到。 她就那樣靜靜地躺著,像睡著了一般欠肾。 火紅的嫁衣襯著肌膚如雪瓶颠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天刺桃,我揣著相機(jī)與錄音粹淋,去河邊找鬼。 笑死瑟慈,一個胖子當(dāng)著我的面吹牛桃移,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葛碧,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼借杰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了进泼?” 一聲冷哼從身側(cè)響起蔗衡,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乳绕,沒想到半個月后绞惦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洋措,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年济蝉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡王滤,死狀恐怖贺嫂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淑仆,我是刑警寧澤涝婉,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布哥力,位于F島的核電站蔗怠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吩跋。R本人自食惡果不足惜寞射,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锌钮。 院中可真熱鬧桥温,春花似錦、人聲如沸梁丘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氛谜。三九已至掏觉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間值漫,已是汗流浹背澳腹。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杨何,地道東北人酱塔。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像危虱,于是被迫代替她去往敵國和親羊娃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

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