使用AcroForm技术提交PDF表单时的数据编码

Bru*_*gie 5 pdf

当我创建一个包含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=
Run Code Online (Sandbox Code Playgroud)

除了x-www-form-urlencoded之外,没有对编码的引用.这两个字形表示为四个字节:B2 E2 CA D4.经过一些调查,我知道B2E2是第一个字形的GBK值,CAD4是第二个字形的GBK值,但是我不能从请求头中获取它.

它总是GBK吗?我想通过在PDF中的字典中设置特定键来更改数据编码,但似乎没有.例如:我想确保PDF始终发送Unicode字符而不是GBK.

请注意,我已经通过更改文本字段的默认字体(和编码)进行了实验.我还搜索了ISO-32000-1中的字段编码,但我发现的只是为复选框定义非拉丁字符的方法,以及有关FDF文件编码的一些信息.这些都没有回答我的问题.

Bru*_*gie 9

我自己刚刚找到了我的主要问题的答案.我没有在ISO-32000-1或ISO-32000-2草案中找到任何内容,但在研究Acrobat JavaScript参考时,我找到了cCharsetsubmitForm()方法可用的参数.该参数定义:

提交值的编码.字符串值为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-8,utf-16, Shift-JIS,BigFive,GBKUHC.

从PDF 2.0开始,此问题将不再存在.

更新:我的建议是ISO 32000-2(又名PDF 2.0):

在此输入图像描述

字符集的关键并不在ISO 32000-1存在; 它是在ISO 32000-2中引入的.

  • 我已将此发送给Adobe和ISO委员会.我将尝试将此文档记录在ISO-32000-2中. (4认同)