最近公司网站的pdf需要加上我们自己的水印,多番review打水印加链接的方法, windows上的A-PDF可以满足需求, 之前网站组也是用这种方法做的, 但是效率较低, 因为公司的pdf的其他处理逻辑我们都部署到了分布式的linux系统上,为了一致性和提高效率,多番谷歌和度娘–(发现多数blog只是实现了在pdf里打上文字水印的功能, 而且大同小异, 一看就是相互抄袭), 偶然发现了java的itext包, 并在github下载了一个开源可运行的jar包,给力!!修改了他的部分代码, 实现需求。
jar包地址:https://github.com/CrossRef/pdfstamp
废话不多说, 贴代码, 有用的话, 记得手动点赞
注: 需要itext包
package org.crossref.pdfstamp;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
// -u "http://blah.com" -i somefile.jpeg -l 1,44.5,22.3,3,22.2,22.2 some/dir
// or some.file
// or:
//-u "http://blah.com" -i somefile.jpeg -l 1,44.5,22.3 -l 3,22.2,22.2 some/dir
// or some.file
public class Main {
// 各类参数
@Option(name="-p", usage="Optional. Page numbers to stamp. -1 is the last page.",
required=false, multiValued=true, metaVar="P1,P2...")
private List<Integer> pages = new ArrayList<Integer>();
@Option(name="-l", usage="Required. Location on page to apply stamp.",
required=true, multiValued=false, metaVar="X,Y")
private StampTuple stampLocation = new StampTuple();
@Option(name="-e", usage="Optional. Extension appended to the PDF filename.",
required=false, multiValued=true, metaVar="EXT")
private String outputExtension = "stamped";
@Option(name="-r", usage="Optional. Descend recursively into directories.")
private boolean recursive = false;
@Option(name="-u", usage="Optional. Target URL of the stamp.",
required=false, multiValued=