mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
use asc/dec of local matched font if possible
This commit is contained in:
parent
0ef68558ae
commit
9a2047777f
@ -126,7 +126,7 @@ class HTMLRenderer : public OutputDev
|
||||
void add_tmp_file (const std::string & fn);
|
||||
void clean_tmp_files ();
|
||||
boost::filesystem::path dump_embedded_font (GfxFont * font, long long fn_id);
|
||||
void embed_font(const boost::filesystem::path & filepath, GfxFont * font, FontInfo & info);
|
||||
void embed_font(const boost::filesystem::path & filepath, GfxFont * font, FontInfo & info, bool get_metric_only = false);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// manage styles
|
||||
@ -153,7 +153,7 @@ class HTMLRenderer : public OutputDev
|
||||
*/
|
||||
void export_remote_font(const FontInfo & info, const std::string & suffix, const std::string & fontfileformat, GfxFont * font);
|
||||
void export_remote_default_font(long long fn_id);
|
||||
void export_local_font(long long fn_id, GfxFont * font, const std::string & original_font_name, const std::string & cssfont);
|
||||
void export_local_font(const FontInfo & info, GfxFont * font, const std::string & original_font_name, const std::string & cssfont);
|
||||
|
||||
void export_font_size(long long fs_id, double font_size);
|
||||
void export_transform_matrix(long long tm_id, const double * tm);
|
||||
|
@ -50,9 +50,9 @@ void HTMLRenderer::export_remote_default_font(long long fn_id)
|
||||
allcss_fout << format(".f%|1$x|{font-family:sans-serif;color:transparent;visibility:hidden;}")%fn_id << endl;
|
||||
}
|
||||
|
||||
void HTMLRenderer::export_local_font(long long fn_id, GfxFont * font, const string & original_font_name, const string & cssfont)
|
||||
void HTMLRenderer::export_local_font(const FontInfo & info, GfxFont * font, const string & original_font_name, const string & cssfont)
|
||||
{
|
||||
allcss_fout << format(".f%|1$x|{") % fn_id;
|
||||
allcss_fout << format(".f%|1$x|{") % info.id;
|
||||
allcss_fout << "font-family:" << ((cssfont == "") ? (original_font_name + "," + general_font_family(font)) : cssfont) << ";";
|
||||
|
||||
if(font->isBold() || ifind_first(original_font_name, "bold"))
|
||||
@ -63,7 +63,7 @@ void HTMLRenderer::export_local_font(long long fn_id, GfxFont * font, const stri
|
||||
else if(font->isItalic() || ifind_first(original_font_name, "italic"))
|
||||
allcss_fout << "font-style:italic;";
|
||||
|
||||
allcss_fout << "line-height:" << (font->getAscent() - font->getDescent()) << ";";
|
||||
allcss_fout << "line-height:" << (info.ascent - info.descent) << ";";
|
||||
|
||||
allcss_fout << "}" << endl;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "HTMLRenderer.h"
|
||||
#include "namespace.h"
|
||||
#include "util.h"
|
||||
|
||||
FontInfo HTMLRenderer::install_font(GfxFont * font)
|
||||
{
|
||||
@ -102,12 +103,12 @@ void HTMLRenderer::install_embedded_font(GfxFont * font, FontInfo & info)
|
||||
|
||||
void HTMLRenderer::install_base_font(GfxFont * font, GfxFontLoc * font_loc, FontInfo & info)
|
||||
{
|
||||
GfxFontLoc * localfontloc = font->locateFont(xref, gFalse);
|
||||
if(param->embed_base_font)
|
||||
{
|
||||
GfxFontLoc * fontloc = font->locateFont(xref, gFalse);
|
||||
if(fontloc != nullptr)
|
||||
if(localfontloc != nullptr)
|
||||
{
|
||||
embed_font(path(fontloc->path->getCString()), font, info);
|
||||
embed_font(path(localfontloc->path->getCString()), font, info);
|
||||
export_remote_font(info, param->font_suffix, param->font_format, font);
|
||||
return;
|
||||
}
|
||||
@ -130,13 +131,22 @@ void HTMLRenderer::install_base_font(GfxFont * font, GfxFontLoc * font_loc, Font
|
||||
else
|
||||
cssfont = iter->second;
|
||||
|
||||
// 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);
|
||||
}
|
||||
else
|
||||
{
|
||||
info.ascent = font->getAscent();
|
||||
info.descent = font->getDescent();
|
||||
}
|
||||
|
||||
export_local_font(info.id, font, psname, cssfont);
|
||||
export_local_font(info, font, psname, cssfont);
|
||||
}
|
||||
|
||||
void HTMLRenderer::install_external_font( GfxFont * font, FontInfo & info)
|
||||
void HTMLRenderer::install_external_font(GfxFont * font, FontInfo & info)
|
||||
{
|
||||
string fontname(font->getName()->getCString());
|
||||
|
||||
@ -148,7 +158,7 @@ void HTMLRenderer::install_external_font( GfxFont * font, FontInfo & info)
|
||||
cerr << "Warning: workaround for font names in bad encodings." << endl;
|
||||
}
|
||||
|
||||
export_local_font(info.id, font, fontname, "");
|
||||
export_local_font(info, font, fontname, "");
|
||||
}
|
||||
|
||||
long long HTMLRenderer::install_font_size(double font_size)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* text.ccc
|
||||
*
|
||||
* Handling text and relative stuffs
|
||||
* Handling text & font, and relative stuffs
|
||||
*
|
||||
* by WangLu
|
||||
* 2012.08.14
|
||||
@ -153,7 +153,7 @@ path HTMLRenderer::dump_embedded_font (GfxFont * font, long long fn_id)
|
||||
return filepath;
|
||||
}
|
||||
|
||||
void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo & info)
|
||||
void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo & info, bool get_metric_only)
|
||||
{
|
||||
string suffix = filepath.extension().string();
|
||||
to_lower(suffix);
|
||||
@ -172,6 +172,12 @@ void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo &
|
||||
|
||||
Gfx8BitFont * font_8bit = nullptr;
|
||||
|
||||
if(get_metric_only)
|
||||
{
|
||||
info.use_tounicode = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Step 1
|
||||
* dump the font file directly from the font descriptor and put the glyphs into the correct slots
|
||||
@ -297,6 +303,7 @@ void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo &
|
||||
|
||||
if(ctu)
|
||||
ctu->decRefCnt();
|
||||
}
|
||||
|
||||
auto dest = ((param->single_html ? tmp_dir : dest_dir) / (fn+(param->font_suffix)));
|
||||
if(param->single_html)
|
||||
@ -307,9 +314,10 @@ void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo &
|
||||
* Firefox & Chrome interprets the values in different ways
|
||||
* Trying to unify them
|
||||
*/
|
||||
script_fout << format("Generate(%1%)") % dest << endl;
|
||||
add_tmp_file(fn + "_.ttf");
|
||||
script_fout << format("Generate(%1%)") % (tmp_dir / (fn + "_.ttf")) << endl;
|
||||
script_fout << "Close()" << endl;
|
||||
script_fout << format("Open(%1%, 1)") % dest << endl;
|
||||
script_fout << format("Open(%1%, 1)") % (tmp_dir / (fn + "_.ttf")) << endl;
|
||||
script_fout << ifstream(PDF2HTMLEX_DATA_PATH / UNIFY_SCRIPT_FILENAME).rdbuf();
|
||||
script_fout << format("Generate(%1%)") % dest << endl;
|
||||
script_fout.close();
|
||||
@ -346,8 +354,6 @@ void HTMLRenderer::embed_font(const path & filepath, GfxFont * font, FontInfo &
|
||||
{
|
||||
cerr << "Ascent: " << info.ascent << " Descent: " << info.descent << endl;
|
||||
}
|
||||
|
||||
export_remote_font(info, param->font_suffix, param->font_format, font);
|
||||
}
|
||||
|
||||
void HTMLRenderer::drawString(GfxState * state, GooString * s)
|
||||
|
Loading…
Reference in New Issue
Block a user