|
From: | Johnson Y. Yan |
Subject: | Re: [ft-devel] PDF text rendering error |
Date: | Tue, 12 Jun 2012 20:58:43 +0800 |
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
|
[Prev in Thread] | Current Thread | [Next in Thread] |