mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 04:50:09 +00:00
added an option to embed external fonts
This commit is contained in:
parent
14a137b449
commit
0e9cc3444e
@ -103,6 +103,9 @@ void HTMLRenderer::install_embedded_font(GfxFont * font, FontInfo & info)
|
|||||||
|
|
||||||
void HTMLRenderer::install_base_font(GfxFont * font, GfxFontLoc * font_loc, FontInfo & info)
|
void HTMLRenderer::install_base_font(GfxFont * font, GfxFontLoc * font_loc, FontInfo & info)
|
||||||
{
|
{
|
||||||
|
string psname(font_loc->path->getCString());
|
||||||
|
string basename = psname.substr(0, psname.find('-'));
|
||||||
|
|
||||||
GfxFontLoc * localfontloc = font->locateFont(xref, gFalse);
|
GfxFontLoc * localfontloc = font->locateFont(xref, gFalse);
|
||||||
if(param->embed_base_font)
|
if(param->embed_base_font)
|
||||||
{
|
{
|
||||||
@ -110,17 +113,17 @@ void HTMLRenderer::install_base_font(GfxFont * font, GfxFontLoc * font_loc, Font
|
|||||||
{
|
{
|
||||||
embed_font(path(localfontloc->path->getCString()), font, info);
|
embed_font(path(localfontloc->path->getCString()), font, info);
|
||||||
export_remote_font(info, param->font_suffix, param->font_format, font);
|
export_remote_font(info, param->font_suffix, param->font_format, font);
|
||||||
|
delete localfontloc;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cerr << format("Cannot embed base font: f%|1$x|") % info.id << endl;
|
cerr << format("Cannot embed base font: f%|1$x| %2%") % info.id % psname << endl;
|
||||||
|
// fallback to exporting by name
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string psname(font_loc->path->getCString());
|
|
||||||
string basename = psname.substr(0, psname.find('-'));
|
|
||||||
string cssfont;
|
string cssfont;
|
||||||
auto iter = BASE_14_FONT_CSS_FONT_MAP.find(basename);
|
auto iter = BASE_14_FONT_CSS_FONT_MAP.find(basename);
|
||||||
if(iter == BASE_14_FONT_CSS_FONT_MAP.end())
|
if(iter == BASE_14_FONT_CSS_FONT_MAP.end())
|
||||||
@ -136,6 +139,7 @@ void HTMLRenderer::install_base_font(GfxFont * font, GfxFontLoc * font_loc, Font
|
|||||||
{
|
{
|
||||||
// fill in ascent/descent only, do not embed
|
// fill in ascent/descent only, do not embed
|
||||||
embed_font(path(localfontloc->path->getCString()), font, info, true);
|
embed_font(path(localfontloc->path->getCString()), font, info, true);
|
||||||
|
delete localfontloc;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -158,15 +162,36 @@ void HTMLRenderer::install_external_font(GfxFont * font, FontInfo & info)
|
|||||||
cerr << "Warning: workaround for font names in bad encodings." << endl;
|
cerr << "Warning: workaround for font names in bad encodings." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//debug
|
|
||||||
GooString gfn(fontname.c_str());
|
GooString gfn(fontname.c_str());
|
||||||
GooString * path = globalParams->findFontFile(&gfn);
|
GfxFontLoc * localfontloc = font->locateFont(xref, gFalse);
|
||||||
|
|
||||||
cerr << "Find: " << fontname << endl;
|
if(param->embed_external_font)
|
||||||
if(path)
|
|
||||||
{
|
{
|
||||||
cerr << "MATCHED: " << path->getCString() << endl;
|
if(localfontloc != nullptr)
|
||||||
delete path;
|
{
|
||||||
|
embed_font(path(localfontloc->path->getCString()), font, info);
|
||||||
|
export_remote_font(info, param->font_suffix, param->font_format, font);
|
||||||
|
delete localfontloc;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cerr << format("Cannot embed external font: f%|1$x| %2%") % info.id % fontname << endl;
|
||||||
|
// fallback to exporting by name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// still try to get an idea of read ascent/descent
|
||||||
|
if(localfontloc != nullptr)
|
||||||
|
{
|
||||||
|
// fill in ascent/descent only, do not embed
|
||||||
|
embed_font(path(localfontloc->path->getCString()), font, info, true);
|
||||||
|
delete localfontloc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
info.ascent = font->getAscent();
|
||||||
|
info.descent = font->getDescent();
|
||||||
}
|
}
|
||||||
|
|
||||||
export_local_font(info, font, fontname, "");
|
export_local_font(info, font, fontname, "");
|
||||||
|
@ -314,6 +314,7 @@ void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo &
|
|||||||
* Firefox & Chrome interprets the values in different ways
|
* Firefox & Chrome interprets the values in different ways
|
||||||
* Trying to unify them
|
* Trying to unify them
|
||||||
*/
|
*/
|
||||||
|
// Generate an intermediate ttf font in order to retrieve the metrics
|
||||||
add_tmp_file(fn + "_.ttf");
|
add_tmp_file(fn + "_.ttf");
|
||||||
script_fout << format("Generate(%1%)") % (tmp_dir / (fn + "_.ttf")) << endl;
|
script_fout << format("Generate(%1%)") % (tmp_dir / (fn + "_.ttf")) << endl;
|
||||||
script_fout << "Close()" << endl;
|
script_fout << "Close()" << endl;
|
||||||
|
Loading…
Reference in New Issue
Block a user