2012-01-06 24 views
6

我們目前正在與多家出版商合作,從PDF中生成在線圖書。我們的傳統應用程序使用flex,因此,我們正在使用PDF2SWFSWFTools將PDF轉換爲SWF文件。訪問PDF內的字體文件

我們遇到的問題是當用戶執行搜索時,SWF文檔中的文本沒有被我們的flex閱讀器突出顯示。快速調查後,我們發現,提取文本的時候,我們需要嵌入由PDF文檔中使用的字體:

http://wiki.swftools.org/wiki/How_do_I_highlight_text_in_the_SWF%3F

pdf2swf -F $YOUR_FONTS_DIR$ -f input.pdf -o output.swf 

正如你可以從上面的代碼中看到的,我們需要一個路徑一個字體目錄包含在該PDF中找到的字體。

由於我們將轉換大量的PDF文件,是否可以直接通過PDF訪問字體文件,而不是在我們的應用程序中存儲很多字體?

其他信息

我們的應用程序是用Java編寫。

我們目前在應用程序中使用PDFBox和Ghostscript,因此如果任何解決方案使用這些庫,那麼這將是首選,但我們對所有想法都開放。

+0

相關問題:http://stackoverflow.com/ q/3488042/681807 – 2012-08-15 07:32:15

回答

7

PDF文件不包含字體'文件',它們甚至可能根本不包含任何字體,儘管這很少見。嵌入的字體數據可以是一個令人困惑的各種格式:

  • 類型1 PostScript字體
  • 類型3的PostScript
  • 字體TrueType字體
  • 的PostScript CFF字體
  • CID字體小節1型的PostScript輪廓
  • 帶3型PostScript輪廓的CIDFonts
  • 帶TrueType輪廓的CIDFonts
  • CID字體小節與CFF輪廓
  • CID字體小節與位圖圖像

將您的應用程序能夠讀取所有這些字體格式?如果你想使用它們,那麼你必須使用PDF文件中嵌入的字體,因爲它們通常是子集字體,並提供了自定義編碼,這意味着即使你有原始字體,你也不能使用它,因爲編碼不正確。

當然,這可能是因爲這些PDF文件都以一致的方式創建和不使用嵌入字體,但我有我的懷疑....

+0

請注意,CIDFonts通常不會映射到Unicode字符代碼,因此如果您的PDF包含這些代碼,您將很難將文檔字符映射到Unicode字符以進行搜索。 – Rup 2012-01-06 15:14:20

+0

@KenS - 感謝您的回答。您的疑惑是正確的,PDF正在使用嵌入式子集字體。我不認爲你有一個來源來支持你的答案? – 2012-01-06 15:16:22

+1

@Rup - 感謝您指出。我們將支持廣泛的語言,但不支持任何腳本樣式(日語,韓語等) – 2012-01-06 15:20:59