亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

生成PDF全攻略之在已有PDF上添加內容的實現方法

 更新時間:2016年06月03日 11:45:59   投稿:jingxian  
下面小編就為大家?guī)硪黄蒔DF全攻略之在已有PDF上添加內容的實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

項目在變,需求在變,不變的永遠是敲擊鍵盤的程序員.....

PDF 生成后,有時候需要在PDF上面添加一些其他的內容,比如文字,圖片....

經歷幾次失敗的嘗試,終于獲取到了正確的代碼書寫方式。

在此記錄總結,方便下次以不變應萬變,需要的 jar 請移步:生成PDF全攻略

PdfReader reader = new PdfReader("E:\\A.pdf");
  PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E:\\B.pdf"));
  PdfContentByte overContent = stamper.getOverContent(1);

上述的這段代碼算是在原有 PDF 上面添加內容的核心代碼,具體流程如下

•如果看官老爺夠仔細的話,該代碼是將原 A.pdf 讀取,然后將它寫入 B.pdf,然后操作 B.pdf。

•可能有的看官老爺會說,將 A 讀取,然后在寫入 A 中,這樣肯定是不行的,在讀取的時候 A 已經被加載了,不能進行修改。

•我不喜歡這種方式,因為原 PDF 的信息已經存儲在數據庫中,其中包括 PDF 的服務器路徑、舊名稱、新名稱、類型......

•這樣就會多出一次數據庫變更操作,因為這里PDF名稱需要變更,而且鬼知道后續(xù)需求還會怎么變。

•這里急需 只在 PDF 中添加內容,其他的什么都不變,將代碼稍微調整了一下。

FileUtil.fileChannelCopy(A.pdf,A + "tmp".pdf));
  PdfReader reader = new PdfReader(A + "tmp".pdf);
  PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(A.pdf));
  PdfContentByte overContent = stamper.getOverContent(1);

代碼流程就變做下面這個樣子

這里引入了管道復制文件,將A 復制一份,讀取副本,然后寫回到原 PDF A 中,最后當然需要刪除副本文件。

到這里,無論后續(xù)需求怎么變,保證了pdf 的其他屬性不變,就能從容面對。

管道復制代碼如下:

pubpc static void fileChannelCopy(File sources, File dest) {
  try {
 FileInputStream inputStream = new FileInputStream(sources);
 FileOutputStream outputStream = new FileOutputStream(dest);
 FileChannel fileChannepn = inputStream.getChannel();//得到對應的文件通道
 FileChannel fileChannelout = outputStream.getChannel();//得到對應的文件通道
 fileChannepn.transferTo(0, fileChannepn.size(), fileChannelout);//連接兩個通道,并且從in通道讀取,然后寫入out通道

 inputStream.close();
 fileChannepn.close();
 outputStream.close();
 fileChannelout.close();
  } catch (Exception e) {
 e.printStackTrace();
  }
  }

完整PDF其他內容代碼如下:

FileUtil.fileChannelCopy(new File("E:\\A.pdf"),new File("E:\\A+"tmp".pdf"));
  PdfReader reader = new PdfReader("E:\\A+"tmp".pdf");
  PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E:\\A.pdf"));
  PdfContentByte overContent = stamper.getOverContent(1);

  //添加文字
  BaseFont font = BaseFont.createFont("STSong-pght", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  overContent.beginText();
  overContent.setFontAndSize(font, 10);
  overContent.setTextMatrix(200, 200);
  overContent.showTextApgned(Element.ApGN_CENTER,"需要添加的文字",580,530,0);
  overContent.endText();

  //添加圖片
  PdfDictionary pdfDictionary = reader.getPageN(1);
  PdfObject pdfObject = pdfDictionary.get(new PdfName("MediaBox"));
  PdfArray pdfArray = (PdfArray) pdfObject;
  Image image = Image.getInstance("D:\\1.jpg");
  image.setAbsolutePosition(100,100);
  overContent.addImage(image);

  //添加一個紅圈
  overContent.setRGBColorStroke(0xFF, 0x00, 0x00);
  overContent.setpneWidth(5f);
  overContent.elppse(250, 450, 350, 550);
  overContent.stroke();
  stamper.close();

以上這篇生成PDF全攻略之在已有PDF上添加內容的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot 如何實現Session共享

    SpringBoot 如何實現Session共享

    這篇文章主要介紹了SpringBoot 如何實現Session共享,幫助大家更好的理解和學習spring boot框架,感興趣的朋友可以了解下
    2020-09-09
  • Mybatis?SqlSession案例詳解

    Mybatis?SqlSession案例詳解

    這篇文章主要介紹了Mybatis?SqlSession詳解,本文我們講了如何創(chuàng)建SqlSession的幾個步驟,最后我們獲得一個DefaultSqlSession對象,里面包含了執(zhí)行器Executor和配置對象Configuration,需要的朋友可以參考下
    2023-04-04
  • 詳解基于Spring Cloud幾行配置完成單點登錄開發(fā)

    詳解基于Spring Cloud幾行配置完成單點登錄開發(fā)

    這篇文章主要介紹了詳解基于Spring Cloud幾行配置完成單點登錄開發(fā),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • SpringBoot集成Swagger2實現Restful(類型轉換錯誤解決辦法)

    SpringBoot集成Swagger2實現Restful(類型轉換錯誤解決辦法)

    這篇文章主要介紹了SpringBoot集成Swagger2實現Restful(類型轉換錯誤解決辦法),需要的朋友可以參考下
    2017-07-07
  • Java并發(fā)編程中的synchronized解析

    Java并發(fā)編程中的synchronized解析

    這篇文章主要介紹了Java并發(fā)編程中的synchronized解析,synchronized是一個重量級的鎖,使用不當的話其實會使我們程序執(zhí)行的效率大打折扣,今天我們就對其進行講解,需要的朋友可以參考下
    2023-11-11
  • Java實現TCP和UDP協議詳解

    Java實現TCP和UDP協議詳解

    這篇文章主要介紹了Java實現TCP和UDP協議詳解,TCP(傳輸控制協議)和UDP(用戶數據報協議)是兩種最常用的傳輸層協議,它們都用于在網絡上傳輸數據,但是它們之間有很多不同之處,需要的朋友可以參考下
    2023-07-07
  • java環(huán)境變量的配置方法圖文詳解【win10環(huán)境為例】

    java環(huán)境變量的配置方法圖文詳解【win10環(huán)境為例】

    這篇文章主要介紹了java環(huán)境變量的配置方法,結合圖文形式詳細分析了win10環(huán)境下java環(huán)境變量的配置方法與相關操作注意事項,需要的朋友可以參考下
    2020-04-04
  • spring常用注解開發(fā)一個RESTful接口示例

    spring常用注解開發(fā)一個RESTful接口示例

    這篇文章主要為大家介紹了使用spring常用注解開發(fā)一個RESTful接口示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • 微服務如何通過feign.RequestInterceptor傳遞參數

    微服務如何通過feign.RequestInterceptor傳遞參數

    這篇文章主要介紹了微服務如何通過feign.RequestInterceptor傳遞參數,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中線程安全有哪些實現思路

    Java中線程安全有哪些實現思路

    在 Java 多線程編程中,線程安全是一個非常重要的概念,本文主要介紹了Java中線程安全有哪些實現思路,非常具有實用價值,需要的朋友可以參考下
    2023-05-05

最新評論