PDF显示特殊的西班牙宪章为“?”

时间:2014-01-10 17:03:59

标签: java xml adobe

adobe将特殊的西班牙语字符显示为“?”。我是否需要从adobe生命周期或Java端解决问题?我使用UTF-8将XML转发到adobe生命周期。我是否需要将其编码为ISO-8859-1之类的其他内容?这可能是什么问题?
例如,单词Certificación在PDF中显示为Certificaci?n。 在控制台中我看到单词看起来很好但是一旦我调用adobe获取PDF,我就会得到带有Certificaci等字样的PDF。

我使用

转换对象
public static String obj2Xml(Class<?> className, Object obj)
        throws ServiceException {
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(className);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        StringWriter writer = new StringWriter();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                Boolean.TRUE);
        jaxbMarshaller.marshal(obj, writer);
        return writer.getBuffer().toString();
    } catch (JAXBException jaxbException) {
        throw new ServiceException(jaxbException);
    }
}

我已经使用过ISO-8859-1但我在HTML中测试过并且很好。我的问题如何将XML从UTF-8编码为ISO-8859-1以及adobe生命周期。正如我所提到的,我将XML传递给adobe,我们使用XSD,其中我改变如下          

但仍然是控制台显示带有UTF-8的XML

1 个答案:

答案 0 :(得分:0)

通过将编码更改为ISO-8859-1,可能确实可以修复这些特殊字符的问题。 (正如你在问题中已经提到的那样。) 见帖子https://stackoverflow.com/a/3688273/3178834

jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);之后
你必须添加:
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
启用正确的编码。
另外,你必须将你的作家设置为相同的编码 OutputStreamWriter writer = new OutputStreamWriter(System.out, "ISO-8859-1");

像这样...... 最后,这应该将您的XML编码为适当的ISO-8859-1,而不是UTF-8。