2015-02-10 67 views
0

我正在製作pdf解析器,當我試圖讀取文本的轉換矩陣(Tm)時遇到問題。如何從pdf的轉換矩陣中獲取文本的高度?

例如,當我有一個水平文本,變換矩陣是這樣的:
「71.9871 0 0 73.5 178.668 522.2227的Tm」 這意味着該文本的高度是d參數(73.5),的比率每個字符是a/d(71.9871/73.5),它必須被轉換爲點(178.668 522.2227)。

如果我旋轉此文,然後變換矩陣如下所示:
「63.1614 -34.5367 35.2625 64.4888 181.8616 575.8494以舊換新」

我怎樣才能獲取文本的高度,這是73.5?

如果我出口相同的文件作爲一個SVG文件我得到這個矩陣: 「0.8593 0.4699 -0.4798 0.8774 181.8616 266.0405」 和文本的高度爲73.5。 (我注意到,如果我將旋轉後的文本的d參數與文本的高度(73.5)分開,我會得到svg矩陣的d參數(0.8774),但是,我怎樣才能知道文本的高度?)。

謝謝。在註釋中已經提到

+1

首先,您知道(至少!)兩個矩陣和三個標量在這裏涉及?您有當前的轉換矩陣,文本矩陣,字體大小,水平縮放比例和頁面用戶單位設置。 – mkl 2015-02-10 16:10:11

回答

1

正如,你實際上有矩陣和標量的多種應對,至少當前轉換矩陣,文本矩陣,字體大小,水平縮放和網頁用戶單位設置。當然,你可以將所有這些組合成一個矩陣。

因此,讓我們假設你有矩陣是這樣的組合之一。

爲了確定該字體從其大小1默認狀態拉伸的因素,則可以簡單地認爲矩陣應用到垂直和長度爲1的水平線段,例如[0,0,1]到[1,0,1]和[0,0,1]到[0,!,1],然後計算結果線段的長度。

PS做一些小的線性代數,你會看到,對於矩陣

a b 0 
c d 0 
e f 1 

這總計的sqrt(a² + b²)一個水平字體程度和垂直字體跨越(高度)的sqrt(c² + d²)