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是隔絕的。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM