mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
install.cc export.cc -> font.cc
This commit is contained in:
parent
31861e7acb
commit
75c2c8cba1
@ -147,10 +147,9 @@ add_executable(pdf2htmlEX
|
||||
src/pdf2htmlEX.cc
|
||||
src/HTMLRenderer/HTMLRenderer.h
|
||||
src/HTMLRenderer/draw.cc
|
||||
src/HTMLRenderer/export.cc
|
||||
src/HTMLRenderer/general.cc
|
||||
src/HTMLRenderer/image.cc
|
||||
src/HTMLRenderer/install.cc
|
||||
src/HTMLRenderer/font.cc
|
||||
src/HTMLRenderer/TextLineBuffer.h
|
||||
src/HTMLRenderer/TextLineBuffer.cc
|
||||
src/HTMLRenderer/link.cc
|
||||
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
* export.cc
|
||||
*
|
||||
* Export styles to HTML
|
||||
*
|
||||
* Copyright (C) 2012,2013 Lu Wang <coolwanglu@gmail.com>
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <cctype>
|
||||
|
||||
#include "HTMLRenderer.h"
|
||||
#include "util/namespace.h"
|
||||
#include "util/base64stream.h"
|
||||
#include "util/math.h"
|
||||
#include "util/misc.h"
|
||||
|
||||
namespace pdf2htmlEX {
|
||||
|
||||
using std::cerr;
|
||||
using std::endl;
|
||||
|
||||
void HTMLRenderer::export_remote_font(const FontInfo & info, const string & suffix, GfxFont * font)
|
||||
{
|
||||
string mime_type, format;
|
||||
if(suffix == ".ttf")
|
||||
{
|
||||
format = "truetype";
|
||||
mime_type = "application/x-font-ttf";
|
||||
}
|
||||
else if(suffix == ".otf")
|
||||
{
|
||||
format = "opentype";
|
||||
mime_type = "application/x-font-otf";
|
||||
}
|
||||
else if(suffix == ".woff")
|
||||
{
|
||||
format = "woff";
|
||||
mime_type = "application/font-woff";
|
||||
}
|
||||
else if(suffix == ".eot")
|
||||
{
|
||||
format = "embedded-opentype";
|
||||
mime_type = "application/vnd.ms-fontobject";
|
||||
}
|
||||
else if(suffix == ".svg")
|
||||
{
|
||||
format = "svg";
|
||||
mime_type = "image/svg+xml";
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Warning: unknown font suffix: " << suffix << endl;
|
||||
}
|
||||
|
||||
f_css.fs << "@font-face{"
|
||||
<< "font-family:f" << info.id << ";"
|
||||
<< "src:url(";
|
||||
|
||||
{
|
||||
auto fn = str_fmt("f%llx%s", info.id, suffix.c_str());
|
||||
if(param->single_html)
|
||||
{
|
||||
auto path = param->tmp_dir + "/" + (char*)fn;
|
||||
ifstream fin(path, ifstream::binary);
|
||||
if(!fin)
|
||||
throw "Cannot locate font file: " + path;
|
||||
f_css.fs << "'data:font/" + mime_type + ";base64," << base64stream(fin) << "'";
|
||||
}
|
||||
else
|
||||
{
|
||||
f_css.fs << (char*)fn;
|
||||
}
|
||||
}
|
||||
|
||||
f_css.fs << ")"
|
||||
<< "format(\"" << format << "\");"
|
||||
<< "}" // end of @font-face
|
||||
<< ".f" << info.id << "{"
|
||||
<< "font-family:f" << info.id << ";"
|
||||
<< "line-height:" << round(info.ascent - info.descent) << ";"
|
||||
<< "font-style:normal;"
|
||||
<< "font-weight:normal;"
|
||||
<< "visibility:visible;"
|
||||
<< "}" // end of .f
|
||||
<< endl;
|
||||
}
|
||||
|
||||
static string general_font_family(GfxFont * font)
|
||||
{
|
||||
if(font->isFixedWidth())
|
||||
return "monospace";
|
||||
else if (font->isSerif())
|
||||
return "serif";
|
||||
else
|
||||
return "sans-serif";
|
||||
}
|
||||
|
||||
// TODO: this function is called when some font is unable to process, may use the name there as a hint
|
||||
void HTMLRenderer::export_remote_default_font(long long fn_id)
|
||||
{
|
||||
f_css.fs << ".f" << fn_id << "{font-family:sans-serif;visibility:hidden;}" << endl;
|
||||
}
|
||||
|
||||
void HTMLRenderer::export_local_font(const FontInfo & info, GfxFont * font, const string & original_font_name, const string & cssfont)
|
||||
{
|
||||
f_css.fs << ".f" << info.id << "{";
|
||||
f_css.fs << "font-family:" << ((cssfont == "") ? (original_font_name + "," + general_font_family(font)) : cssfont) << ";";
|
||||
|
||||
string fn = original_font_name;
|
||||
for(auto iter = fn.begin(); iter != fn.end(); ++iter)
|
||||
*iter = tolower(*iter);
|
||||
|
||||
if(font->isBold() || (fn.find("bold") != string::npos))
|
||||
f_css.fs << "font-weight:bold;";
|
||||
else
|
||||
f_css.fs << "font-weight:normal;";
|
||||
|
||||
if(fn.find("oblique") != string::npos)
|
||||
f_css.fs << "font-style:oblique;";
|
||||
else if(font->isItalic() || (fn.find("italic") != string::npos))
|
||||
f_css.fs << "font-style:italic;";
|
||||
else
|
||||
f_css.fs << "font-style:normal;";
|
||||
|
||||
f_css.fs << "line-height:" << round(info.ascent - info.descent) << ";";
|
||||
|
||||
f_css.fs << "visibility:visible;";
|
||||
|
||||
f_css.fs << "}" << endl;
|
||||
}
|
||||
|
||||
} //namespace pdf2hmlEX
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* install.cc
|
||||
* font.cc
|
||||
*
|
||||
* maintaining all known styles
|
||||
* Font processing
|
||||
*
|
||||
* Copyright (C) 2012,2013 Lu Wang <coolwanglu@gmail.com>
|
||||
*/
|
||||
@ -9,6 +9,8 @@
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
#include <sstream>
|
||||
#include <cctype>
|
||||
|
||||
#include <GlobalParams.h>
|
||||
|
||||
@ -17,6 +19,7 @@
|
||||
#include "util/namespace.h"
|
||||
#include "util/math.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/base64stream.h"
|
||||
|
||||
namespace pdf2htmlEX {
|
||||
|
||||
@ -212,4 +215,114 @@ void HTMLRenderer::install_external_font(GfxFont * font, FontInfo & info)
|
||||
export_local_font(info, font, fontname, "");
|
||||
}
|
||||
|
||||
} // namespace pdf2htmlEX
|
||||
void HTMLRenderer::export_remote_font(const FontInfo & info, const string & suffix, GfxFont * font)
|
||||
{
|
||||
string mime_type, format;
|
||||
if(suffix == ".ttf")
|
||||
{
|
||||
format = "truetype";
|
||||
mime_type = "application/x-font-ttf";
|
||||
}
|
||||
else if(suffix == ".otf")
|
||||
{
|
||||
format = "opentype";
|
||||
mime_type = "application/x-font-otf";
|
||||
}
|
||||
else if(suffix == ".woff")
|
||||
{
|
||||
format = "woff";
|
||||
mime_type = "application/font-woff";
|
||||
}
|
||||
else if(suffix == ".eot")
|
||||
{
|
||||
format = "embedded-opentype";
|
||||
mime_type = "application/vnd.ms-fontobject";
|
||||
}
|
||||
else if(suffix == ".svg")
|
||||
{
|
||||
format = "svg";
|
||||
mime_type = "image/svg+xml";
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Warning: unknown font suffix: " << suffix << endl;
|
||||
}
|
||||
|
||||
f_css.fs << "@font-face{"
|
||||
<< "font-family:f" << info.id << ";"
|
||||
<< "src:url(";
|
||||
|
||||
{
|
||||
auto fn = str_fmt("f%llx%s", info.id, suffix.c_str());
|
||||
if(param->single_html)
|
||||
{
|
||||
auto path = param->tmp_dir + "/" + (char*)fn;
|
||||
ifstream fin(path, ifstream::binary);
|
||||
if(!fin)
|
||||
throw "Cannot locate font file: " + path;
|
||||
f_css.fs << "'data:font/" + mime_type + ";base64," << base64stream(fin) << "'";
|
||||
}
|
||||
else
|
||||
{
|
||||
f_css.fs << (char*)fn;
|
||||
}
|
||||
}
|
||||
|
||||
f_css.fs << ")"
|
||||
<< "format(\"" << format << "\");"
|
||||
<< "}" // end of @font-face
|
||||
<< ".f" << info.id << "{"
|
||||
<< "font-family:f" << info.id << ";"
|
||||
<< "line-height:" << round(info.ascent - info.descent) << ";"
|
||||
<< "font-style:normal;"
|
||||
<< "font-weight:normal;"
|
||||
<< "visibility:visible;"
|
||||
<< "}" // end of .f
|
||||
<< endl;
|
||||
}
|
||||
|
||||
static string general_font_family(GfxFont * font)
|
||||
{
|
||||
if(font->isFixedWidth())
|
||||
return "monospace";
|
||||
else if (font->isSerif())
|
||||
return "serif";
|
||||
else
|
||||
return "sans-serif";
|
||||
}
|
||||
|
||||
// TODO: this function is called when some font is unable to process, may use the name there as a hint
|
||||
void HTMLRenderer::export_remote_default_font(long long fn_id)
|
||||
{
|
||||
f_css.fs << ".f" << fn_id << "{font-family:sans-serif;visibility:hidden;}" << endl;
|
||||
}
|
||||
|
||||
void HTMLRenderer::export_local_font(const FontInfo & info, GfxFont * font, const string & original_font_name, const string & cssfont)
|
||||
{
|
||||
f_css.fs << ".f" << info.id << "{";
|
||||
f_css.fs << "font-family:" << ((cssfont == "") ? (original_font_name + "," + general_font_family(font)) : cssfont) << ";";
|
||||
|
||||
string fn = original_font_name;
|
||||
for(auto iter = fn.begin(); iter != fn.end(); ++iter)
|
||||
*iter = tolower(*iter);
|
||||
|
||||
if(font->isBold() || (fn.find("bold") != string::npos))
|
||||
f_css.fs << "font-weight:bold;";
|
||||
else
|
||||
f_css.fs << "font-weight:normal;";
|
||||
|
||||
if(fn.find("oblique") != string::npos)
|
||||
f_css.fs << "font-style:oblique;";
|
||||
else if(font->isItalic() || (fn.find("italic") != string::npos))
|
||||
f_css.fs << "font-style:italic;";
|
||||
else
|
||||
f_css.fs << "font-style:normal;";
|
||||
|
||||
f_css.fs << "line-height:" << round(info.ascent - info.descent) << ";";
|
||||
|
||||
f_css.fs << "visibility:visible;";
|
||||
|
||||
f_css.fs << "}" << endl;
|
||||
}
|
||||
|
||||
} //namespace pdf2hmlEX
|
Loading…
Reference in New Issue
Block a user