2016-09-12 16 views
0

私はJavaプロジェクトでJDK 1.6.0_35を使用しています。プロパティファイル(ISO8859-1でコード化されています)を回復するときにjava.util.ResourceBundleに問題があります。ジャスパー生成レポートがJavaでキリル文字(ブルガリア語)を表示しないのはなぜですか?

英国のラベルが付いた請求書を表示するよう依頼されましたが、唯一の請求書はブルガリア語で書かれています。問題は、ブルガリア語で書かれていないテキストのみを回復して表示することです。

私は2つの方法でテキストを挿入しようとしました:

\u0424\u0430\u043A\u0442\u0443\u0440\u0430\r\n\u041E\u0440\u0438\u0433\u0438\u043D\u0430\u043B 

"Фактура\r\nОригинал" 

は、それらのどちらも働きました。私はグーグルであり、最初の方法ではうまくいくはずだが(不快ではあるが、うまくいくはずだが)、このように書かれたテキストは自分のPDFに表示されない(私はJasperreportsを使用している)。

JasperFillManager.fillReport() my params変数には「INVOICE = INVOICE /XXXФактураXXX」が含まれていますが、PDFを開くときは「INVOICE/XXX」と表示されます。

Javaコードは:

Cyrillic comes correctly into Java

fontsfamily1365159936026.xml

ここ
Object obj = JRLoader.loadObject(new InputStream(someSource)); 
JasperReport reportMaster = (JasperReport) obj; 
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(data); 
JasperPrint jasperPrint = JasperFillManager.fillReport(reportMaster, params, ds); 
String pathArialFont = ""; 
String pathArialBFont = ""; 
String pathArialIFont = ""; 
String pathArialBIFont = ""; 
try { 
    pathArialFont = Thread.currentThread().getContextClassLoader().getResource("arial.ttf").toURI() 
     .toString(); 


    pathArialBFont = Thread.currentThread().getContextClassLoader().getResource("arialbd.ttf").toURI() 
     .toString(); 


    pathArialIFont = Thread.currentThread().getContextClassLoader().getResource("ariali.ttf").toURI() 
     .toString(); 


    pathArialBIFont = Thread.currentThread().getContextClassLoader().getResource("arialbi.ttf").toURI() 
     .toString(); 
    LOGGER.debug("pathArialBIFont:".concat(pathArialBIFont)); 

} catch (final URISyntaxException e) { 
    LOGGER.error("", e); 
} 

String arial = "Arial"; 
HashMap<FontKey, PdfFont> fontMap = new HashMap<FontKey, PdfFont>(); 
FontKey key1 = new FontKey(arial, false, false); 
PdfFont font1 = new PdfFont(pathArialFont, BaseFont.CP1252, true); 

FontKey key2 = new FontKey(arial, true, false); 
PdfFont font2 = new PdfFont(pathArialBFont, BaseFont.CP1252, true); 

FontKey key3 = new FontKey(arial, false, true); 
PdfFont font3 = new PdfFont(pathArialIFont, BaseFont.CP1252, true); 
FontKey key4 = new FontKey(arial, true, true); 
PdfFont font4 = new PdfFont(pathArialBIFont, BaseFont.CP1252, true); 

fontMap.put(key1, font1); 
fontMap.put(key2, font2); 
fontMap.put(key3, font3); 
fontMap.put(key4, font4); 

JRPdfExporter exporter = new JRPdfExporter(); 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, informe); 
exporter.setParameter(JRExporterParameter.FONT_MAP, fontMap); 

reportMaster.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true"); 

exporter.exportReport(); 

あなたは文字列がキリル文字でのJavaコードに到着したというのが私のdebuggingsのいずれかで見ることができます:

<?xml version="1.0" encoding="UTF-8"?> 
<fontFamilies> 
    <fontFamily name="Arial"> 
     <normal><![CDATA[fonts/arial.ttf]]></normal> 
     <bold><![CDATA[fonts/arialbd.ttf]]></bold> 
     <italic><![CDATA[fonts/ariali.ttf]]></italic> 
     <boldItalic><![CDATA[fonts/arialbi.ttf]]></boldItalic> 
     <pdfEncoding><![CDATA[Cp1252]]></pdfEncoding> 
     <pdfEmbedded><![CDATA[false]]></pdfEmbedded> 
    </fontFamily> 
</fontFamilies> 

jasperreports_extension.properties

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory 
net.sf.jasperreports.extension.simple.font.families.ireportfamily1365159936026=fontsfamily1365159936026.xml 

任意の手掛かり?

+0

文字エンコードUTF-8を試してください –

+3

[font-extensions](http://stackoverflow.com/documentation/jasper-reports/5773/font-extensions)?がありません。このhttp:// stackoverflowも参照してください。 com/questions/34041619/jasper-reports-pdf-doesnt-export-cyrillic-values –

+0

これは現在見ています – madtyn

答えて

0

私はついにこれを達成しました。私はxmlでこれら2つの行を変更する必要がありました:

<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding> 
<pdfEmbedded><![CDATA[true]]></pdfEmbedded> 

私はJavaコードBaseFont定数BaseFontを変更しました。これらの行で CP1252

new PdfFont(pathArialFont, BaseFont.IDENTITY_H, true); 

と私のISO8859-1プロパティ内のテキストを入力するには、このようなファイル:

label=\u0424\u0430\u043A\u0442\u0443\u0440\u0430\r\n\u041E\u0440\u0438\u0433\u0438\u043D\u0430\u043B 

、デザイナーモードでは、私は「ArialのUnicodeのMSをフォントにフィールドを編集しましたPdf Encoding "Identity-H"で "Pdf embedded"をチェックしました。

関連する問題