1. 程式人生 > 其它 >Java 新增PDF圖章(印章)——圖片圖章、動態圖章

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