2

私たちは何年もの間、アプリケーションの ActiveX コントロールを介して PDF への付箋/注釈/コメントの読み書きを行ってきました。最近、Unicode をサポートする Delphi2009 にアップグレードしました。以下が問題を引き起こしています。

電話すると

CAcroPDAnnot.GetContents

結果はかなり奇妙に見え、Unicode Char が失われます。通常は ????? が返される ansi 文字列として保存するのとは異なります。代わりに、次のような文字列を取得します

‚És‚"ú‚É•—Ž×‚ð‚Ђ¢‚½‚ç</p>

日本語の文字列の場合。

ただし、pdf自体のメニューを介してpdfのコメントをデータファイルに保存すると、次のようなファイルに書き込まれます

0kˆL0Oeå0k˜¨ª0'0r0D0_0‰</p>

後者は、エクスポートして acrobat pdf に再インポートすることができ、正しい Unicode 文字を再作成します。ただし、コードで CAcroPDAnnot.GetContents を呼び出すと、別のものとして戻ってきます。

  1. CAcroPDAnnot.GetContents は壊れていますか?
  2. 知っておくべきエンコード方式はありますか?
  3. 私ができるかもしれない代替手段はありますか?

ありがとう

4

3 に答える 3

1

あなたは私たちに作業するための多くの情報を正確に提供していません.

ここで「Acrobat.CAcroPDAnnot」クラスのメソッド GetContents について話していると思います。どのバージョンの Acrobat を使用していますか? Delphi 2009 でプログラミングを始めた頃に、バージョンを切り替えた (または更新を実行した) ことはありますか?

次に、どのようにオブジェクトをインスタンス化しましたか? DLL から生成された *_TLB.pas ファイルを使用している場合、それがまだ一致していると確信していますか? (不明な場合は、再生成してみてください)。

3 番目: どのようにメソッドを呼び出していますか? 結果を代入する変数のタイプは何ですか?

また、注釈のサンプル(できれば非ASCII文字を含む)を提供できれば、役立つかもしれません。そしてその注釈のために:

  • どのように表示されるか (および Reader 内でどのように表示されるか)
  • Delphi* の 2009 年より前のバージョンを使用した場合に返されるもの
  • Delphi 2009 の使用時に返されるもの*

(* (ansi/wide) 文字列の HEX バイト コードが望ましいですが、Ctrl-F7 インスペクタからの出力で十分です)

そうすれば、誰かがより意味のある答えを提供できるかもしれません。

于 2009-02-03T17:21:13.333 に答える
0

Delphi 2009 と以前のバージョンの主な違いの 1 つは、デフォルトの文字列型が Unicode 文字列であることです。つまり、以前のバージョンと同じ ActiveX コンポーネントを使用すると、Unicode 文字列を ascii 文字列に渡すことになり、通常はお勧めできません。

この問題にはいくつかの解決策があります。

  • 完全な Unicode 文字列をサポートするように、activeX コンポーネントをアップグレードできるかどうか試してください。
  • ActiveX コンポーネントとの通信には、文字列ではなく AnsiString を使用します。この場合、古いインターフェイスを引き続き使用できますが、同じ制限が適用されます。
  • PDFを作成する他のコントロールを使用してください。見つけることはたくさんありますが、ソフトウェアの大部分を変更する準備をしてください。(一部のコントロールは XML ベースで、エンコードを使用します。)
于 2009-01-30T21:14:50.477 に答える