2012-02-09 2 views
1

자바 스윙 응용 프로그램의 PDFGenerator로 iText를 평가 중입니다. 결과물은 "Marathi"에 있어야하는데, 이는 힌디어와 비슷하지만 동일하지 않은 현지 인도어입니다. 이 평가의 목적itext Marathi (indian) 언어 표시 문제

내가 인쇄에 노력하고 텍스트입니다 :

मराठी ग्रीटींग्स, मराठी शुभेच्छापत्रे 여기

는 소스 코드 :

package pdftest; 

import java.io.FileOutputStream; 

import com.itextpdf.text.Document; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.Font; 
import com.itextpdf.text.FontFactory; 
import com.itextpdf.text.Paragraph; 
import com.itextpdf.text.pdf.BaseFont; 
import com.itextpdf.text.pdf.PdfWriter; 


public class CPDFTest 
{ 
    private static String FILE = "c:/will/FirstPdf.pdf"; 

    public static void main(String[] args) 
     { 
     try 
       { 
      Document document = new Document(); 
      PdfWriter.getInstance(document, new FileOutputStream(FILE)); 
      document.open(); 
      addMetaData(document); 
      addTitlePage(document); 
      document.close(); 
     } 
       catch (Exception e) 
       { 
     } 
    } 

    private static void addMetaData(Document document) 
     { 
     document.addTitle("My first PDF"); 
    } 

    private static void addTitlePage(Document document) 
      throws DocumentException 
     { 

      Paragraph preface = new Paragraph(); 

      FontFactory.registerDirectory("C:\\WINDOWS\\Fonts"); 

      Font marFont = FontFactory.getFont("arial unicode ms",BaseFont.IDENTITY_H,true); 

      // Lets write a big header 
      preface.add(new Paragraph("मराठी ग्रीटींग्स, मराठी शुभेच्छापत्रे", marFont)); 

      document.add(preface); 
    } 
} 

다음 이미지를 확인하시기 바랍니다 오류 세부 정보 :

enter image description here

나는이 문제가 아마도 인코딩이나 뭐라고 생각하지만 지금은 알아낼 수 없다고 생각합니다. 어떤 도움을 주시면 감사하겠습니다.

+0

각 Marathi 문자를 주어진 [예제] (http : //itextpdf.c)와 같은 유니 코드 코드 포인트로 변환하는 방법은 어떻습니까? om/examples/iia.php? id = 201)? – ecle

답변

2

iText는 최신 버전 중 하나에 포함되어 있지 않으면 Devanāgarī 서체 시스템을 지원하지 않습니다.

일부 서체 시스템에서는 실제 문자와 올바른 글리프간에 일대일 관계가 없지만 예를 들어 글리프 모양은 다릅니다. 주위의 글립이나 단어 내의 위치. 텍스트를 정확하게 표현하기 위해서, 타입 설정 소프트웨어는 AFAIK와 AFAIK를 구현할 필요가 있습니다. iText는 아랍어에 대해서만 그런 규칙을 구현합니다.

+0

응답 jarnbjo 주셔서 감사합니다. Devanāgarī 스크립트를 지원하는 PDF 작성자에 대해 알고 있습니까? – Will

0

다음은 저에게 효과적입니다. 이 iText가 모국어 지원되지 않기 때문에

import java.awt.Graphics2D; 
import java.io.*; 
import com.lowagie.text.*; 

public class Test { 
    /** Path to the resulting PDF file. */ 
    public static final String RESULT 
    = "/home/test.pdf"; 
    /** 
    * Creates a PDF file: test.pdf 
    * @param args no arguments needed 
    */ 
    public static void main(String[] args) 
     throws DocumentException, IOException { 
     Document document = new Document();  
    PdfWriter writer =  
        PdfWriter.getInstance(document, new FileOutputStream(RESULT));  
    document.open();  
    int w = 400; 
    int h = 150; 

    PdfContentByte cb = writer.getDirectContent(); 
    PdfTemplate tp = cb.createTemplate(w, h); 
    Graphics2D g2 = tp.createGraphicsShapes(w, h);   
    g2.drawString("मराठी ग्रीटींग्स, मराठी शुभेच्छापत्रे", 20, 100);     
    g2.dispose(); 
    cb.addTemplate(tp, 50, 400); 
    document.close();   

    } 
} 
0

비트 맵을 텍스트로 변환하고 변환 방법 아래 image.Use으로 설정 :

단계 1 :

public Bitmap textAsBitmap(String text, float textSize, float stroke, int color) { 

    TextPaint paint = new TextPaint(); 
    paint.setTextSize(textSize); 
    paint.setAntiAlias(true); 
    // paint.setTextAlign(Paint.Align.LEFT); 

    paint.setColor(Color.BLACK); 
    // paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND); 
    paint.setStrokeWidth(20f); 
    paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL)); 
    float baseline = (int) (-paint.ascent() + 3f); // ascent() is negative 

    StaticLayout staticLayout = new StaticLayout(text, 0, text.length(), 
      paint, 435, android.text.Layout.Alignment.ALIGN_NORMAL, 1.0f, 
      1.0f, false); 


    Bitmap image = Bitmap.createBitmap(staticLayout.getWidth(), 
      staticLayout.getHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(image); 
    canvas.drawColor(Color.WHITE); 
    canvas.drawBitmap(image, 5, 5, null); 

    staticLayout.draw(canvas); 

    return image; 
} 

단계 2 :

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
Bitmap bitmap = Bitmap.createBitmap(Utils.textAsBitmap(""+yourString,14,2,200)); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , stream); 
Image myImg = Image.getInstance(stream.toByteArray()); 
document.add(myImg);