添加水印可以参考使用控件来添加的方法,如下:
1. 添加单个图片水印效果:
import com.spire.pdf.*;
import java.awt.geom.Rectangle2D;
public class watermark {
public static void main(String[] args) {
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\Users\Administrator\Desktop\Sample.pdf");
//获取第一页
PdfPageBase page = doc.getPages().get(0);
//设置背景图片
page.setBackgroundImage("C:\Users\Administrator\Desktop\logo.png");
//设置背景区域
Rectangle2D.Float rect = new Rectangle2D.Float();
rect.setRect(280, 300, 150, 150);
page.setBackgroundRegion(rect);
//保存文档
doc.saveToFile("output/imageWaterMark.pdf");
doc.close();
}
}
2. 添加平铺图片水印效果
import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTilingBrush;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
public class AddBackground {
public static void main(String[] args) {
//创建PdfDocument对象,并加载PDF测试文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("test.pdf");
//遍历文档每一页,加载图片,并设置成平铺背景(水印)
for (int i = 0; i < pdf.getPages().getCount();i++)
{
PdfPageBase page = pdf.getPages().get(i);
Dimension2D dimension2D = new Dimension();
dimension2D.setSize(page.getCanvas().getSize().getWidth()/4, page.getCanvas().getSize().getHeight()/3);
PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
brush.getGraphics().setTransparency(0.2f);
brush.getGraphics().translateTransform(brush.getSize().getWidth()/10,brush.getSize().getHeight()/10);
brush.getGraphics().rotateTransform(30);
PdfImage image = PdfImage.fromImage("logo.png");
brush.getGraphics().drawImage(image,brush.getSize().getWidth()-image.getWidth()/2,(brush.getSize().getHeight())/2);
Rectangle2D rectangle2D = new Rectangle2D.Float();
rectangle2D.setFrame(new Point(0,0),page.getCanvas().getClientSize());
page.getCanvas().drawRectangle(brush,rectangle2D);
}
//保存文档
pdf.saveToFile("SetTiledBackground.pdf");
pdf.dispose();
}
}
注:这里使用的是free Spire.Pdf.jar(以上代码参考自文章1、文章2)
② java 如何给pdf文件加水印
可以使用Spire.PDF for Java通过Java来添加水印。
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。您可以从这个链接下载 JAR 文件;如果您使用Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository></repositories><dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>5.3.1</version>
</dependency></dependencies>
1.添加图片水印
代码如下:
import com.spire.pdf.*;
import java.awt.geom.Rectangle2D;
public class watermark {
public static void main(String[] args) {
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\Users\Administrator\Desktop\Sample.pdf");
//获取第一页
PdfPageBase page = doc.getPages().get(0);
//设置背景图片
page.setBackgroundImage("C:\Users\Administrator\Desktop\logo.png");
//设置背景区域
Rectangle2D.Float rect = new Rectangle2D.Float();
rect.setRect(280, 300, 150, 150);
page.setBackgroundRegion(rect);
//保存文档
doc.saveToFile("output/imageWaterMark.pdf");
doc.close();
}
}
2.添加文本水印
代码如下:
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.*;
public class Textwatermark {
public static void main(String[] args) {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载示例文档
pdf.loadFromFile("C:\Users\Administrator\Desktop\Sample.pdf");
//获取第一页
PdfPageBase page = pdf.getPages().get(0);
//调用insertWatermark方法插入文本水印
insertWatermark(page, "E-ICEBLUE");
//保存文档
pdf.saveToFile("out/textWaterMark.pdf");
}
static void insertWatermark(PdfPageBase page, String watermark) {
Dimension2D dimension2D = new Dimension();
dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
brush.getGraphics().setTransparency(0.3F);
brush.getGraphics().save();
brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
brush.getGraphics().rotateTransform(-45);
brush.getGraphics().drawString(watermark, new PdfFont(PdfFontFamily.Helvetica, 24), PdfBrushes.getViolet(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
brush.getGraphics().restore();
brush.getGraphics().setTransparency(1);
Rectangle2D loRect = new Rectangle2D.Float();
loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
page.getCanvas().drawRectangle(brush, loRect);
}
}
希望对您有帮助。
③ java 怎样给相对路径下的pdf文件加水印
3、在文档选项页面,选择水印--添加;
4、首先输入文本即水印内容,以及文本大小,颜色和字体信息;
5、接着设置文本放置的方向,可以自定义任意角度,为了不影响阅读,可以设置透明度;
④ 如何将PDF文件添加上图片水印
给PDF文件添加图片水印的方法,可以批量添加:
第一步,电脑上下载“优速水印工厂”软件工具后安装打开,点击软件界面左边的【PDF水印】功能,然后再点击【添加文件】按钮,将需要添加图片水印的PDF文件导入到软件中,软件支持批量处理,节省时间。
⑤ pdf文件怎么添加水印呢
教你如何快速给pdf文件加水印,支持批量添加:
第一步,电脑上下载软件工具后安装打开,点击软件界面左边的【PDF水印】功能,然后再点击【添加文件】按钮,将需要添加图片水印的PDF文件导入到软件中,软件支持批量处理,节省时间。
⑥ java如何实现在web工程中用OpenOffice生成带有图片水印的pdf
需要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 block
e.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.2
content.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.2
under.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();
}
⑦ java pdf itext 水印 怎么做到 汉字水印 平铺或者换行 不想每页只插入一行水印
// 仅设置一个图片实例对象,整个PDF文档只应用一个图片对象,极大减少因为增加图片水印导致PDF文档大小增加
Image waterMarkImage = null ; //这里是图片对象,
if (waterMarkImage == null) {
waterMarkImage = Image.getInstance(path);//path 根据自己的实际情况填写。
}
// 添加水印图片,文档正文内容采用横向三列,竖向两列模式增加图片水印
for(int i = 0 ; i < 100; i ++){
for(int j = 0 ; j < 4 ; j ++ ){
waterMarkPdfContent.addImage(getWaterMarkImage(waterMarkImage,pageWidth * 0.3f * j , pageHeight * 0.05f * i));
}
}
public static Image getWaterMarkImage(Image waterMarkImage,
float xPosition, float yPosition) {
waterMarkImage.setAbsolutePosition(xPosition, yPosition);// 坐标
//waterMarkImage.setRotation(-20);// 旋转 弧度
//waterMarkImage.setRotationDegrees(-30);// 旋转 角度
waterMarkImage.scalePercent(100);// 依照比例缩放
return waterMarkImage;
}
⑧ 怎么给PDF文件添加水印
快速批量给pdf添加水印的方法,一键快速处理:
第一步,下载好上面的工具后安装打开使用。左边功能区选择【PDF水印】功能。然后点击【添加文件】或软件中间空白处,将需要加水印的PDF图片导入到软件中,成功后PDF文件名会显示在软件中。
⑨ 如何给PDF文件添加水印
快速给PDF添加水印的方法,一键批量添加:
第一步,下载软件工具后安装打开,点击软件界面左边的【PDF水印】功能,然后再点击【添加文件】按钮,将需要添加图片水印的PDF文件导入到软件中,软件支持批量处理,节省时间。
⑩ 有哪些可以给pdf加水印,java第三方开源类库
作者:流浪的小鼠
链接:https://www.hu.com/question/264003636/answer/279707367
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
使用iText ,感觉还是比较简单的
具体代码:
/**
*
* 【功能描述:添加图片和文字水印】 【功能详细描述:功能详细描述】
* @param srcFile 待加水印文件
* @param destFile 加水印后存放地址
* @param text 加水印的文本内容
* @param textWidth 文字横坐标
* @param textHeight 文字纵坐标
* @throws Exception
*/
public void addWaterMark(String srcFile, String destFile, String text,
int textWidth, int textHeight) throws Exception
{
// 待加水印的文件
PdfReader reader = new PdfReader(srcFile);
// 加完水印的文件
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
destFile));
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
// 设置字体
BaseFont font = BaseFont.createFont();
// 循环对每页插入水印
for (int i = 1; i < total; i++)
{
// 水印的起始
content = stamper.getUnderContent(i);
// 开始
content.beginText();
// 设置颜色 默认为蓝色
content.setColorFill(BaseColor.BLUE);
// content.setColorFill(Color.GRAY);
// 设置字体及字号
content.setFontAndSize(font, 38);
// 设置起始位置
// content.setTextMatrix(400, 880);
content.setTextMatrix(textWidth, textHeight);
// 开始写入水印
content.showTextAligned(Element.ALIGN_LEFT, text, textWidth,
textHeight, 45);
content.endText();
}
stamper.close();
}