使用iText给pdf文件添加水印不能正常显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用iText给pdf文件添加水印不能正常显示相关的知识,希望对你有一定的参考价值。

我在使用iText给pdf文件添加水印时,文字无法显示,但是添加水印的那块儿区域已经出现了,如下图:

(蓝色区域是水印的选中效果)。
代码如下:
PdfReader reader = new PdfReader(pdfPath); int n = reader.getNumberOfPages();
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(newPdfPath));
int i = 0;PdfContentByte under;PdfGState gs = new PdfGState();
String textContent = "档案馆馆藏";String angle = "45"; String diaphaneity = "80";
// 转换透明度(默认为50%)float diaphaneityF = 0.5f;
if (!"".equals(diaphaneity) && !"null".equals(diaphaneity))
diaphaneityF = (100f - Float.parseFloat(diaphaneity)) / 100;

BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
while (i < n)
i++; under = stamp.getUnderContent(i);
Rectangle pageRect = stamp.getReader().getPageSizeWithRotation(i); gs.setFillOpacity(diaphaneityF); gs.setStrokeOpacity(diaphaneityF); under.setGState(gs);under.beginText(); String align = "center"; float x = pageRect.getWidth() / 2;float y = pageRect.getHeight() / 2; under.setFontAndSize(bf, 50); under.setRGBColorFill(40, 125, 231);
under.showTextAligned(Element.ALIGN_CENTER, textContent, x, y, Integer.parseInt(angle));
under.endText();

stamp.close();

参考技术A 首先需要的jar包为iText-2.1.2u.jar、iTextAsian.jar。

import java.awt.Color;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class TestWaterPrint
public static void main(String[]args) throws DocumentException, IOException
//要输出的pdf文件
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("E:/abc.pdf")));
Calendar cal = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//将pdf文件先加水印然后输出
setWatermark(bos,"E:/pdf源文件.pdf",format.format(cal.getTime()) + " 下载使用人:" + "测试user", 16);


public static void setWatermark(BufferedOutputStream bos, String input,
String waterMarkName, int permission)
throws DocumentException, IOException
PdfReader reader = new PdfReader(input);
PdfStamper stamper = new PdfStamper(reader, bos);
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.EMBEDDED);
PdfGState gs = new PdfGState();
for (int i = 1; i < total; i++)
content = stamper.getOverContent(i);//在内容上方加水印
//content = stamper.getUnderContent(i);//在内容下方加水印
gs.setFillOpacity(0.2f);
// content.setGState(gs);
content.beginText();
content.setColorFill(Color.LIGHT_GRAY);
content.setFontAndSize(base, 50);
content.setTextMatrix(70, 200);
content.showTextAligned(Element.ALIGN_CENTER, "公司内部文件,请注意保密!", 300,
350, 55);
content.setColorFill(Color.BLACK);
content.setFontAndSize(base, 8);
content.showTextAligned(Element.ALIGN_CENTER, "下载时间:"
+ waterMarkName + "", 300, 10, 0);
content.endText();


stamper.close();

参考技术B 给pdf文件添加水印的方法其实并不难,我们先用工具迅 捷PDF编辑器打开需要删除页面的文件,然后点击界面上方的文档按钮,再选择其中的水印按钮,最后点击水印中的添加。

点击了添加按钮后,我们可以看到主界面上弹出了一个添加水印菜单窗口。在添加水印菜单中,有两种水印类型可供设置,一种是文本水印,一种是文件水印。
参考技术C 肯定不行啊。。。保密文件是不能随意印发的

怎样给pdf添加水印,给pdf添加水印的两个方法

    怎么样给pdf添加水印,给pdf添加水印的两个方法。大家在网上下载文件、文档时,发现越来越多的文档文件都会被作者添加上水印。作者们这样做得目的就是对自己作品的一种保护行为,使自己的作为不会遭到他人私自挪用用与窜改。在普通的文件、图片中添加水印想必大家都知道如何操作,今天小编就教给大家如何给pdf文件添加水印。

    使用工具:迅捷pdf转换器https://www.xunjiepdf.com/converter 

技术分享图片
 

   1.之所以小编要教给大家如何给pdf添加水印,是因为pdf文件本身是不可直接进行编辑修改的。所以想必很多小伙伴就算想给pdf文件添加水印也不知道如何下手。对此小伙伴们可先在浏览器当中搜索关键词pdf在线添加水印,然后鼠标点击进入相关网页内。

技术分享图片
 

   2.进入到网页后,将鼠标光标移动到【文档处理】选项上,再点击下方出现的多个选项中的【PDF添加水印】。

技术分享图片
 

   3.接下来会进入新的页面中,鼠标点击页面内的【点击选择文件】选,把要添加水印的pdf文件添加到页面当中。

 

技术分享图片
 

   4.并在页面内下方的【自定义设置转换】中,设置好所需添加水印的内容以及样式、位置等。

技术分享图片
 

   5.如果大家还有其它pdf文件也需要添加水印,可点击页面内的【继续添加】选项,把文件再次添加到页面中。然后点击选中右侧的【开始处理】选项,批量完成pdf添加水印操作。 

技术分享图片
 

   6.pdf添加水印的过程是需要大家稍加等待的,预计需要等待得时间也在页面当中会告诉大家。

技术分享图片
 

   7.在pdf文件添加水印完成后,鼠标点击文件缩略图右下角的【立即下载】选项,将完成操作后的pdf文件保存到自己的电脑当中就行了。

技术分享图片
 

   8.除了上述所讲述得方法外,小编还将告诉大家另外种操作便捷且十分高效的方法。大家先在自己的电脑当中准备个具有pdf添加水印功能的pdf转换器。

技术分享图片
 

   9.鼠标双击将pdf转换器打开进入操作界面,然后鼠标点击界面内左侧的【PDF的其他操作】——【PDF添加水印】。

技术分享图片
 

   10.点击选中界面内的【添加文件】选项,接着在显示的窗口中找到并左击选中要添加水印的pdf文件。然后再点击窗口内右下角的【打开】选项,就能将pdf文件添加到转换器内。

技术分享图片
 

   11.接着鼠标点击界面内左下角的【添加水印】选项,再弹出的小窗口当中选择设置好添加的文件水印或图片水印。并且还可在界面内下方设置水印的位置、透明度及旋转度。

技术分享图片
 

   12.接下来鼠标点击选中界面内上方的【自定义】按钮,再点击选中右边的【浏览】选项。这样就能给添加水印后的pdf文件,设置个保存地址。

技术分享图片
 

   13.紧接着小伙伴们使用鼠标单击选中转换器内右下角的【开始转换】选项,pdf转换器就会正式开始给pdf文件添加水印。

技术分享图片
 

   14.当添加水印操作完成后,小伙伴们如果想查看pdf文件是否成功添加上水印,使用鼠标点击转换器界面内【打开】选项下的【文件夹小图标】,就能把添加水印后的文件打开进行查看了。

技术分享图片
 

   怎样给pdf添加水印的具体操作方法都在本文当中告诉大家了。并且还分别告诉了大家两种不同的方法,两种方法的操作步骤也是一步步完整地教给了大家。希望今后大家都能有着较高的安全意识,对自己的作品要做得保护措施,也愿这次地教学分享可以给大家今后的工作、学习、生活带来帮助。
















以上是关于使用iText给pdf文件添加水印不能正常显示的主要内容,如果未能解决你的问题,请参考以下文章

Java itext为pdf 文件添加水印核心功能代码片段

PDF文件添加二维码水印

使用iText对pdf做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等

PDF文件添加二维码水印教程

怎么给PDF文件添加水印

使用 iTextSharp 添加水印文本时,PAC 工具中出现 iText 7 警告