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: suzuki toshiya
Subject: Re: [ft-devel] PDF text rendering error
Date: Wed, 13 Jun 2012 01:20:43 +0900
User-agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406)

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]