2011/07/24

iText の iTextAsian.jar にフォントを追加するためのメモ

これは完全に不完全なメモです。 iText の iTextAsian.jar にフォントを追加する を参照してください。

[ヅラド] iText にて iTextAsianCmaps.jar と iTextAsian.jar を使った日本語フォント描画 を参考にさせていただきました。ありがとうございます。

package com.lowagie.text.pdf;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;

public class Que {

public static void main(String[] args) throws Exception {
a7();
tt();
}

private static void tt() throws DocumentException, IOException {
CJKFont j = new CJKFont("HeiseiKakuGo-W5", "UniJIS-UCS2-HW-H", false);
System.out.println("" + j.getCidCode('M') + " " + j.getWidth('M'));
TrueTypeFontUnicode f = new TrueTypeFontUnicode(
"/usr/share/fonts/truetype/ttf-japanese-gothic.ttf",
"Identity-H", true, null, true);
for (int i = 0; i < 0xffff; ++i) {
int width = f.getWidth(i);
int cid = j.getCidCode(i);
if (width != 0 && width != 1000) {
// System.out.println(" " + i + " " + cid + " " + width);
// W=
System.out.print(" " + cid + " " + width);
}
}
// System.out.println(f);
}

public static void a7() throws Exception {
byte[] a7 = createA7();

out(a7, "/tmp/20070802_a7.pdf");
}

private static byte[] createA7() throws Exception {

// ゴシック体 HeiseiKakuGo-W5
Font font3 = new Font(BaseFont.createFont("TakaoPGothic",
"UniJIS-UCS2-HW-H",
// "Identity-H",
BaseFont.NOT_EMBEDDED), 9, Font.NORMAL);

// DPI
float dpi = 72.0f;

// A7作成
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
Rectangle pagesize2 = PageSize.A7;
// 左端のマージン: 5ミリメートル
// 右端のマージン: 10ミリメートル
// 上端のマージン: 5ミリメートル
// 下端のマージン: 10ミリメートル
float left = mm2pixel(1f, dpi);
float right = mm2pixel(5f, dpi);
float top = mm2pixel(5f, dpi);
float bottom = mm2pixel(10f, dpi);
Document document2 = new Document(pagesize2, left, right, top, bottom);
PdfWriter writer2 = PdfWriter.getInstance(document2, baos2);
document2.open();

String text3 = "あい う え おアイウエオABCABC MIXlix";
Paragraph p3 = new Paragraph(text3, font3);
document2.add(p3);

document2.close(); // close を忘れないで
return baos2.toByteArray();
}

private static float mm2pixel(float mm, float dpi) {
// Ref. http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%81
// 国際インチ(international inch): 1 インチ = 25.4 ミリメートル
return mm * dpi / 25.4f;
}

private static void out(byte[] pdfdata, String file) throws Exception {
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
os.write(pdfdata);
os.flush();
}
}

0 件のコメント: