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: Wed, 13 Jun 2012 14:25:19 +0800


Toshiya-san,
please check again, thanks.
 
Johnson Y. Yan

发件人: suzuki toshiya
发送时间: 2012-06-13 00:18:46
收件人: Johnson Y. Yan
抄送: freetype-devel
主题: Re: [ft-devel] PDF text rendering error
 
Hmm. Can you post the C source code as an attachment?
Yet I've not checked, but I'm not sure your code is compilable
because no header files are included. If you make the compiler
include the header files by compiler flags written in project file,
please post project file too.
Regards,
mpsuzuki
Johnson Y. Yan wrote:
> 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

Attachment: freetypetest.txt
Description: Binary data


reply via email to

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