0

この例を使用して、java swing JFrame を pdf に変換しています: jcomponent を itext で pdf にエクスポートします。問題は、フレームに čěř... のような UTF-8 文字が含まれている場合です。この文字は、エクスポートされたドキュメントにありません。PDF でこの文字をオンにするにはどうすればよいですか?

アップデート:

あなたの例を試してみましたが、例外がありました:

ExceptionConverter: com.itextpdf.text.DocumentException: Font 'fonts/verdana.ttf,1' with 'Identity-H' is not recognized.
 at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:699)
 at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:606)
 at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:549)
 at com.itextpdf.text.pdf.DefaultFontMapper.awtToPdf(DefaultFontMapper.java:107)
 at com.itextpdf.text.pdf.PdfGraphics2D.getCachedBaseFont(PdfGraphics2D.java:1082)
 at com.itextpdf.text.pdf.PdfGraphics2D.setFont(PdfGraphics2D.java:1075)
 at javax.swing.JComponent.paintChildren(JComponent.java:855)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at javax.swing.JComponent.paintChildren(JComponent.java:874)
 at javax.swing.JComponent.printChildren(JComponent.java:1214)
 at javax.swing.JComponent.paint(JComponent.java:1049)
 at javax.swing.JComponent.print(JComponent.java:1183)
 at GUI.PlayOffPanel.export(PlayOffPanel.java:322)

verdana や times などの .ttf フォントのインポートに問題があるように見えますが、追加したものは機能します。しかし、私は本当にVerdanaフォントを使いたいので、まだ答えを探しています

4

1 に答える 1

3

独自のコードを表示していないので、export jcomponent to PDF with itext (あなたが言及した質問) のコードをそのまま使用したと思います。Graphics2Dしたがって、インスタンスを取得するコードは次のとおりです。

Graphics2D g2d = tp.createGraphics(bill.getWidth(), bill.getHeight(), new DefaultFontMapper());

iText in Action — 2nd Editionのセクション 14.5.2 Drawing text to PdfGraphics2D に記載されているように、使用する各フォントがエンコーディング Cp1252 (WinAnsi) をDefaultFontMapper使用することを前提としています。(残念ながら、これはメソッドの JavaDoc のJavaDoc ヘッダーに記載されていません。) これは、欠落している文字を説明します。DefaultFontMapper,insertDirectory

BaseFontParametersサンプルのText1ToPdf2.javaで行ったように、マッパーにカスタムオブジェクトを追加することで、これを修正できます。c:/windows/fonts/msgothic.ttc:

// create a font mapper
DefaultFontMapper mapper = new DefaultFontMapper();
// map MS Gothic to the corresponding font program
BaseFontParameters parameters = new BaseFontParameters("c:/windows/fonts/msgothic.ttc,1");
parameters.encoding = BaseFont.IDENTITY_H;
mapper.putName("MS PGothic", parameters );
// Create a Graphics2D object
Graphics2D g2 = new PdfGraphics2D(canvas, 600, 60, mapper);

ユースケースによっては、(おそらく) 使用されているすべてのフォントに対してそれを行うのは面倒かもしれませんが、本の同じセクションで説明されている代替手段があります:

  • 独自の実装を作成するFontMapper(たとえば、 をサブクラス化することによりDefaultFontMapper)、
  • を使用するAsianFontMapper(特定のアジア文字セットが見つからない場合)、または
  • フォントに格納されている文字ではなく、図形としてグリフを追加します。

これらのオプションは、本の複数のページをカバーしているため、ここで 1 つの回答にするには多すぎます。Text2ToPdf1.javaText2ToPdf2.java、およびText2ToPdf3.javaのサンプルを見ると、第一印象を得ることができます。

于 2013-02-12T10:44:40.687 に答える