话不多说,直接上代码:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
/**
- PDF添加水印
*/
@CrossOrigin
@RestController
@RequestMapping("/pdftest")
public class SiteNavigationController {
@RequestMapping(value = "/pdf")
@ResponseBody
public static void pdfWatermarking(HttpServletResponse response) throws IOException {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument ();
//加载测试文档
pdf.loadFromFile("D:/ElasticSearch总结文档.pdf");
// pdf.loadFromFile("/tmp/ElasticSearch总结文档.pdf");
//获取PDF文档总页数
int pageCount = pdf.getPages().getCount();
for (int i =0;i < pageCount;i++){
PdfPageBase page = pdf.getPages().get(i);
//调用insertWatermark()方法添加文本水印
insertWatermark(page);
}
//保存文档到本地
//pdf.saveToFile("D:/1.pdf");
//浏览器预览
response.setContentType("application/pdf;charset=utf-8");
//设置下载文档名称
response.setHeader("Content-Disposition", "inline;fileName=文件名.pdf");
pdf.saveToStream (response.getOutputStream () );
}
public static void insertWatermark(PdfPageBase page) {
Dimension2D dimension2D = new Dimension ();
//设置字体
PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font ("Microsoft YaHei", Font.PLAIN, 14), true);
// PdfTrueTypeFont font1 = new PdfTrueTypeFont ( new Font ("Arial Unicode MS",Font.PLAIN, 36),true );
//水印数量
dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 5, page.getCanvas().getClientSize().getHeight() / 5);
PdfTilingBrush brush = new PdfTilingBrush (dimension2D);
//透明度
brush.getGraphics().setTransparency(0.4F);
brush.getGraphics().save();
//浮动
brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 5, (float) brush.getSize().getHeight() / 5);
//倾斜度(负:上倾斜,正:下倾斜)
brush.getGraphics().rotateTransform(-45);
//设置字体颜色
PdfBrush brush_color = new PdfSolidBrush(new PdfRGBColor(Color.blue));
//水印内容和水印坐标
brush.getGraphics().drawString("水印1号", font1, brush_color, 25 , 30 , 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);
}
}
效果图: