2008-12-17 65 views
1

我們一直在閱讀和寫粘滯便箋/註釋/評論通過在我們的應用程序多年的ActiveX控件的PDF文件。我們最近使用Unicode支持升級到Delphi2009。以下是導致問題。acrobat如何將註釋添加爲pdf的粘滯便箋?

當我們調用

CAcroPDAnnot.GetContents

結果似乎是相當奇怪的,我們失去了我們的Unicode字符數。這不像是保存爲一個ansi字符串,通常會導致返回?????相反,我們得到一個字符串,如

,ES,「ú,É•-z×,ð,Ð,¢,½,ç

對於日文字符的字符串。

但是如果我通過在PDF本身的菜單也被寫入文件,就像這樣

0kL0Oeå0k~¨ª0'0r0D0_0‰

在PDF註釋保存到數據文件,後者可以導出並重新導入到acrobat pdf中,並將重新創建正確的unicode字符。但是,一旦我在代碼中調用CAcroPDAnnot.GetContents,它就會返回其他內容。

  1. CAcroPDAnnot.GetContents是否被破壞?
  2. 是否有我應該注意的編碼方案?
  3. 有沒有其他方法可以做到?

感謝

+0

只是在黑暗中刺傷。什麼是CAcroPDAnnot.GetContents上的返回類型,以及您之前如何管理它?做ansi粘滯便箋仍然工作?我想知道這些註釋是否以UTF-8的形式返回,所以在德爾福2009年時你將不得不稍微處理它們。 – 2008-12-17 19:02:39

+0

因爲它是ASCII碼字符和未編碼的,所以我們之前不必管理它們。我可能在2009年必須以不同的方式處理這件事,但到目前爲止,我對如何處理它感到不知所措。 – 2008-12-21 21:22:26

回答

2

,ES,「ú,É•-z×,ð,Ð,¢,½,ç

這是字符串:

に行く日に風邪をひいたら

CP-932又名Shift-JIS編碼,在日本是一種可怕的,但可悲的仍然流行的編碼。

您目前正在將其解釋爲CP-1252(Windows西歐版)。如果您的PDF閱讀組件不能自動爲您進行轉換,您需要找到一種方法來檢測文檔的編碼並手動進行轉換。

我不知道Delphi爲閱讀編碼提供了什麼,但是從控制面板 - >區域選項 - >「爲東亞語言安裝文件」選項獲得了Windows中安裝的Shift-JIS編碼嗎?如果不是這樣,那也許可以解釋爲什麼它不能自動轉換。

0

好,2009年德爾福與早期版本之間的主要區別之一是,默認的字符串類型是unicode字符串。這意味着如果您使用與以前版本相同的ActiveX組件,則您將unicode字符串傳遞給ascii字符串,這通常不是一個好主意。

有一對夫婦爲這個問題的解決方案:

  • 嘗試如果是這樣,它支持完整的Unicode字符串,你可以升級你的ActiveX組件。
  • 使用AnsiString而不是字符串與activeX組件進行通信。在這種情況下,您仍然可以使用舊界面,但仍然受到相同的限制。
  • 使用其他控件創建pdf。有很多東西可以找到,但要準備好改變你的軟件的一大塊。 (一些控件是基於XML的,並使用編碼。)
1

您不完全給我們提供大量的信息。

我認爲你說的是​​「Acrobat.CAcroPDAnnot」類的方法GetContents在這裏。你使用的是哪個版本的Acrobat?在開始使用Delphi 2009進行編程時,您是否可能會切換版本(或運行更新)?

然後:你是如何實例化對象的?如果使用從DLL生成的* _TLB.pas文件,你確定它仍然匹配它嗎? (嘗試重新生成它,如果不確定)。

第三:你打算怎麼調用這個方法?你將結果分配給什麼類型的變量?

如果你可以提供一個註解的樣本(最好包括非ASCII字符),那麼可能還有幫助。併爲註釋:

  • 什麼應該樣子(以及它看起來像內部閱讀器)
  • 它使用預2009年版本的Delphi的時候返回*
  • 它返回什麼使用2009年的Delphi *

時(*的(ANSI /寬)串的優選HEX字節代碼;從所述按Ctrl-F7檢查員但輸出應該做)

那麼也許有人可以提供更有意義的答案。