ラベル xpdf の投稿を表示しています。 すべての投稿を表示
ラベル xpdf の投稿を表示しています。 すべての投稿を表示

2008年2月17日日曜日

xpdfの高画質化 part2

FreeType2のドキュメントを読んだりしたりして xpdf を解析しようとしていたけど, 根負けして諦めた. またそのうち暇があったら触ってみようかと思う. とりあえず, いじったところをアップしてみる.

ポイントは, 一つ目の size を 8倍にしているところ. (8倍じゃなくても, 適当に大きくしてあればいいらしい) これだけで見た目はグッと変わった. あと, 標準ではヒンティングがオフになっているが, それをオンにした. これは好みの問題.

このパッチは FreeType2 用なので T1lib はオフにしないと効果がないかもしれない. ~/.xpdfrc に
enableT1lib no
enableFreeType yes

を足せばOK.

なお, PDFファイルによっては xpdf が落ちることもあったので要注意!

--- a/splash/SplashFTFont.cc Sun Feb 17 12:40:58 2008 +0900
+++ b/splash/SplashFTFont.cc Sun Feb 17 22:27:23 2008 +0900
@@ -50,7 +50,7 @@ SplashFTFont::SplashFTFont(SplashFTFontF
return;
}
face->size = sizeObj;
- size = splashSqrt(mat[2]*mat[2] + mat[3]*mat[3]);
+ size = 8 * splashSqrt(mat[2]*mat[2] + mat[3]*mat[3]);
if (FT_Set_Pixel_Sizes(face, 0, (int)size)) {
return;
}
@@ -180,9 +180,9 @@ GBool SplashFTFont::makeGlyph(int c, int
}

// if we have the FT2 bytecode interpreter, autohinting won't be used
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
- if (FT_Load_Glyph(ff->face, gid,
- aa ? FT_LOAD_NO_BITMAP : FT_LOAD_DEFAULT)) {
+//#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+#if 1
+ if (FT_Load_Glyph(ff->face, gid, FT_LOAD_DEFAULT | FT_LOAD_TARGET_LIGHT)) {
return gFalse;
}
#else
@@ -196,7 +196,7 @@ GBool SplashFTFont::makeGlyph(int c, int
return gFalse;
}
#endif
- if (FT_Render_Glyph(slot, aa ? ft_render_mode_normal
+ if (FT_Render_Glyph(slot, aa ? FT_RENDER_MODE_LIGHT
: ft_render_mode_mono)) {
return gFalse;
}

2008年2月14日木曜日

xpdfの高画質化 part1

今まで PDF を読む際には, acroread と xpdf を場合に応じて使い分けていた. サクサク読みたいときは軽い xpdf を, じっくり読む場合は綺麗に表示する acroread という感じ. しかし, xpdf は freetype2 を使っているのだから, もっと綺麗に表示できるはずだろうと思って, いろいろ調べてみた.

もう眠くなったので結果だけ書くと, ちょっとソースをいじるだけで xpdf もかなり綺麗になることが分かった. でも, 一部の PDF を入れると落ちることもあるので要調査.