栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现在PDF中添加骑缝章

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现在PDF中添加骑缝章

什么是缝骑章?

骑缝章(Paging seal.)是海关常用词汇。为了保证海关监管货物留存单据的完整齐全以及核对有关单证,在单据交接处所加盖的印章。

在两张纸交接处的印章。这种印章多盖在条据、证书或其他应用文书与存根连接的地方。加盖这种印章,具有以备存查和防止伪造的作用。

骑缝章是用于往来业务合同,以确保合同真实、有效的印章加盖方法,是一种防范风险的重要方式

不理解?没关系,找几张图看下就知道了

类似这样

这样

还有这样

看到这我想起来了小学的时候在厚厚的课本的,用笔在书的全部页码上写自己的名字,这样每张纸都会有痕迹,是不是很像呀

好了言归正传,接下来就使用Java代码进行生成缝骑章

首先引入相关依赖
  
        
            com.itextpdf
            itextpdf
            5.5.13
        

        
            com.itextpdf
            itext-asian
            5.2.0
        

        
            com.itextpdf.tool
            xmlworker
            5.5.13
        

        
            fr.opensagres.xdocreport
            fr.opensagres.poi.xwpf.converter.pdf-gae
            2.0.1
        
在resources目录下新建license.xml 代码如下

  
    
      Aspose.Total for Java
      Aspose.Words for Java
    
    Enterprise
    20991231
    20991231
    8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7
  
  sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=

造一个电子印章

印章哪里来呢? 我们可以做一个假的玩玩

这里用到一个平台 官网如下

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类
        PdfUnitConvertor convert = new PdfUnitConvertor();
        PdfPageBase pageBase;
        //将图片绘制到PDF页面上的指定位置
        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");

    }

    //定义GetImage方法,根据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 分割的签章图片是动态计算的,页数特别多的话有可能会分不过来

欢迎大家评论留言补充完善和观看!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号