【问题标题】:How to handle non-ASCII Characters in Java while using PDPageContentStream/PDDocument使用 PDPageContentStream/PDDocument 时如何处理 Java 中的非 ASCII 字符
【发布时间】:2011-05-10 07:53:07
【问题描述】:

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

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

我应该如何处理非 ASCII 字符或至少在将其放入 PDF 之前将其删除。请帮助我提出任何建议或指出任何资源。谢谢!

【问题讨论】:

  • 您是否知道数据在进入 Web 应用程序或进入 PDF 的过程中是否损坏?
  • 您是否尝试为您的 Web 表单和 PDF 生成器设置正确的编码? (此外,您的 PDF 是如何生成的?)
  • 数据没有损坏,但是如果有人从 MSWord 复制内容并尝试将其粘贴到文本区域,它可能不喜欢它。
  • @Riduidel 我没有尝试为网络表单设置任何编码,你能建议我怎么做吗?谢谢
  • 你需要更清楚的问题。数据是否在之前之后转换为PDF?只需在转换为 PDF 之前将提交的数据打印到 stdout/log/console。

标签: java pdf jsf unicode character-encoding


【解决方案1】:

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

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

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

    这会将响应编码设置为 UTF-8 并且将 HTTP 响应内容类型标头的字符集设置为 UTF-8。最后一个将指示客户端(网络浏览器)使用 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。

这应该可以解决 JSF 端的 Unicode 问题。我从未使用过 PDFBox,但由于它使用 iText 的封面,而 iText 反过来应该已经支持 Unicode/UTF-8,我认为这部分很好。进行上述修复后,如果它仍然没有,请告诉我。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2018-11-03
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多