⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xoutputdev.cc

📁 source code: Covert TXT to PDF
💻 CC
📖 第 1 页 / 共 5 页
字号:
					  double m11, double m12,					  double m21, double m22,					  GBool subst) {  XOutputFont *font;  font = NULL;  // create the new font  switch (dfp->kind) {  case displayFontX:    font = tryGetServerFont(dfp->x.xlfd, dfp->x.encoding, gfxFont,			    m11Orig, m12Orig, m21Orig, m22Orig,			    m11, m12, m21, m22);    break;  case displayFontT1:#if HAVE_T1LIB_H    if (t1libControl != fontRastNone && !gfxFont->isCIDFont()) {      font = tryGetT1FontFromFile(xref, dfp->t1.fileName, gFalse, gfxFont,				  m11Orig, m12Orig, m21Orig, m22Orig,				  m11, m12, m21, m22, subst);    }#endif#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)    if (!font) {      if (freetypeControl != fontRastNone) {	font = tryGetFTFontFromFile(xref, dfp->t1.fileName, gFalse, gfxFont,				    m11Orig, m12Orig, m21Orig, m22Orig,				    m11, m12, m21, m22, subst);      }    }#endif#if !((FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)) || defined(HAVE_T1LIB_H))    error(-1, "Config file specifies a Type 1 font,");    error(-1, "but xpdf was not built with t1lib or FreeType2 support");#endif    break;  case displayFontTT:#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)    if (freetypeControl != fontRastNone) {      font = tryGetFTFontFromFile(xref, dfp->tt.fileName, gFalse, gfxFont,				  m11Orig, m12Orig, m21Orig, m22Orig,				  m11, m12, m21, m22, subst);    }#endif#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)    if (freetypeControl != fontRastNone) {      font = tryGetTTFontFromFile(xref, dfp->tt.fileName, gFalse, gfxFont,				  m11Orig, m12Orig, m21Orig, m22Orig,				  m11, m12, m21, m22, subst);    }#endif#if !(HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)    error(-1, "Config file specifies a TrueType font,");    error(-1, "but xpdf was not built with FreeType support");    dfp = NULL;#endif    break;  }  return font;}#if HAVE_T1LIB_HXOutputFont *XOutputFontCache::tryGetT1Font(XRef *xref,					    GfxFont *gfxFont,					    double m11, double m12,					    double m21, double m22) {  Ref *id;  XOutputT1FontFile *xFontFile;  XOutputFont *font;  Ref embRef;  GString *fileName;  FILE *f;  char *fontBuf;  int fontLen;  Type1CFontFile *ff;  Object refObj, strObj;  int c;  int i;  // check the already available font files  id = gfxFont->getID();  for (i = 0; i < t1FontFiles->getLength(); ++i) {    xFontFile = (XOutputT1FontFile *)t1FontFiles->get(i);    if (xFontFile->num == id->num && xFontFile->gen == id->gen &&	!xFontFile->subst) {      font = new XOutputT1Font(id, xFontFile->fontFile,			       m11, m12, m21, m22,			       m11, m12, m21, m22, display, xOut);      if (!font->isOk()) {	delete font;	return NULL;      }      return font;    }  }  // check for an embedded font  if (gfxFont->getEmbeddedFontID(&embRef)) {    // create the font file    fileName = NULL;    if (!openTempFile(&fileName, &f, "wb", NULL)) {      error(-1, "Couldn't create temporary Type 1 font file");      return NULL;    }    if (gfxFont->getType() == fontType1C) {      if (!(fontBuf = gfxFont->readEmbFontFile(xref, &fontLen))) {	fclose(f);	return NULL;      }      ff = new Type1CFontFile(fontBuf, fontLen);      ff->convertToType1(outputToFile, f);      delete ff;      gfree(fontBuf);    } else { // fontType1      refObj.initRef(embRef.num, embRef.gen);      refObj.fetch(xref, &strObj);      refObj.free();      strObj.streamReset();      while ((c = strObj.streamGetChar()) != EOF) {	fputc(c, f);      }      strObj.streamClose();      strObj.free();    }    fclose(f);    // create the Font    font = tryGetT1FontFromFile(xref, fileName, gTrue, gfxFont,				m11, m12, m21, m22,				m11, m12, m21, m22, gFalse);    // on systems with Unix hard link semantics, this will remove the    // last link to the temp file    unlink(fileName->getCString());    delete fileName;  // check for an external font file  } else if ((fileName = gfxFont->getExtFontFile())) {    font = tryGetT1FontFromFile(xref, fileName, gFalse, gfxFont,				m11, m12, m21, m22,				m11, m12, m21, m22, gFalse);  } else {    font = NULL;  }  return font;}XOutputFont *XOutputFontCache::tryGetT1FontFromFile(XRef *xref,						    GString *fileName,						    GBool deleteFile,						    GfxFont *gfxFont,						    double m11Orig,						    double m12Orig,						    double m21Orig,						    double m22Orig,						    double m11, double m12,						    double m21, double m22,						    GBool subst) {  Ref *id;  T1FontFile *fontFile;  XOutputFont *font;  // create the t1lib font file  fontFile = new T1FontFile(t1Engine, fileName->getCString(),			    ((Gfx8BitFont *)gfxFont)->getEncoding(),			    gfxFont->getFontBBox());  if (!fontFile->isOk()) {    error(-1, "Couldn't create t1lib font from '%s'",	  fileName->getCString());    delete fontFile;    if (deleteFile) {      unlink(fileName->getCString());    }    return NULL;  }  // add to list  id = gfxFont->getID();  t1FontFiles->append(new XOutputT1FontFile(id->num, id->gen,					    subst, fontFile,					    deleteFile ? fileName->copy()					               : (GString *)NULL));  // create the Font  font = new XOutputT1Font(gfxFont->getID(), fontFile,			   m11Orig, m12Orig, m21Orig, m22Orig,			   m11, m12, m21, m22, display, xOut);  if (!font->isOk()) {    delete font;    return NULL;  }  return font;}#endif // HAVE_T1LIB_H#if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)XOutputFont *XOutputFontCache::tryGetFTFont(XRef *xref,					    GfxFont *gfxFont,					    double m11, double m12,					    double m21, double m22) {  Ref *id;  XOutputFTFontFile *xFontFile;  XOutputFont *font;  Ref embRef;  GString *fileName;  FILE *f;#if 1 //~ need this until FT can handle fonts with missing tables  char *fontBuf;  int fontLen;  TrueTypeFontFile *ff;#endif  Object refObj, strObj;  int c;  int i;  // check the already available font files  id = gfxFont->getID();  for (i = 0; i < ftFontFiles->getLength(); ++i) {    xFontFile = (XOutputFTFontFile *)ftFontFiles->get(i);    if (xFontFile->num == id->num && xFontFile->gen == id->gen &&	!xFontFile->subst) {      font = new XOutputFTFont(id, xFontFile->fontFile,			       m11, m12, m21, m22,			       m11, m12, m21, m22, display, xOut);      if (!font->isOk()) {	delete font;	return NULL;      }      return font;    }  }  // check for an embedded font  if (gfxFont->getEmbeddedFontID(&embRef)) {    // create the font file    fileName = NULL;    if (!openTempFile(&fileName, &f, "wb", NULL)) {      error(-1, "Couldn't create temporary TrueType font file");      return NULL;    }#if 1 //~ need this until FT can handle fonts with missing tables    if (gfxFont->getType() == fontTrueType ||	gfxFont->getType() == fontCIDType2) {      if (!(fontBuf = gfxFont->readEmbFontFile(xref, &fontLen))) {	fclose(f);	return NULL;      }      ff = new TrueTypeFontFile(fontBuf, fontLen);      ff->writeTTF(f);      delete ff;      gfree(fontBuf);    } else {      refObj.initRef(embRef.num, embRef.gen);      refObj.fetch(xref, &strObj);      refObj.free();      strObj.streamReset();      while ((c = strObj.streamGetChar()) != EOF) {	fputc(c, f);      }      strObj.streamClose();      strObj.free();    }#else    refObj.initRef(embRef.num, embRef.gen);    refObj.fetch(xref, &strObj);    refObj.free();    strObj.streamReset();    while ((c = strObj.streamGetChar()) != EOF) {      fputc(c, f);    }    strObj.streamClose();    strObj.free();#endif    fclose(f);    // create the Font    font = tryGetFTFontFromFile(xref, fileName, gTrue, gfxFont,				m11, m12, m21, m22,				m11, m12, m21, m22, gFalse);    // on systems with Unix hard link semantics, this will remove the    // last link to the temp file    unlink(fileName->getCString());    delete fileName;  // check for an external font file  } else if ((fileName = gfxFont->getExtFontFile())) {    font = tryGetFTFontFromFile(xref, fileName, gFalse, gfxFont,				m11, m12, m21, m22,				m11, m12, m21, m22, gFalse);  } else {    font = NULL;  }  return font;}XOutputFont *XOutputFontCache::tryGetFTFontFromFile(XRef *xref,						    GString *fileName,						    GBool deleteFile,						    GfxFont *gfxFont,						    double m11Orig,						    double m12Orig,						    double m21Orig,						    double m22Orig,						    double m11, double m12,						    double m21, double m22,						    GBool subst) {  Ref *id;  FTFontFile *fontFile;  XOutputFont *font;  // create the FreeType font file  if (gfxFont->isCIDFont()) {    if (gfxFont->getType() == fontCIDType2) {      fontFile = new FTFontFile(ftEngine, fileName->getCString(),				((GfxCIDFont *)gfxFont)->getCIDToGID(),				((GfxCIDFont *)gfxFont)->getCIDToGIDLen());    } else { // fontCIDType0, fontCIDType0C      fontFile = new FTFontFile(ftEngine, fileName->getCString());    }  } else {    fontFile = new FTFontFile(ftEngine, fileName->getCString(),			      ((Gfx8BitFont *)gfxFont)->getEncoding(),			      ((Gfx8BitFont *)gfxFont)->getHasEncoding());  }  if (!fontFile->isOk()) {    error(-1, "Couldn't create FreeType font from '%s'",	  fileName->getCString());    delete fontFile;    if (deleteFile) {      unlink(fileName->getCString());    }    return NULL;  }  // add to list  id = gfxFont->getID();  ftFontFiles->append(new XOutputFTFontFile(id->num, id->gen,					    subst, fontFile,					    deleteFile ? fileName->copy()					               : (GString *)NULL));  // create the Font  font = new XOutputFTFont(gfxFont->getID(), fontFile,			   m11Orig, m12Orig, m21Orig, m22Orig,			   m11, m12, m21, m22, display, xOut);  if (!font->isOk()) {    delete font;    return NULL;  }  return font;}#endif // FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)#if !FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)XOutputFont *XOutputFontCache::tryGetTTFont(XRef *xref,					    GfxFont *gfxFont,					    double m11, double m12,					    double m21, double m22) {  Ref *id;  XOutputTTFontFile *xFontFile;  XOutputFont *font;  Ref embRef;  GString *fileName;  FILE *f;  Object refObj, strObj;  int c;  int i;  // check the already available font files  id = gfxFont->getID();  xFontFile = NULL;  for (i = 0; i < ttFontFiles->getLength(); ++i) {    xFontFile = (XOutputTTFontFile *)ttFontFiles->get(i);    if (xFontFile->num == id->num && xFontFile->gen == id->gen &&	!xFontFile->subst) {      font = new XOutputTTFont(id, xFontFile->fontFile,			       m11, m12, m21, m22,			       m11, m12, m21, m22, display, xOut);      if (!font->isOk()) {	delete font;	return NULL;      }      return font;    }  }  // check for an embedded font  if (gfxFont->getEmbeddedFontID(&embRef)) {    // create the font file    fileName = NULL;    if (!openTempFile(&fileName, &f, "wb", NULL)) {      error(-1, "Couldn't create temporary TrueType font file");      return NULL;    }    refObj.initRef(embRef.num, embRef.gen);    refObj.fetch(xref, &strObj);    refObj.free();    strObj.streamReset();    while ((c = strObj.streamGetChar()) != EOF) {      fputc(c, f);    }    strObj.streamClose();    strObj.free();    fclose(f);    // create the Font    font = tryGetTTFontFromFile(xref, fileName, gTrue, gfxFont,				m11, m12, m21, m22,				m11, m12, m21, m22, gFalse);    // on systems with Unix hard link semantics, this will remove the    // last link to the temp file    unlink(fileName->getCString());    delete fileName;  } else if ((fileName = gfxFont->getExtFontFile())) {    font = tryGetTTFontFromFile(xref, fileName, gFalse, gfxFont,				m11, m12, m21, m22,				m11, m12, m21, m22, gFalse);  } else {    font = NULL;  }  return font;}XOutputFont *XOutputFontCache::tryGetTTFontFromFile(XRef *xref,						    GString *fileName,						    GBool deleteFile,						    GfxFont *gfxFont,						    double m11Orig,						    double m12Orig,						    double m21Orig,						    double m22Orig,						    double m11, double m12,						    double m21, double m22,						    GBool subst) {  Ref *id;  TTFontFile *fontFile;  XOutputFont *font;  // create the FreeType font file  if (gfxFont->isCIDFont()) {    // fontCIDType2    fontFile = new TTFontFile(ttEngine, fileName->getCString(),			      ((GfxCIDFont *)gfxFont)->getCIDToGID(),			      ((GfxCIDFont *)gfxFont)->getCIDToGIDLen());  } else {    fontFile = new TTFontFile(ttEngine, fileName->getCString(),			      ((Gfx8BitFont *)gfxFont)->getEncoding(),			      ((Gfx8BitFont *)gfxFont)->getHasEncoding());  }  if (!fontFile->isOk()) {    error(-1, "Couldn't create FreeType font from '%s'",	  fileName->getCString());    delete fontFile;    if (deleteFile) {      unlink(fileName->getCString());    }    return NULL;  }  // add to list  id = gfxFont->getID();  ttFontFiles->append(new XOutputTTFontFile(id->num, id->gen,					    subst, fontFile,					    deleteFile ? fileName->copy()					               : (GString *)NULL));  // create the Font  font = new XOutputTTFont(gfxFont->getID(), fontFile,			   m11Orig, m12Orig, m21Orig, m22Orig,			   m11, m12, m21, m22, display, xOut);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -