我用表单创建了一个PDF。对于某些默认值(到目前为止,我只遇到了希伯来语和俄语中某些值的问题 - 从不使用英语),如果提交了默认值,我会立即收到无效服务器响应错误。从服务器端日志中我看到请求永远不会到达服务器。使用其他默认值(即使在希伯来语中),或者如果手动输入相同的默认值,则提交成功。 以下是设置默认值的代码:
textfield.setValue(JavaItext.reverseString(params.defval)); textfield.setDefaultValue(new PdfString(JavaItext.reverseString(params.defval)));当然,
textfield是一个PdfTextFormField对象。方法reverseString()反转希伯来字符串中字符的顺序。
非常感谢任何帮助。
答案 0 :(得分:0)
提交按钮操作JacaScript命令出错,使用了无效的编码名称。
PDF中的JavaScript操作是:
this.submitForm({cURL: "http://asb.aman.co.il:8080/formit/ActiveDocument/FormMonitor", cSubmitAs: "HTML", cCharset: "UTF-8"});
根据Acrobat API Reference的JavaScript,
cCharset
(可选,Acrobat 6.0)提交值的编码。字符串值 是utf-8
,utf-16
,Shift-JIS
,BigFive
,GBK
和UHC
。如果未通过,则应用当前的Acrobat行为。对于基于XML的格式, 使用
utf-8
。对于其他格式,Acrobat会尝试查找最佳主机 编码提交的值。
因此,"UTF-8"
不是有效值,因此默认行为启动,Adobe Reader确定“最佳主机编码”。在这种情况下,这是一些其他编码,在我的测试中有一些单字节编码。
服务器尝试现在尝试将数据解析为失败的UTF-8编码数据:
Apache Tomcat / 6.0.35 - 错误报告
HTTP状态500 -
类型异常报告
消息
描述服务器遇到内部错误(),导致服务器无法完成此请求。
异常
java.lang.StringIndexOutOfBoundsException: String index out of range: -1 java.lang.String.substring(String.java:1875) il.co.aman.apps.Utf8.getUnicode(Utf8.java:113) il.co.aman.apps.WebParams._getEntity(WebParams.java:71) il.co.aman.apps.WebParams.getEntityParams(WebParams.java:163) il.co.aman.formit.FormMonitor.doGet(FormMonitor.java:65) il.co.aman.formit.FormMonitor.doPost(FormMonitor.java:370) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
注意 Apache Tomcat / 6.0.35日志中提供了根本原因的完整堆栈跟踪。
Apache Tomcat / 6.0.35
用有效"UTF-8"
替换无效"utf-8"
会导致数据按需编码。因此,Web服务现在可以正确解码数据并对其进行处理。
除了在PDF中修复JavaScript之外,您还应该强化您的服务,例如:由
il.co.aman.apps.Utf8.getUnicode
更优雅地失败(在il.co.aman.apps.WebParams.getEntityParams
中捕获了一些标记的异常,并在那里用于将检索到的参数标记为由于编码问题而不完整)和il.co.aman.formit.FormMonitor.doGet
以做出明智的反应。此外,你说
从服务器端日志中我看到请求从未到达服务器。
要么在请求到达服务器之前有一些代理中断,或者Locale中的Adobe Reader确定不同的“最佳主机编码”,这会导致完全不同的故障,或者您的日志记录开始记录太晚。我也建议对此进行调查,并相应地改进您的日志记录架构。