0

以下は、 Javaを使用してPDFを書き込むコードです。

コード

public class PDFTest {    

    public static void main(String args[]) {
        Document document = new Document(PageSize.A4, 50, 50, 50, 50);       

        try {
            File file = new File("C://test//itext-test.pdf");
            FileOutputStream fileout = new FileOutputStream(file);            
            PdfWriter.getInstance(document, fileout);
            document.addAuthor("Me");
            document.addTitle("My iText Test");
            document.open();
            Chunk chunk = new Chunk("iText Test");
            Paragraph paragraph = new Paragraph();
            String test = "și";
            String test1 = "şi";
            if (test.equalsIgnoreCase(test1)) {
               // System.out.println("equal ignore case true");
                paragraph.add(test + " New Font equal with Old Font");
            } else {
              //  System.out.println("equal ignore case X true");
                paragraph.add(test1 + " New Font Not equal with Old Font");
            }
            paragraph.setAlignment(Element.ALIGN_CENTER);
            document.add(paragraph);          
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
}

"ș"ルーマニア語でテストしたところ、作成した PDF に が欠けていることがわかりました。ドキュメントは次のように表示されます。 エラー

この問題に関するアドバイスや参照リンクは大歓迎です。

**EDITED**
以下のようなユニコードの例を使用しましたが、出力は同じです。"ș" まだ行方不明です。

Code

static String RESULT = "C://test/itext-unicode4.pdf";
    static String FONT = "C://Users//PenangIT//Desktop//Arial Unicode.ttf";
    public static void main(String args[])
    {
        try
        {
            Document doc = new Document();
            PdfWriter.getInstance(doc, new FileOutputStream(RESULT));
            doc.open();
            BaseFont bf;
            bf = BaseFont.createFont(FONT,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
            doc.add(new Paragraph("Font : "+bf.getPostscriptFontName()+" with encoding: "+bf.getEncoding()));
            doc.add(new Paragraph(" TESTING "));
            doc.add(new Paragraph(" TESTING 1 și "));
            doc.add(new Paragraph(" TESTING 2 şi "));
            doc.add(Chunk.NEWLINE);
            doc.close();

        }
        catch(Exception ex)
        {            
        }

出力は次のよう
ここに画像の説明を入力
になります。エンコードも同様です。は"ș" まだ行方不明です。

4

1 に答える 1

1

こちらの PDF をご覧ください: encoding_example.pdf (*)

これには、デフォルトのフォント Helvetica (他のフォントを定義していないため、使用しているデフォルトのフォント) には存在しないすべての種類の文字が含まれています。

EncodingExampleソースでは、特定のエンコーディングで arialbd.ttf を使用しているため、PDF で単純なフォントが使用されています。UnicodeExampleソースでは、エンコードとして IDENTITY_H を使用しているため、PDF で複合フォントが使用されています。

あなたが私の答えを理解していないことがわかったので、私はあなたのコードを修正しました:

BaseFont bf = BaseFont.createFont(FONT,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
doc.add(new Paragraph(" TESTING 1 și ", new Font(bf, 12)));
doc.add(new Paragraph(" TESTING 2 \u015Fi ", new Font(bf, 12)));

違いがわかりますか?コードで を作成しbfますが、そのオブジェクトをどこにも使用していません。

(* )注: pdf.js は特殊なエンコーディングを使用した単純なフォントをサポートしていないため、pdf.js は一部のグリフを解釈できません。これらのグリフは、Adobe Reader および Chrome PDF ビューアーで正しく表示されます。安全を確保したい場合は、複合フォントを使用してください。pdf.js はこれらのグリフを正しくレンダリングできるためです

于 2013-09-05T08:14:32.337 に答える