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 15:02:03 +0800


yes, it is compilable via command line.
may be need to modify the relative freetype path.
 
Johnson Y. Yan

发件人: suzuki toshiya
发送时间: 2012-06-13 14:32:16
收件人: Johnson Y. Yan
抄送: freetype-devel
主题: Re: [ft-devel] PDF text rendering error
 
This is compilable via command line?
Johnson Y. Yan wrote:
> 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

reply via email to

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