Java 添加PDF图章(印章)——图片图章、动态图章

工作需求,需要给pdf添加印章和动态文字,参考博主https://zhuanlan.zhihu.com/p/120895710  进行操作,中途遇见的问题记录一下,最终还是成功完成工程。

1.maven引用外部包

文中使用的工具Free Spire.PDF for Java通过maven没法下载,所以通过下载jar的方式,然后引用到项目。在IDE中开发调试没有任何问题,但是打包的时候,包报错,提示是包找不到。猜测引用外部包在打包的时候应做一些其他操作。

参考博文:https://blog.csdn.net/pltuyuhong/article/details/50954017   里面提到3种方式,经试验,只有第三种有效。如下:

 

    mvn install:install-file -Dfile=cloud.jar -DgroupId=com.hope.cloud -DartifactId=cloud -Dversion=1.0 -Dpackaging=jar


    <dependency>
    <groupId>com.hope.cloud</groupId>
    <artifactId>cloud</artifactId>
    <version>1.0</version>
    </dependency>

 

 

2.linux安装中文字体

因为动态文字包含中文,所以需要在linux系统安装中文字体。参考博文:https://www.cnblogs.com/helios-fz/p/13706157.html   

  • yum -y install fontconfig
  • 在/usr/shared/fonts目录下新建一个目录chinese
  • Win10 C盘下的Windows/Fonts里面的字体拷贝需要到chinese目录
  • chmod -R 755 /usr/share/fonts/chinese
  • yum -y install ttmkfdir
  • ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir #我系统没有这个文件,没有执行也成功了
  • vi /etc/fonts/fonts.conf

  • fc-cache
  • fc-list看一下字体列表

使用java代码查看系统支持哪些字体

public static void main(String[] args) {
    GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); //返回本地 GraphicsEnvironment 。
    String [] forName = e.getAvailableFontFamilyNames(); //返回包含在此所有字体系列名称的数组, GraphicsEnvironment本地化为默认的语言环境,如返回 Locale.getDefault() 。 
    for (int i = 0; i < forName.length; i++) //逐行输出
        System.out.println(forName[i]);
}

保存文件名为Test2.java。执行javac Test2.java 会生成Test2.class 。然后执行java Test2.class,会提示类找不到,其实应该用java Test2

 3.遇见的坑

最开始代码是docker运行的,每次执行到 PdfTrueTypeFont font1 = new PdfTrueTypeFont(new java.awt.Font("SimSun", java.awt.Font.PLAIN ,15), true);   就报错,说不认识这个字体,一直在怀疑是上面步骤的字体安装是否有问题,在这里折腾了很久。后面改成不用docker,直接系统运行java程序,里面成功。猜测可能是系统里面的字体和docker是隔绝的。

 

 

 

 

 

posted @ 2021-10-29 15:07  Lucy151213  阅读(820)  评论(0编辑  收藏  举报