freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft-devel] PDF text rendering error


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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]