添加水印可以參考使用控制項來添加的方法,如下:
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();
}