IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java实现在PDF中添加骑缝章 -> 正文阅读

[大数据]Java实现在PDF中添加骑缝章

什么是缝骑章?

骑缝章(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;

/**
 * @Author  魏一鹤
 * @Description  骑缝章生成
 * @Date 17:03 2022/6/27
**/

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

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:08:56  更:2022-06-29 19:11:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年3日历 -2024/3/28 18:23:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码