83 lines
2.4 KiB
Racket
83 lines
2.4 KiB
Racket
|
#lang racket/base
|
||
|
|
||
|
(require ffi/unsafe)
|
||
|
|
||
|
(define libhpdf (ffi-lib "../3rdparty/libhpdf"))
|
||
|
|
||
|
(define pdf-new-raw
|
||
|
(get-ffi-obj "HPDF_New" libhpdf
|
||
|
(_fun _int _int -> _pointer)))
|
||
|
|
||
|
(define pdf-save-raw
|
||
|
(get-ffi-obj "HPDF_SaveToFile" libhpdf
|
||
|
(_fun _pointer _string/utf-8 -> _int)))
|
||
|
|
||
|
(define pdf-free-raw
|
||
|
(get-ffi-obj "HPDF_Free" libhpdf
|
||
|
(_fun _pointer -> _void)))
|
||
|
|
||
|
(define add-page-raw
|
||
|
(get-ffi-obj "HPDF_AddPage" libhpdf
|
||
|
(_fun _pointer -> _pointer)))
|
||
|
|
||
|
(define load-ttf-raw
|
||
|
(get-ffi-obj "HPDF_LoadTTFontFromFile" libhpdf
|
||
|
(_fun _pointer _string/utf-8 _bool -> _string)))
|
||
|
|
||
|
(define use-utf-encodingd-raw
|
||
|
(get-ffi-obj "HPDF_UseUTFEncodings" libhpdf
|
||
|
(_fun _pointer -> _int)))
|
||
|
|
||
|
(define set-current-encoder-raw
|
||
|
(get-ffi-obj "HPDF_SetCurrentEncoder" libhpdf
|
||
|
(_fun _pointer _string -> _pointer)))
|
||
|
|
||
|
(define get-font-raw
|
||
|
(get-ffi-obj "HPDF_GetFont" libhpdf
|
||
|
(_fun _pointer _string _string/utf-8 -> _pointer)))
|
||
|
|
||
|
(define set-font-size-raw
|
||
|
(get-ffi-obj "HPDF_Page_SetFontAndSize" libhpdf
|
||
|
(_fun _pointer _pointer _float -> _pointer)))
|
||
|
|
||
|
(define page-begin-text-raw
|
||
|
(get-ffi-obj "HPDF_Page_BeginText" libhpdf
|
||
|
(_fun _pointer -> _pointer)))
|
||
|
|
||
|
(define page-text-out-raw
|
||
|
(get-ffi-obj "HPDF_Page_TextOut" libhpdf
|
||
|
(_fun _pointer _float _float _string/utf-8 -> _pointer)))
|
||
|
|
||
|
(define page-end-text-raw
|
||
|
(get-ffi-obj "HPDF_Page_EndText" libhpdf
|
||
|
(_fun _pointer -> _pointer)))
|
||
|
|
||
|
|
||
|
(define (new-pdf) (pdf-new-raw 0 0))
|
||
|
(define (save-pdf pdf path) (pdf-save-raw pdf path))
|
||
|
(define (new-page pdf) (add-page-raw pdf))
|
||
|
(define (free-pdf p) (pdf-free-raw p)) ; Error invalid memory reference. Some debugging context lost
|
||
|
|
||
|
(define (new-ttf-font p font)
|
||
|
(define ttf-loaded (load-ttf-raw p font #t))
|
||
|
(get-font-raw p ttf-loaded "UTF-8"))
|
||
|
(define (use-utf8 p)
|
||
|
(use-utf-encodingd-raw p)
|
||
|
(set-current-encoder-raw p "UTF-8"))
|
||
|
|
||
|
(define (set-font-size page font size) (set-font-size-raw page font size))
|
||
|
(define (put-text page x y text)
|
||
|
(page-begin-text-raw page)
|
||
|
(page-text-out-raw page x y text)
|
||
|
(page-end-text-raw page)
|
||
|
)
|
||
|
|
||
|
; 以下是測試區
|
||
|
(define doc (new-pdf))
|
||
|
(define pg (new-page doc))
|
||
|
(use-utf8 doc)
|
||
|
(define ian-sui (new-ttf-font doc "/home/yoxem/.local/share/fonts/Iansui-Regular.ttf"))
|
||
|
(set-font-size pg ian-sui 15.0)
|
||
|
(put-text pg 140.0 150.0 "天地人123abc")
|
||
|
(save-pdf doc "/tmp/a.pdf")
|
||
|
(free-pdf doc)
|