2013-06-11 54 views
3

我試圖改變一個簡單的RAW PDF文件,使用不同的字體編碼(win-1257)。這是文件:PDF規範:如何指定核心字體的編碼?

%PDF-1.4 
1 0 obj <</Type /Catalog /Pages 2 0 R>> 
endobj 
2 0 obj <</Type /Pages /Kids [3 0 R] /Count 1>> 
endobj 
3 0 obj<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 500 800] /Contents 6 0 R>> 
endobj 
4 0 obj<</Font <</F1 5 0 R>>>> 
endobj 
5 0 obj<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>> 
endobj 
6 0 obj 
<</Length 44>> 
stream 
BT /F1 24 Tf 100 100 Td (ąčęėį šąčįžė)Tj ET 
endstream 
endobj 
xref 
0 7 
0000000000 65535 f 
0000000009 00000 n 
0000000056 00000 n 
0000000111 00000 n 
0000000212 00000 n 
0000000250 00000 n 
0000000317 00000 n 
trailer <</Size 7/Root 1 0 R>> 
startxref 
406 
%%EOF 

BT/F1 24 TF 100 100時間Td(ąčęėįšąčįžė)TJ等這裏指定與贏-1257編碼的字符的文本流。問題是,這些字符不能正確顯示在PDF中。

我將如何更改此文檔以正確顯示字符?有沒有簡單的方法來設置編碼?我懷疑< < /類型/編碼/差異用於重新映射字符,但即使我的懷疑是正確的 - 這似乎有點太難了。

感謝在看看

回答

3
5 0 obj<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>> 
[...] 
BT /F1 24 Tf 100 100 Td (ąčęėį šąčįžė)Tj ET 

我將如何改變這個文件的字符正確顯示?

除了/編碼詞典與/差異最有可能是設置編碼爲@Xinwang已經亮起,我想指出的是,你可能有一些額外的問題,最簡單的方法:不是所有的的字符可能在/Helvetica或任何其他核心標準14字體中有單個關聯字形!

參考規格ISO 32000-1;第9.6.2.2節指定符合PDF閱讀器必須具備的核心字體,詳情請參閱附錄D.在該附件中,您閱讀:

D.2「拉丁字符集和編碼」,描述了Adobe標準拉丁文字體的整個字符集。這個字符集應該由Times,Helvetica和Courier字體系列支持,它們是標準的14種預定義字體之一;

...如果您將D.2中的表格與您的角色選擇進行比較,您會發現例如只有小寫字母以下品種

a a 
á aacute 
â acircumflex 
ä adieresis 
æ ae 
à agrave 
å aring 
ã atilde 

因此,標準不要求一個PDF瀏覽器提供您一個單個字形表示!

有該表中的字形,不過,這可能會在結合使用的一個字形構建一個

˛ ogonek 

因此,你可能需要使用兩個字符,a˛,在內容流中顯示±,甚至可能需要修正它們之間的距離。

所有特殊字符的情況相似。

因此,對於您的PDF與黑體的一個(或任何其他的你的特殊字符),無法正確顯示在所有觀衆,你可能會需要改變無論如何內容流。

這就是說,Adobe Helvetica字體似乎知道一個字形名爲aogonek;因此,如果你不關心所有的PDF閱讀器,但主要的一個足夠,你可能會帶走僅僅/編碼字典與/區別

+0

感謝您的解釋。我終於得出了同樣的結論,即我的系統上的Helvetica字體支持各種有趣的字符,但Adobe的標準字體根本沒有我需要的字形。 – Marius

3

使用/Difference應該是最簡單的方法。其他解決方案包括:

  1. 在Tj命令中重新編碼字符串。
  2. 自己製作字體(非常複雜)。
+0

如果OP自己也創建了「raw PDF」,那麼重新編碼也應該很容易。實質上,這三個項目是選項。 – mkl

+0

我試過使用iconv從UTF-8轉換爲CP1257(在PHP中),但輸出結果並不如預期 – Marius