1

フランス語のアクセントが付いたシンプルな文字列があります。ITextRenderer を使用して PDF に保存しようとしています。問題は、結果のpdfからすべてのアクセントが削除されることです。

保存する入力文字列は、速度テンプレートからのものです。そこで、私は doinf StringEscapeUtils.escape(StringEscapeUtils.unescape(stringWithAccents)) を実行しています。このプロセスは、Supplement : Visa&Pourboires のような入力文字列を提供しています。

私のコード:

         String documentHtml = "Supplément : à&egrave"
         DocumentBuilder builder;
        try {
            DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
            fac.setFeature("http://xml.org/sax/features/namespaces", false);
            fac.setFeature("http://xml.org/sax/features/validation", false);
            fac.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
            fac.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            builder = fac.newDocumentBuilder();
            byte[] docByte = documentHtml.getBytes("UTF-8");
            ByteArrayInputStream is = new ByteArrayInputStream(docByte);
            Document doc = builder.parse(is);
            is.close();
            File file = new File(this.getFolder(), this.getFileName());
            if (file.exists()) {
                file.delete();
            }

            // save pdf
            OutputStream os = new FileOutputStream(file);
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(doc, file.getParentFile().getAbsolutePath());
            renderer.layout();
            renderer.createPDF(os, true);
            os.close();


            return this.getFolder().getAbsolutePath() + "/" + this.getFileName();
        } catch (ParserConfigurationException e) {
            LOGGER.error("Error while parsing the configuration " + e.getMessage(), e);
            throw new BOServiceException("Error while parsing the configuration : " + e.getMessage(), e);
        } catch (UnsupportedEncodingException e) {
            LOGGER.error("Encoding error :  " + e.getMessage(), e);
            throw new BOServiceException("Encoding error : " + e.getMessage(), e);
        } catch (SAXException e) {
            LOGGER.error("Error in the document because of SAX :  " + e.getMessage(), e);
            throw new BOServiceException("Error in the document because of SAX :  " + e.getMessage(), e);
        } catch (IOException e) {
            LOGGER.error("Error due to io problem : " + e.getMessage(), e);
            throw new BOServiceException("Error due to io problem :" + e.getMessage(), e);
        }

エンコーディングが機能しない理由がわかりますか? 結果の pdf に àè などの文字が表示されないのはなぜですか?

4

1 に答える 1

1

エンコーディングを UTF-8 から ISO-8859-1 に変更してみてください。

于 2012-10-18T09:06:45.457 に答える