程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 生成PDF全攻略之在已有PDF上添加內容的完成辦法

生成PDF全攻略之在已有PDF上添加內容的完成辦法

編輯:關於JAVA

生成PDF全攻略之在已有PDF上添加內容的完成辦法。本站提示廣大學習愛好者:(生成PDF全攻略之在已有PDF上添加內容的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是生成PDF全攻略之在已有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稱號須要變革,並且鬼曉得後續需求還會怎樣變。

•這裡急需 只在 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 中,最初固然須要刪除正本文件。

到這裡,不管後續需求怎樣變,包管了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上添加內容的完成辦法就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved