2016-08-16 8 views
0

Hiyas인코딩()

나는이 문자열을 표시하기 위해 노력하고있어 :하는 RTF 파일에서 읽어 분석하고이 변수에 넣고

λλλλλλλλλλλλλλλλλλλλλλλλ

. 코드에서 상수로 사용되지 않습니다.

Font pdfFont = FontFactory.getFont(font.getFont().getName(), BaseFont.IDENTITY_H, embed, font.getFont().getSize2D(), style);  
Phrase phrase = new Phrase("λλλλλλλλλλλλλλλλλλλλλλλλ", pdfFont); 
     ColumnText.showTextAligned(content[i], alignment, phrase, x, y, rotation); 

는 또한 간단한 ArialMT.ttf 글꼴과 함께 CP1252 (그리고 내가 찾은 기본적으로 다른 모든 인코딩을)했는데, 그 빌어 먹을 문자열이 표시되지 않습니다. iText 내부의 바이트 배열로의 변환 (5.5.0 사용)은 항상 텍스트가 사용되지 않는 이유를 설명하는 null 길이의 바이트 배열을 반환하지만 왜 그 이유는 모르겠다는 것을 알 수 있습니다. 이 인코딩을 PDF로 표시하려면 어떤 인코딩을 사용해야합니까?

덕분에 나는이처럼 보이는 결과를 얻을한다고 가정 많은

+0

ArialUni를 사용해 보셨나요? 그 폰트에는 더 많은 글리프 (glyph)가 포함되어 있습니다. – mkl

+0

@mkl 방금 테스트했는데 람다 역시 arial.ttf로 알려져 있습니다. 어쩌면 문제의 원인은 잘못된 코딩 위생입니다. 소스 코드에 특수 문자를 넣지 마십시오. 대신 유니 코드 표기법을 사용합니다. –

답변

2

: 쉽게

enter image description here

. 먼저 공식 문서에서 SunCharacter 예제를 시도했습니다. 그 예는 질문에 답변을 작성되었습니다 : 당신이, 내가 (그 나쁜 습관이다) 내 소스 코드에서 λ를 사용하지 않는 볼 수 있듯이

public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb"; 

: iText : Unable to print mathematical characters like ∈, ∩, ∑, ∫, ∆ √, ∠

내가 다음에 TEXT을 변경했습니다. 대신 λ의 유니 코드 표기법 인 \u03bb을 사용합니다.

결과는 다음처럼 보였다 : 당신이 원하는 게 아니에요

enter image description here

; 당신은 ArialMT를 원합니다. 그래서 FONT을 다음으로 변경했습니다.

public static final String FONT = "c:/windows/fonts/arial.ttf"; 

이렇게하면 원하는 PDF가 나타납니다.

public class LambdaCharacter { 
    public static final String DEST = "results/fonts/lambda_character.pdf"; 
    public static final String FONT = "c:/windows/fonts/arial.ttf"; 
    public static final String TEXT = "Always use the Unicode notation for special characters: \u03bb"; 

    public static void main(String[] args) throws IOException, DocumentException { 
     File file = new File(DEST); 
     file.getParentFile().mkdirs(); 
     new LambdaCharacter().createPdf(DEST); 
    } 

    public void createPdf(String dest) throws IOException, DocumentException { 
     Document document = new Document(); 
     PdfWriter.getInstance(document, new FileOutputStream(dest)); 
     document.open(); 
     BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
     Font f = new Font(bf, 12); 
     Paragraph p = new Paragraph(TEXT, f); 
     document.add(p); 
     document.close(); 
    } 
} 

내가 잘 작동 :

이 전체 코드의 샘플입니다.

아마 당신은 Arial을 사용하지 않았을 것입니다. 어쩌면 font.getFont().getName()이 올바른 글꼴 이름을 제공하지 않습니다. 또는 어쩌면 그것은 당신에게 글꼴의 정확한 이름을 제공하지만, 글꼴을 잊어 버렸습니다. 이 경우 Helvetica가 사용 된 것을 볼 수 있습니다. Helvetica는 람다를 렌더링 할 수 없습니다. Arial 또는 Cardo-Regular 또는 Arial Unicode 또는 다른 폰트가 필요합니다. 폰트가 람다를 렌더링하는 방법을 알고있는 한.(

+0

진짜 문제는 여기서 우리가 파싱 한 RTF 텍스트를 얻은 다음 iText에서 직접 RTF 문자열을 사용한다는 것입니다. 내가 먼저 어떻게 든 그들을 변환해야 할 것 같아요,하지만이 날 포인터를 준 ... 감사합니다! – Fuggly

+0

신경 쓰지 마라. 내가 글꼴을 삽입 할 때 작동한다. – Fuggly