什么是缝骑章?
骑缝章(Paging seal.)是海关常用词汇。为了保证海关监管货物留存单据的完整齐全以及核对有关单证,在单据交接处所加盖的印章。
在两张纸交接处的印章。这种印章多盖在条据、证书或其他应用文书与存根连接的地方。加盖这种印章,具有以备存查和防止伪造的作用。
骑缝章是用于往来业务合同,以确保合同真实、有效的印章加盖方法,是一种防范风险的重要方式
不理解?没关系,找几张图看下就知道了
类似这样 这样 还有这样 看到这我想起来了小学的时候在厚厚的课本的,用笔在书的全部页码上写自己的名字,这样每张纸都会有痕迹,是不是很像呀
好了言归正传,接下来就使用Java代码进行生成缝骑章
首先引入相关依赖
<!--骑缝章相关依赖--->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
<version>2.0.1</version>
</dependency>
在resources目录下新建license.xml 代码如下
<License>
<Data>
<Products>
<Product>Aspose.Total for Java</Product>
<Product>Aspose.Words for Java</Product>
</Products>
<EditionType>Enterprise</EditionType>
<SubscriptionExpiry>20991231</SubscriptionExpiry>
<LicenseExpiry>20991231</LicenseExpiry>
<SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
</Data>
<Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>
造一个电子印章
印章哪里来呢? 我们可以做一个假的玩玩
这里用到一个平台 官网如下
http://www.395.net.cn/
根据自己的需求制造 然后保存本地
然后制造一个PDF(尽量多弄几页进行测试)
可以使用工具把word转换为pdf也是可以的 这里我用了三页 编写Java代码如下
package dmyz.util;
import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfGraphicsUnit;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfUnitConvertor;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class AcrossPageSeal {
public static void main(String[] args) throws IOException {
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("D:\\File\\test\\wyh\\3页.pdf");
BufferedImage[] images = GetImage(pdf.getPages().getCount());
float x = 0;
float y = 0;
PdfUnitConvertor convert = new PdfUnitConvertor();
PdfPageBase pageBase;
for (int i = 0; i < pdf.getPages().getCount(); i++)
{
BufferedImage image= images[ i ];
pageBase = pdf.getPages().get(i);
x = (float)pageBase.getSize().getWidth() - convert.convertUnits(image.getWidth(), PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel) + 40;
y = (float) pageBase.getSize().getHeight()/ 2;
pageBase.getCanvas().drawImage(PdfImage.fromImage(image), new Point2D.Float(x, y));
}
System.out.println("x = " + x);
System.out.println("y = " + y);
pdf.saveToFile("D:\\File\\test\\wyh\\Result.pdf");
}
static BufferedImage[] GetImage(int num) throws IOException {
String originalImg = "D:\\File\\test\\wyh\\魏一鹤的测试印章.png";
BufferedImage image = ImageIO.read(new File(originalImg));
int rows = 1;
int cols = num;
int chunks = rows * cols;
int chunkWidth = image.getWidth() / cols;
int chunkHeight = image.getHeight() / rows;
int count = 0;
BufferedImage[] imgs = new BufferedImage[ chunks ];
for (int x = 0; x < rows; x++) {
for (int y = 0; y < cols; y++) {
imgs[ count ] = new BufferedImage(chunkWidth, chunkHeight, image.getType());
Graphics2D gr = imgs[ count++ ].createGraphics();
gr.drawImage(image, 0, 0, chunkWidth, chunkHeight,
chunkWidth * y, chunkHeight * x,
chunkWidth * y + chunkWidth, chunkHeight * x + chunkHeight, Color.WHITE,null);
gr.dispose();
}
}
return imgs;
}
}
记得把文件换成自己本地的哦
运行代码测试
查看结果
发现本地已经生成了结果 第一页 第二页 第三页 完美符合我们的期望!
缺陷和不足
第一页会有这个错 已经解决并且发布文章,详见
https://blog.csdn.net/weixin_46713508/article/details/125488915?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125488915%22%2C%22source%22%3A%22weixin_46713508%22%7D&ctrtid=eX2p7
项目目录如下
注意事项
1 需要注意是不是本地文件目录 2 分割的签章图片是动态计算的,页数特别多的话有可能会分不过来
欢迎大家评论留言补充完善和观看!
|