回覆列表
  • 1 # 網路新鮮玩意

    需要itext2.1.5,以下是對pdf加水印的程式碼,包括文字水印和圖片水印public int fileCopy(String srcPath, String destPath) {FileOutputStream fos = null;FileInputStream fis = null;try {fos = new FileOutputStream(destPath);fis = new FileInputStream(srcPath);byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0) {fos.write(buffer, 0, len);}return 1;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fis.close();fos.flush();fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return 0;}/*** 為pdf檔案加文字水印** @param srcPath* 原始檔路徑* @param destPath* 目標檔案路徑* @param waterText* 水印文字* @throws DocumentException* @throws IOException*/public void wordWaterMark(String srcPath, String destPath, String waterText) throws DocumentException, IOException {int result = fileCopy(srcPath, destPath);if (result == 1) {// 待加水印的檔案PdfReader reader = new PdfReader(destPath);// 加完水印的檔案PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(srcPath));int total = reader.getNumberOfPages() + 1;PdfContentByte content;// 設定字型BaseFont base = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 水印文字int j = waterText.length(); // 文字長度char c = 0;int high = 0;// 高度// 迴圈對每頁插入水印for (int i = 1; i < total; i++) {// 水印的起始high = 60;content = stamper.getUnderContent(i);PdfGState gs = new PdfGState();gs.setFillOpacity(0.1f);// 設定透明度為0.2content.setGState(gs);// 開始content.beginText();// 設定顏色// content.setColorFill(new Color());// 設定字型及字號content.setFontAndSize(base, 88);// 設定起始位置content.setTextMatrix(120, 333);// 開始寫入水印for (int k = 0; k < j; k++) {content.setTextRise(high);c = waterText.charAt(k);content.showText(c + "");high += 20;}content.endText();}stamper.close();System.out.println("新增成功++++++++++++++++++++++++++++++++++++++++++");} else {System.out.println("複製pdf失敗====================");}}public void picWaterMark(String srcPath, String destPath, String imageFilePath)throws DocumentException, IOException {int result = fileCopy(srcPath, destPath);if (result == 1) {// 待加水印的檔案PdfReader reader = new PdfReader(destPath);// 加完水印的檔案PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(srcPath));Image img = Image.getInstance(imageFilePath);img.setAbsolutePosition(50, 400);// 座標img.setRotation(20);// 旋轉 弧度img.setRotationDegrees(45);// 旋轉 角度// image.scaleAbsolute(200,100);//自定義大小img.scalePercent(50);// 依照比例縮放int pageSize = reader.getNumberOfPages();for (int i = 1; i <= pageSize; i++) {PdfContentByte under = stamper.getUnderContent(i);under.addImage(img);PdfGState gs = new PdfGState();gs.setFillOpacity(0.2f);// 設定透明度為0.2under.setGState(gs);}stamper.close();// 關閉System.out.println("新增成功++++++++++++++++++++++++++++++++++++++++++");} else {System.out.println("複製pdf失敗====================");}}linux下轉pdf可以用libreoffice,需要安裝,這個是免費的,具體程式碼如下:String command = "libreoffice5.0 --invisible --convert-to pdf:writer_pdf_Export --outdir " + destFilepath+ " " + source;try {p = Runtime.getRuntime().exec(command);p.waitFor();} catch (InterruptedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}

  • 中秋節和大豐收的關聯?
  • 急求!以“團圓”為話題的作文一篇200字左右?