4

AcroForm形式(PDFディクショナリ、XFAなし)のテキストフィールドを含むPDFフォームを作成し(たとえばAcrobatを使用)、データをサーバーに送信する場合、使用するエンコーディングを指定/取得するにはどうすればよいですか?

例えば。中国語のグリフ「を试」(テスト)を送信すると、サーバー側に次のヘッダーとコンテンツが表示されます。

accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
content-type: application/x-www-form-urlencoded
content-length: 23
acrobat-version: 10.1.4
user-agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; AskTbCLA/5.15.1.22229)
accept-encoding: gzip, deflate
connection: Keep-Alive
Song=%b2%e2%ca%d4&Test=

x-www-form-urlencodedを除いて、エンコーディングへの参照はありません。2つのグリフは4バイトとして表されます:B2 E2CAD4。調査の結果、B2E2が最初のグリフのGBK値であり、CAD4が2番目のグリフのGBK値であることがわかりましたが、これを要求ヘッダーから導出することはできません。

いつもGBKですか?PDFの辞書に特定のキーを設定してデータエンコーディングを変更したいのですが、ないようです。例:PDFが常にGBKではなくUnicode文字を送信するようにしたい。

テキストフィールドのデフォルトのフォント(およびエンコーディング)を変更して、すでに実験を行っていることに注意してください。また、フィールドのエンコーディングについてISO-32000-1を検索しましたが、見つけたのは、チェックボックスの非ラテン文字を定義する方法と、FDFファイルのエンコーディングに関する情報だけでした。どれも私の質問に答えませんでした。

4

1 に答える 1

8

私は自分の主な質問に対する答えを自分で見つけました。ISO-32000-1またはISO-32000-2ドラフトには何も見つかりませんでしたが、Acrobat JavaScriptリファレンスを調べてcCharset、メソッドで使用できるパラメーターを見つけましたsubmitForm()。そのパラメータは以下を定義します:

送信された値のエンコーディング。文字列値は、utf-8、utf-16、Shift-JIS、BigFive、GBK、およびUHCです。合格しなかった場合、現在のAcrobatの動作が適用されます。XMLベースの形式の場合、utf-8が使用されます。他の形式の場合、Acrobatは送信される値に最適なホストエンコーディングを見つけようとします。XFDF送信はこの値を無視し、常にutf-8を使用します。

言い換えれば、私の場合、漢字を送信するのに最適なGBKが使用されました。submitForm()ただし、適切な値を使用してJavaScriptメソッドを使用することにより、UTF-8を強制することができます。

この質問に基づいて、私はISO委員会にISO-32000-2でこの問題を修正するように依頼しました。その結果、セクション12.7.6.2のフォーム送信アクションに固有の追加エントリというタイトルのテーブルに追加の可能なエントリが追加されました。

CharSet:文字列

(オプション;継承可能)可能な値には、 utf-8utf-16Shift-JISBigFiveGBK、またはUHCが含まれます。

PDF 2.0以降、この問題は発生しなくなります。

更新:私の提案はISO 32000-2(別名PDF 2.0)を作成しました:

ここに画像の説明を入力してください

CharSetキーはISO3200-1には存在しません。ISO32000-2で導入されました。

于 2012-12-16T13:27:49.203 に答える