|
@@ -7,6 +7,7 @@ import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
|
|
import com.itextpdf.text.pdf.parser.RenderListener;
|
|
import com.itextpdf.text.pdf.parser.RenderListener;
|
|
import com.itextpdf.text.pdf.parser.TextRenderInfo;
|
|
import com.itextpdf.text.pdf.parser.TextRenderInfo;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
@@ -41,9 +42,9 @@ public class Watermark extends PdfPageEventHelper {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public static void imageWatermark(String inputPath, String outputPath,String imageUrl) throws Exception{
|
|
|
|
|
|
+ public static void imageWatermark(String inputPath, String outputPath, String imageUrl, String defaultStampFileUrl) throws Exception {
|
|
|
|
|
|
- try{
|
|
|
|
|
|
+ try {
|
|
PdfReader reader = new PdfReader(inputPath);
|
|
PdfReader reader = new PdfReader(inputPath);
|
|
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputPath));
|
|
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputPath));
|
|
PdfGState gs1 = new PdfGState();
|
|
PdfGState gs1 = new PdfGState();
|
|
@@ -51,6 +52,8 @@ public class Watermark extends PdfPageEventHelper {
|
|
|
|
|
|
Image image = Image.getInstance(imageUrl);
|
|
Image image = Image.getInstance(imageUrl);
|
|
|
|
|
|
|
|
+ Image defaultImage = Image.getInstance(defaultStampFileUrl);
|
|
|
|
+
|
|
//设置白色背景图透明
|
|
//设置白色背景图透明
|
|
//如果是RGBImage,Image.Transparency数组的格式为{red起始值, red终止值, green起始值, green终止值, blue起始值, blue终止值};范围为0~255
|
|
//如果是RGBImage,Image.Transparency数组的格式为{red起始值, red终止值, green起始值, green终止值, blue起始值, blue终止值};范围为0~255
|
|
//image.setTransparency(new int[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF});
|
|
//image.setTransparency(new int[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF});
|
|
@@ -61,70 +64,77 @@ public class Watermark extends PdfPageEventHelper {
|
|
int pageNumber = 0;
|
|
int pageNumber = 0;
|
|
final ArrayList<Float> posList = new ArrayList<>();
|
|
final ArrayList<Float> posList = new ArrayList<>();
|
|
|
|
|
|
- for (int m = 2;m<5;m++){
|
|
|
|
- pageNumber = m;
|
|
|
|
-
|
|
|
|
|
|
+ for (int m = 2; m < 5; m++) {
|
|
|
|
+ pageNumber = m;
|
|
|
|
|
|
- under = stamper.getOverContent(pageNumber);
|
|
|
|
- under.setGState(gs1);
|
|
|
|
-
|
|
|
|
- pageRect = reader.getPageSizeWithRotation(pageNumber);
|
|
|
|
|
|
+ under = stamper.getOverContent(pageNumber);
|
|
|
|
+ under.setGState(gs1);
|
|
|
|
|
|
- image.scaleToFit(pageRect.getWidth()/6,pageRect.getHeight()/6);
|
|
|
|
|
|
+ pageRect = reader.getPageSizeWithRotation(pageNumber);
|
|
|
|
|
|
- //读取【投保人签名 / 签章】位置
|
|
|
|
- PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(reader);
|
|
|
|
|
|
+ image.scaleToFit(pageRect.getWidth() / 6, pageRect.getHeight() / 6);
|
|
|
|
|
|
- String keyword = "投保人签名 / 签章";
|
|
|
|
|
|
+ if (defaultImage != null) {
|
|
|
|
+ defaultImage.scaleToFit(pageRect.getWidth() / 6, pageRect.getHeight() / 6);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ //读取【投保人签名 / 签章】位置
|
|
|
|
+ PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(reader);
|
|
|
|
|
|
- pdfReaderContentParser.processContent(pageNumber, new RenderListener() {
|
|
|
|
- @Override
|
|
|
|
- public void renderText(TextRenderInfo textRenderInfo) {
|
|
|
|
- String text = textRenderInfo.getText(); // 整页内容
|
|
|
|
|
|
+ String keyword = "投保人签名 / 签章";
|
|
|
|
|
|
- if (null != text && text.contains(keyword)) {
|
|
|
|
- com.itextpdf.awt.geom.Rectangle2D.Float boundingRectangle = textRenderInfo.getBaseline().getBoundingRectange();
|
|
|
|
- posList.add(boundingRectangle.x);
|
|
|
|
- posList.add(boundingRectangle.y);
|
|
|
|
|
|
+ pdfReaderContentParser.processContent(pageNumber, new RenderListener() {
|
|
|
|
+ @Override
|
|
|
|
+ public void renderText(TextRenderInfo textRenderInfo) {
|
|
|
|
+ String text = textRenderInfo.getText(); // 整页内容
|
|
|
|
|
|
|
|
+ if (null != text && text.contains(keyword)) {
|
|
|
|
+ com.itextpdf.awt.geom.Rectangle2D.Float boundingRectangle = textRenderInfo.getBaseline().getBoundingRectange();
|
|
|
|
+ posList.add(boundingRectangle.x);
|
|
|
|
+ posList.add(boundingRectangle.y);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
- public void renderImage(ImageRenderInfo arg0) {
|
|
|
|
- // TODO Auto-generated method stub
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void renderImage(ImageRenderInfo arg0) {
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
|
- public void endTextBlock() {
|
|
|
|
- // TODO Auto-generated method stub
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void endTextBlock() {
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
|
- public void beginTextBlock() {
|
|
|
|
- // TODO Auto-generated method stub
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void beginTextBlock() {
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ if (posList.size() > 0) {
|
|
|
|
+ break;
|
|
|
|
+ } else {
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- });
|
|
|
|
- if (posList.size()>0){
|
|
|
|
- break;
|
|
|
|
- }else {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if (posList.size()>0) {
|
|
|
|
|
|
+ if (posList.size() > 0) {
|
|
image.setAbsolutePosition(posList.get(0) + 100, posList.get(1));
|
|
image.setAbsolutePosition(posList.get(0) + 100, posList.get(1));
|
|
under.addImage(image);
|
|
under.addImage(image);
|
|
|
|
+
|
|
|
|
+ if (defaultImage != null) {
|
|
|
|
+ float width = pageRect.getWidth() / 6;
|
|
|
|
+ defaultImage.setAbsolutePosition(posList.get(0) + 100 + width + 10, posList.get(1));
|
|
|
|
+ under.addImage(defaultImage);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
int personListNumber = 0;
|
|
int personListNumber = 0;
|
|
final ArrayList<Integer> personList = new ArrayList<>();
|
|
final ArrayList<Integer> personList = new ArrayList<>();
|
|
- for (int l=pageNumber+1;l<10;l++){
|
|
|
|
|
|
+ for (int l = pageNumber + 1; l < 10; l++) {
|
|
personListNumber = l;
|
|
personListNumber = l;
|
|
//读取【投保人签名 / 签章】位置
|
|
//读取【投保人签名 / 签章】位置
|
|
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(reader);
|
|
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(reader);
|
|
@@ -144,27 +154,23 @@ public class Watermark extends PdfPageEventHelper {
|
|
@Override
|
|
@Override
|
|
public void renderImage(ImageRenderInfo arg0) {
|
|
public void renderImage(ImageRenderInfo arg0) {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void endTextBlock() {
|
|
public void endTextBlock() {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void beginTextBlock() {
|
|
public void beginTextBlock() {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
-
|
|
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- if (personList.size()>0){
|
|
|
|
|
|
+ if (personList.size() > 0) {
|
|
break;
|
|
break;
|
|
- }else {
|
|
|
|
|
|
+ } else {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
for (int i = personListNumber; i <= n; i++) {
|
|
for (int i = personListNumber; i <= n; i++) {
|
|
@@ -172,15 +178,19 @@ public class Watermark extends PdfPageEventHelper {
|
|
under = stamper.getOverContent(i);
|
|
under = stamper.getOverContent(i);
|
|
under.setGState(gs1);
|
|
under.setGState(gs1);
|
|
|
|
|
|
- // Rectangle pageRect1 = reader.getPageSizeWithRotation(i);
|
|
|
|
|
|
+ // Rectangle pageRect1 = reader.getPageSizeWithRotation(i);
|
|
|
|
|
|
//A4像素 842*596
|
|
//A4像素 842*596
|
|
float maxSize = 842;
|
|
float maxSize = 842;
|
|
- // image.setRotation(45);
|
|
|
|
- image.scaleToFit(pageRect.getWidth()/6,pageRect.getHeight()/6);
|
|
|
|
- image.setAbsolutePosition(2*pageRect.getWidth()/3,4*pageRect.getHeight()/5);
|
|
|
|
|
|
+ // image.setRotation(45);
|
|
|
|
+ image.scaleToFit(pageRect.getWidth() / 6, pageRect.getHeight() / 6);
|
|
|
|
+ image.setAbsolutePosition(2 * pageRect.getWidth() / 3, 4 * pageRect.getHeight() / 5);
|
|
under.addImage(image);
|
|
under.addImage(image);
|
|
|
|
|
|
|
|
+ defaultImage.scaleToFit(pageRect.getWidth() / 6, pageRect.getHeight() / 6);
|
|
|
|
+ defaultImage.setAbsolutePosition(80, 4 * pageRect.getHeight() / 5);
|
|
|
|
+ under.addImage(defaultImage);
|
|
|
|
+
|
|
// for (int y = 0; y < Math.min(pageRect.getHeight(), maxSize); y += imgHeight)
|
|
// for (int y = 0; y < Math.min(pageRect.getHeight(), maxSize); y += imgHeight)
|
|
// {
|
|
// {
|
|
// for (int x = 0; x < Math.min(pageRect.getWidth(), maxSize); x += imgWidth)
|
|
// for (int x = 0; x < Math.min(pageRect.getWidth(), maxSize); x += imgWidth)
|
|
@@ -200,20 +210,22 @@ public class Watermark extends PdfPageEventHelper {
|
|
}
|
|
}
|
|
stamper.close();
|
|
stamper.close();
|
|
reader.close();
|
|
reader.close();
|
|
- }catch (Exception e){
|
|
|
|
- log.error(e.getMessage(),e);
|
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
try {
|
|
try {
|
|
- Watermark.imageWatermark("E:\\test.pdf","E:\\test2.pdf","C:\\picc\\logo.png");
|
|
|
|
|
|
+ String imageUrl = "http://rccs.oss-cn-hangzhou.aliyuncs.com/picc/company/2020/4/荆鹏公章08165131844.png";
|
|
|
|
+ String defaultStampFileUrl = "http://rccs.oss-cn-hangzhou.aliyuncs.com/picc/company/2020/3/湖北远鹏众创空间科技有限公司30131324437.png";
|
|
|
|
+
|
|
|
|
+ Watermark.imageWatermark("E:\\20200401100411414.pdf", "E:\\test2.pdf", imageUrl, defaultStampFileUrl);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
- System.out.println("done");
|
|
|
|
|
|
|
|
|
|
+ System.out.println("done");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|