Toshiya-san,
thanks for your patience,
I build freetype 2.4.9 with vc6,I merged your patch and make sure this is a
tricky font.
I can debug into:
tt_check_trickyness( FT_Face face )
{
if ( !face )
return FALSE;
/* For first, check the face name for quick check. */
if ( face->family_name &&
tt_check_trickyness_family( face->family_name ) )
return TRUE;
/* Type42 fonts may lack `name' tables, we thus try to identify */
/* tricky fonts by checking the checksums of Type42-persistent */
/* sfnt tables (`cvt', `fpgm', and `prep'). */
if ( tt_check_trickyness_sfnt_ids( (TT_Face)face ) )
return TRUE;
return FALSE;
}
and tt_check_trickyness_sfnt_ids return TRUE;
but render result still error(I sent in 11/6/2012 ).I don't know what reason is.
please see my test code, you can use the embeded font 1_BKLGIB+FA.ttf i sent
yesterday to test:
extern "C" int g_bRecordBI = 0;
DWORD gid = 2134;
void CTestDlg::OnTestFreetype()
{
UpdateData();
CModuleMgr mm;
CString csFilter(_T("OpenType (*.ttf,*.ttc,*.otf)|*.ttf;*.ttc;*.otf|"
"Type1 (*.pfa,*.pfb)|*.pfa;*.pfb|"
"CFF (*.cff)|*.cff|"
"All files (*.*)|*.*||"));
CFileDialog fd(TRUE, NULL, NULL,
OFN_FILEMUSTEXIST|OFN_LONGNAMES|OFN_PATHMUSTEXIST, csFilter, this);
if (fd.DoModal() == IDOK){
FT_Library library;
FT_Init_FreeType(&library);
CString csFile = fd.GetPathName();
IFileRead *pFileRead = CreateFileRead((LPCTSTR)csFile);
DWORD dwFileSize = (DWORD)pFileRead->GetSize();
BYTE* pBuffer = Alloc(BYTE, dwFileSize);
pFileRead->ReadBlock(pBuffer, 0, dwFileSize);
pFileRead->Release();
FT_Face face;
int error = FT_New_Memory_Face(library, pBuffer, dwFileSize, 0, &face);
ASSERT(error == 0);
error = FT_Set_Pixel_Sizes(face, 0, 64);
ASSERT(error == 0);
FT_Matrix matrix;
matrix.xx = (long)(32.f /64 * 65536);//22215;//32.f /64 * 65536;
matrix.xy = 0;
matrix.yx = 0;
matrix.yy = (long)(32.f /64 * 65536);//23616;//32.f /64 * 65536;
FT_Set_Transform(face, &matrix, NULL);
ASSERT(error == 0);
int load_flags = FT_LOAD_NO_BITMAP ;
DEBUG1("CTestDlg::OnTestFreetype -- Start Load Glyph
----------------------------------");
g_bRecordBI = 1; // Change flag
error = FT_Load_Glyph(face, gid, load_flags);
g_bRecordBI = 0;
DEBUG1("CTestDlg::OnTestFreetype -- End Load Glyph
----------------------------------");
ASSERT(error == 0);
int render_mode = FT_RENDER_MODE_NORMAL;
error = FT_Render_Glyph(face, render_mode);
ASSERT(error == 0);
FT_GlyphSlot slot = face->glyph;
int left = slot->bitmap_left;
int top = slot->bitmap_top;
int pixel_width = slot->bitmap.width;
int pixel_height = slot->bitmap.rows;
int stride = slot->bitmap.pitch;
int type = slot->bitmap.pixel_mode;
BYTE*buffer = slot->bitmap.buffer;
CFX_DIBitmap bitmap;
BOOL ret = bitmap.Create(pixel_width, pixel_height, FXDIB_8bppRgb);
ASSERT(ret);
int row, col;
for (row = 0; row < pixel_height; row ++) {
BYTE* pDestBuf = (BYTE*)bitmap.GetScanline(row);
BYTE* pSrcBuf= buffer+row*stride;
for (col = 0; col < pixel_width; col ++) {
*pDestBuf++ = ~*pSrcBuf++;
}
}
CDC *pDC = GetDC();
CFX_WindowsDevice wd(pDC->GetSafeHdc());
wd.SetDIBits(&bitmap, 0, 0);
ReleaseDC(pDC);
FT_Done_Face(face);
FT_Done_FreeType(library);
if (pBuffer) Free(pBuffer);
}
}
Johnson Y. Yan
发件人: suzuki toshiya
发送时间: 2012-06-12 18:33:24
收件人: Johnson Y. Yan
抄送: freetype-devel
主题: Re: [ft-devel] PDF text rendering error
OK, please let us work with same testing program.
I guess you're working for the proprietary software
and you cannot disclose the source to me (and I think
I don't have appropriate developer environment even
if you can disclose the source).
Thus, I will make a patch generating many trace
messages, and a small CUI program just checking
if the font is found to be tricky. Is it acceptable?
Please check if you can build FT2 library with
debug/trace functions, while I'm writing a patch
for debugging.
Regards,
mpsuzuki
Johnson Y. Yan wrote:
Toshiya-san,
I apply your patch, but still render error, : (.
If the way i call the function is wrong?
FT_Load_Glyph(FtFace, gid, FT_LOAD_NO_BITMAP).
Johnson Y. Yan
发件人: suzuki toshiya
发送时间: 2012-06-11 16:38:11
收件人: Johnson Y. Yan
抄送: freetype-devel
主题: Re: [ft-devel] PDF text rendering error
Attached is my proposal to fix this issue, please try.
In my case (Debian GNU/Linux xpdf-3.02-11), using the
patched freetype library by LD_PRELOAD, xpdf shows
readable result (without patch, the result is unreadable).
Regards,
mpsuzuki
suzuki toshiya wrote:
Johnson Y. Yan wrote (2012/06/11 16:03):
Werner and Toshiya-san,
I put the font as a tricky font to deal with.
static const char trick_names[TRICK_NAMES_COUNT]
[TRICK_NAMES_MAX_CHARACTERS + 1] =
{
"DFKaiSho-SB", /* dfkaisb.ttf */
"DFKaiShu",
"DFKai-SB", /* kaiu.ttf */
"HuaTianKaiTi?", /* htkt2.ttf */
"HuaTianSongTi?", /* htst3.ttf */
"MingLiU", /* mingliu.ttf & mingliu.ttc */
"PMingLiU", /* mingliu.ttc */
"MingLi43", /* mingli.ttf */
"BKLGIB+FA" ---------------------------------------- this is the
embeded font in th document.
};
it still render error. .
Including the randomization prefix to the tricky font name list is bad
idea.
I opened the embeded font use font lab, found the gid = 2134 is like
this, please see the attach bitmap,
some of lines form a 0 area areas, then fill the area(have no area),
Does freetype made special processing?
Johnson Y. Yan
发件人: Werner LEMBERG
发送时间: 2012-06-11 12:55:42
收件人: yinsen_yan
抄送: freetype-devel; mpsuzuki
主题: Re: PDF text rendering error
Do you mean the font must be rendered use
TT_CONFIG_OPTION_BYTECODE_INTERPRETER?
No, the FreeType *library* must be built with it: Edit ftoption.h to
set this flag, then recompile.
Additionally, hinting must be enabled for this font, this is,
FT_LOAD_NO_SCALE doesn't work here.
Normally, those steps are (more or less) handled automatically by
FreeType, since we maintain a list of `tricky' font like the one you
have encountered in the PDF; see file `ttobjs.c'. The subsetted font
in question, however, which identifies itself as
BKLGIB+FA-RoundGothicB
FA 丸ゴシックB and FA-RoundGothicB are trademarks of NEC Office
Systems,Ltd.
isn't in this list; for the NEC FA fonts (and others), a second
mechanism is used which doesn't work with subsetted fonts.
Toshiya-san, any ideas?
Werner
_______________________________________________
Freetype-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/freetype-devel