如何在使用PDPageContentStream / PDDocument时处理Java中的非ASCII字符

时间:2010-11-15 16:01:16

标签: java pdf jsf unicode character-encoding

我正在使用PDFBox从我的网络应用程序创建PDF。 Web应用程序使用Java构建并使用JSF。它从基于Web的表单中获取内容,并将内容放入PDF文档中。

示例:用户在表单中填写inputTextArea(JSF标记)并将其转换为PDF。我无法处理非ASCII字符。

我应该如何处理非ASCII字符,或者在将它们放到PDF上之前至少删除它们。请帮助我任何建议或指出任何资源。谢谢!

1 个答案:

答案 0 :(得分:2)

由于您在JSP上使用JSF而不是Facelets(隐式已经使用UTF-8),请执行以下步骤以避免使用平台默认字符集(通常是ISO-8859-1,这是处理大多数“非ASCII”字符的错误选择:

  1. 将以下行添加到所有JSP的顶部:

    <%@ page pageEncoding="UTF-8" %>
    

    这将响应编码设置为UTF-8 将HTTP响应内容类型标头的字符集设置为UTF-8。最后一个将指示客户端(webbrowser)使用UTF-8显示和提交带有表单的页面。

  2. 创建Filter,在doFilter()方法中执行以下操作:

    request.setCharacterEncoding("UTF-8");
    

    将此映射到FacesServlet上,如下所示:

    <filter-mapping>
        <filter-name>nameOfYourCharacterEncodingFilter</filter-name>
        <servlet-name>nameOfYourFacesServlet</servlet-name>
    </filter-mapping>
    

    这会将所有JSF POST请求的请求编码设置为UTF-8。

  3. 这应解决JSF方面的Unicode问题。我从来没有使用过PDFBox,但是由于它使用iText而已经支持Unicode / UTF-8,我觉得这部分很好。在完成上述修复后,请告诉我它是否仍然没有。

    另见: