Julia使用libharu

於 2025年1月20日 (一) 22:43 由 Tankianting討論 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

最近使用BinaryBuilder製作一個libharu(C/C++的PDF繪製生成函式庫)對Julia的binding,放在這裡:https://github.com/Yoxem/libharu_jll.jl

使用 @ccall 巨集呼叫該C函式庫。

使用方法:

  1. 輸入julia進入REPL模式後,按「]」進入套件管理模式,輸入add https://github.com/Yoxem/libharu_jll.jl.git
  2. 以下為範例程式,使用UTF-8編碼,輸出文字。其中中文因為字型沒有字,所以出現方框。另外希伯來文是順序顛倒的。
julia > using libharu_jll
julia > pdf = @ccall libhpdf.HPDF_New(""::Cstring, 0::Cint)::Ptr{float};page = @ccall libhpdf.HPDF_AddPage(pdf::Ptr{float})::Ptr{float}
julia > font_name = @ccall libhpdf.HPDF_LoadTTFontFromFile(pdf::Ptr{float}, "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"::Cstring, 1::Cint)::Cstring; #載入ttf字型,字型路徑僅供參考
julia> @ccall libhpdf.HPDF_UseUTFEncodings(pdf::Ptr{float})::Ptr{float}; #使用UTF-8前必加
julia> @ccall libhpdf.HPDF_SetCurrentEncoder(pdf::Ptr{float}, "UTF-8"::Cstring)::Ptr{float}; #用UTF-8
julia> font2 = @ccall libhpdf.HPDF_GetFont(pdf::Ptr{float}, font_name::Cstring, "UTF-8"::Cstring)::Ptr{float}; #新增使用字體
julia> @ccall libhpdf.HPDF_Page_SetFontAndSize(page::Ptr{float}, font2::Ptr{float}, 20.0::Cfloat)::Ptr{Cfloat}; #設定輸出字體與大小
julia> @ccall libhpdf.HPDF_Page_BeginText(page::Ptr{float})::Ptr{float}; #宣告加入文字
julia> @ccall libhpdf.HPDF_Page_TextOut(page::Ptr{float}, 45.0::Cfloat, 630.0::Cfloat, "123 上下中 שׁלום"::Cstring)::Ptr{float}; #輸出內文
julia> @ccall libhpdf.HPDF_Page_EndText(page::Ptr{float})::Ptr{float}; #宣告完成加入文字
julia> @ccall libhpdf.HPDF_SaveToFile(pdf::Ptr{float}, "test4.pdf"::Cstring)::Ptr{float}; #存檔到PDF

輸出結果如下:

輸出的PDF,中文「上下中」變問號,因為FreeSerif字型裡面沒有中文;希伯來文「שׁלום」順序顛倒。