目录

PDFBox和Itext是操作PDF文档最常用的两种java library。

这里记录一下用两种内库给pdf添加水印的方法。

Itext

import com.itextpdf.text.Document;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Image;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.pdf.PdfContentByte;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.PdfStamper;

import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

/**

* Title:ItextPdfUtil

*

* @author Flicker

**/

public class ItextPdfUtil {

//创建一个pdf文件

public static void createPdf(){

Document document = new Document();

try {

PdfWriter.getInstance(document,new FileOutputStream("d:\\createPdf.pdf"));

} catch (DocumentException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

document.open();

try {

//设置文档文字

document.add(new Paragraph("Hello world"));

} catch (DocumentException e) {

e.printStackTrace();

}

document.close();

}

//给pdf添加水印

public static void setImage(){

try {

PdfReader reader = new PdfReader("d:\\createPdf.pdf");

PdfStamper stamper = new PdfStamper(reader,new FileOutputStream("d:\\setWatermarkPdf.pdf"));

Image image = Image.getInstance("d:\\test\\BarCode.png");

image.setAbsolutePosition(260,790);

PdfContentByte under = stamper.getUnderContent(1);

under.addImage(image);

stamper.close();

reader.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

//createPdf();

setImage();

}

}

PdfBox

package com.zo.util;

import org.apache.pdfbox.pdmodel.PDDocument;

import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;

import javax.swing.*;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

/**

* Title:PdfBoxUtil

*

* @author Flicker

**/

public class PdfBoxUtil {

private static final int LogoPart = 4;

//pdf转成image

public static void toImage(){

File file = new File("d:\\1.pdf");

try {

PDDocument doc = PDDocument.load(file);

PDFRenderer renderer = new PDFRenderer(doc);

int pageCount = doc.getNumberOfPages();

for (int i = 0; i < pageCount; i++) {

// 方式1,第二个参数是设置缩放比(即像素)

//BufferedImage image = renderer.renderImageWithDPI(i, 296);

// 方式2,第二个参数是设置缩放比(即像素)

BufferedImage image = renderer.renderImage(i, 2.5f);

ImageIO.write(image, "PNG", new File("d:\\1.png"));

}

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 给图片添加水印、可设置水印图片旋转角度

*

* @param iconPath 水印图片路径

* @param srcImgPath 源图片路径

* @param targerPath 目标图片路径

* @param degree 水印图片旋转角度

* @param width 宽度(与左相比)

* @param height 高度(与顶相比)

* @param clarity 透明度(小于1的数)越接近0越透明

*/

public static void waterMarkImageByIcon(String iconPath, String srcImgPath,

String targerPath, Integer degree, Integer width, Integer height,

float clarity) {

OutputStream os = null;

try {

Image srcImg = ImageIO.read(new File(srcImgPath));

System.out.println("width:" + srcImg.getWidth(null));

System.out.println("height:" + srcImg.getHeight(null));

BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),

srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);

// 得到画笔对象

// Graphics g= buffImg.getGraphics();

Graphics2D g = buffImg.createGraphics();

// 设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,

RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.drawImage(

srcImg.getScaledInstance(srcImg.getWidth(null),

srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,

null);

if (null != degree) {

// 设置水印旋转

g.rotate(Math.toRadians(degree),

(double) buffImg.getWidth() / 2,

(double) buffImg.getHeight() / 2);

}

// 水印图象的路径 水印一般为gif或者png的,这样可设置透明度

ImageIcon imgIcon = new ImageIcon(iconPath);

// 得到Image对象。

Image img = imgIcon.getImage();

float alpha = clarity; // 透明度

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,

alpha));

// 表示水印图片的位置

g.drawImage(img, width, height, null);

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

g.dispose();

os = new FileOutputStream(targerPath);

// 生成图片

ImageIO.write(buffImg, "JPG", os);

System.out.println("添加水印图片完成!");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != os) {

os.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

//toImage();

waterMarkImageByIcon("d:\\test\\BarCode.png","d:\\1.png","d:\\2.png"

,0,1000,10,1f);

}

}

java pdfreader去除水印_Java - PDF操作库 ItextPdf和PdfBox添加水印相关推荐

  1. java pdfreader去除水印_(最新)JAVA使用Icepdf 5.0.6 pro的PDF转图片去掉水印的方法...

    最近发现PDF转图片各种开源工具PDFBOX.PDFRenderer.jpedal都不好用,中文各种蛋疼,但是试用了一下Icepdf相当强大,唯一不足就是生成的图片带有官方水印,下面介绍一下去掉官方水 ...

  2. PDF怎么去除水印,PDF去除水印工具的使用方法

    PDF文件相信大家现在也都使用过了,但不知道大家有没有遇到需要编辑PDF文件的时候,今天小编就来跟大家分享一下编辑PDF文件的方法吧,以去除水印为例子来为大家分享一下PDF去除水印工具的使用方法,一起 ...

  3. pdf文件怎么去除水印,pdf去除水印方法介绍

    pdf文件怎么去除水印?pdf文件是目前被普遍使用的一种文件格式,我们在工作中也会时常需要下载pdf文件进行使用,当我们遇到被添加了水印的pdf文件时,该如何将水印去除呢?如果屏幕前的你不知道的话就看 ...

  4. 简单实用的批量去除水印方法及操作步骤

    去除水印是经常要用到的一些功能.现在一起来看看简单实用的批量去除水印功能怎么操作. 我们先看一下视频是有水印的 百度搜索"视频剪辑高手"软件并下载打开. 选择批量剪辑视频区域 打开 ...

  5. 如何给PDF去除水印,PDF去水印的方法

    如何给PDF去除水印呢?我们在使用的PDF文件也会有一部分水印,想要直接在PDF文件中去除这些水印还是比较难的,去除PDF文件中的水印需要使用专业的PDF编辑器来进行操作,接下面为大家揭晓一下如何给P ...

  6. java如何给pdf加水印_java pdf加水印的方法

    本文实例为大家分享了java pdf加水印的具体代码,供大家参考,具体内容如下 引入依赖 com.itextpdf.tool xmlworker 5.5.10 com.itextpdf itextpd ...

  7. java去除水印_Java添加、删除Word水印

    水印是一种常用于各种文档的声明.防伪手段.在Word文档里面,一般可设置文字水印(默认添加方式)或者加载图片作为水印(自定义水印)以及删除水印.以下内容将分享通过Java编程来实现以上Word水印操作 ...

  8. java程序设计教程试题_java程序设计试题库.doc

    java程序设计试题库.doc 还剩 67页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: <Java 语 ...

  9. java有什么字符串_Java 中操作字符串都有哪些类?它们之间有什么区别

    1. String.StringBuffer.StringBuilder 原文出自<编写高质量代码:改善 Java 程序的 151 个建议> CharSequence 接口有三个实现类与字 ...

最新文章

  1. Latex 中连加符号的上下界问题总结
  2. python解析xml提交到hdfs_完美解决python针对hdfs上传和下载的问题
  3. sdn智能互联系统及开发平台_聊天交友平台系统APP开发
  4. 专为linux设计的笔记本,平板变笔记本,Linux 设备也要凑凑热闹
  5. 关于如何在github上创建团队开发环境
  6. MYSQL--一条SQL更新语句是如何执行的?
  7. SpringBoot学习笔记2
  8. ======第五章设备管理======
  9. 《Android群英传:神兵利器》— Android 书籍
  10. php生成各种验证码
  11. slack 时钟_【基础知识】时序(Slack、Setup、Hold、Jitter、Skew、亚稳态)
  12. 2018年大数据的发展趋势,小白学前必备
  13. netty: LEAK: ByteBuf.release() was not called before it‘s garbage-collected
  14. 循环肿瘤细胞(circulating tumor cells,CTCs)
  15. 蜗牛爬井题目c语言,一年级奥数,蜗牛爬井问题
  16. 信号与系统(三):系统分析方法对比:微分方程 相量 傅里叶级数/变换 拉普拉斯变换
  17. MySQL数据库无法备份解决——mysqlidump
  18. 「tricks」整体DP
  19. 前端开发,JavaScript实际开发过程中常用JS小技巧
  20. C语言关于指针,gets()和gets_s()函数的理解

热门文章

  1. vsco和lr哪个好_我为什么选择了Lightroom,抛弃了VSCO、snapseed?(附508个预设)
  2. 笔记本一打开计算机就卡,电脑卡顿不流畅怎么办?电脑加速来帮你
  3. char **和char* []区别,char *和char []区别
  4. Ubuntu系统桌面版安装
  5. 那周余嘉熊掌将得队 团队团队展示
  6. will not be exported or published. Runtime ClassNotFoundExceptions may result.
  7. 瑞星2007----免费升级法。
  8. 今天心情不错,写个随笔。
  9. 航班编程代码c语言,c语言编写航班查询代码.doc
  10. unable to load client certificate private key file