阿拉伯语文本显示来自itext的PDF格式的بنايةآ。

时间:2017-09-28 11:34:15

标签: java rest pdf itext restful-architecture

我在java中使用itext创建PDF。我有阿拉伯语文本的问题。 阿拉伯语文本'بنايةالمهىطالارضي-الفنار  '它显示了ب†Ø§ÙŠØ©Ø§Ù“Ù。 我有一个休息的网络服务,正在为上述阿拉伯数据返回'ب†Ø§ÙŠØ©Ø§Ù“Ù'。 这是 RestService 的代码。

@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")
public Response getdata(DataRequest request) throws Exception {
    DataResponse output = facade.getSummary(request);
    return Response.ok(output).build();

}

下面是访问服务代码以获取数据的 Restclient 代码

ClientResponse clientResponse = webResource.type(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8").post(ClientResponse.class,
            request);

    if (clientResponse.getStatus() == UIConstants.RESPONSE_SUCCESS) {
        response = (PolicySummaryResponse) RestClient.unMarshalJson(
                PolicySummaryResponse.class,
                clientResponse.getEntityInputStream());}

当我在JSP中显示此响应时,它显示阿拉伯数据。 但是当我创建pdf时,它显示的是'ب†Ø§ÙŠØ©Ø§Ù“Ù' 这是pdf的代码

PdfPTable ownerTable = new PdfPTable(4);ownerTable.addCell(owneraddress);

我也尝试过但没有运气

Font arabicfont = FontFactory.getFont("/com/ARIALN.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        PdfPCell addrCell = new PdfPCell(new Paragraph(policy.getPayor().getAddress1().trim(), arabicfont));
        addrCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
        ownerTable.addCell(addrCell);

这显示所有空白只有 - 。 请帮忙

1 个答案:

答案 0 :(得分:2)

您遇到编码问题,因为您的输出看起来与您的输入不同。我将向您展示如何使用https://r12a.github.io/apps/conversion/对前两个字符诊断此问题。您的前两个字符بن以标准Java编码表示法编码,如下所示:

\u0628 \u0646

这是UTF-16,有点人性化。但是,如果以UTF-8编码,则会得到完全不同的字节数组:

D8 A8 D9 86

有趣的部分是当我们开始混合编码时,例如使用UTF-8作为UTF-16字符串的输入:

\u00D8 \u00A8 \u00D9 \u0086

这会在上述网站中输出以下三个可见字符 - 与您报告的字符串的开头相同,也是一个不可见字符(Unicode中位置0x86上的控制字符SSA):

Ø ¨ Ù 

我假设您无法更改初始String的创建方式,因此我们必须通过在复制构造函数中使用其文本来强制执行编码。我知道用Java解决这个问题的最简单方法如下:

String line = // your input
line = new String(line.getBytes(), Charset.forName("UTF-8"));