mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
better accuracy with new positioning method, but break text selection in Chrome
This commit is contained in:
parent
87ae148179
commit
f07fe3089c
@ -20,6 +20,16 @@
|
|||||||
#pdf-main .l {
|
#pdf-main .l {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
white-space:pre;
|
white-space:pre;
|
||||||
|
font-size:0;
|
||||||
|
transform-origin:0% 100%;
|
||||||
|
-ms-transform-origin:0% 100%;
|
||||||
|
-moz-transform-origin:0% 100%;
|
||||||
|
-webkit-transform-origin:0% 100%;
|
||||||
|
-o-transform-origin:0% 100%;
|
||||||
|
}
|
||||||
|
#pdf-main span {
|
||||||
|
vertical-align: baseline;
|
||||||
|
line-height:0;
|
||||||
}
|
}
|
||||||
#pdf-main ._ {
|
#pdf-main ._ {
|
||||||
color:transparent;
|
color:transparent;
|
||||||
|
@ -19,11 +19,13 @@ void BackgroundRenderer::drawChar(GfxState *state, double x, double y,
|
|||||||
CharCode code, int nBytes, Unicode *u, int uLen)
|
CharCode code, int nBytes, Unicode *u, int uLen)
|
||||||
{
|
{
|
||||||
auto font = state->getFont();
|
auto font = state->getFont();
|
||||||
|
/*
|
||||||
if((font->getType() == fontType3)
|
if((font->getType() == fontType3)
|
||||||
|| (font->getWMode())
|
|| (font->getWMode())
|
||||||
|| (uLen == 0)
|
|| (uLen == 0)
|
||||||
|| (!all_of(u, u+uLen, isLegalUnicode))
|
|| (!all_of(u, u+uLen, isLegalUnicode))
|
||||||
)
|
)
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
SplashOutputDev::drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen);
|
SplashOutputDev::drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen);
|
||||||
}
|
}
|
||||||
|
@ -31,17 +31,6 @@ void HTMLRenderer::export_remote_font(long long fn_id, const string & suffix, co
|
|||||||
|
|
||||||
allcss_fout << format(")format(\"%1%\");}.f%|2$x|{font-family:f%|2$x|;") % fontfileformat % fn_id;
|
allcss_fout << format(")format(\"%1%\");}.f%|2$x|{font-family:f%|2$x|;") % fontfileformat % fn_id;
|
||||||
|
|
||||||
double a = font->getAscent();
|
|
||||||
double d = font->getDescent();
|
|
||||||
double r = _is_positive(a-d) ? (a/(a-d)) : 1.0;
|
|
||||||
|
|
||||||
for(const string & prefix : {"", "-ms-", "-moz-", "-webkit-", "-o-"})
|
|
||||||
{
|
|
||||||
allcss_fout << prefix << "transform-origin:0% " << (r*100.0) << "%;";
|
|
||||||
}
|
|
||||||
|
|
||||||
allcss_fout << "line-height:" << (a-d) << ";";
|
|
||||||
|
|
||||||
allcss_fout << "}" << endl;
|
allcss_fout << "}" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,17 +63,6 @@ void HTMLRenderer::export_local_font(long long fn_id, GfxFont * font, const stri
|
|||||||
else if(font->isItalic())
|
else if(font->isItalic())
|
||||||
allcss_fout << "font-style:italic;";
|
allcss_fout << "font-style:italic;";
|
||||||
|
|
||||||
double a = font->getAscent();
|
|
||||||
double d = font->getDescent();
|
|
||||||
double r = _is_positive(a-d) ? (a/(a-d)) : 1.0;
|
|
||||||
|
|
||||||
for(const string & prefix : {"", "-ms-", "-moz-", "-webkit-", "-o-"})
|
|
||||||
{
|
|
||||||
allcss_fout << prefix << "transform-origin:0% " << (r*100.0) << "%;";
|
|
||||||
}
|
|
||||||
|
|
||||||
allcss_fout << "line-height:" << (a-d) << ";";
|
|
||||||
|
|
||||||
allcss_fout << "}" << endl;
|
allcss_fout << "}" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ void HTMLRenderer::check_state_change(GfxState * state)
|
|||||||
|
|
||||||
if(!(new_fn_id == cur_fn_id))
|
if(!(new_fn_id == cur_fn_id))
|
||||||
{
|
{
|
||||||
new_line_status = max(new_line_status, LineStatus::DIV);
|
new_line_status = max(new_line_status, LineStatus::SPAN);
|
||||||
cur_fn_id = new_fn_id;
|
cur_fn_id = new_fn_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ void HTMLRenderer::check_state_change(GfxState * state)
|
|||||||
|
|
||||||
if(!(_equal(new_draw_font_size, draw_font_size)))
|
if(!(_equal(new_draw_font_size, draw_font_size)))
|
||||||
{
|
{
|
||||||
new_line_status = max(new_line_status, LineStatus::DIV);
|
new_line_status = max(new_line_status, LineStatus::SPAN);
|
||||||
draw_font_size = new_draw_font_size;
|
draw_font_size = new_draw_font_size;
|
||||||
cur_fs_id = install_font_size(draw_font_size);
|
cur_fs_id = install_font_size(draw_font_size);
|
||||||
}
|
}
|
||||||
@ -328,7 +328,7 @@ void HTMLRenderer::prepare_line(GfxState * state)
|
|||||||
|
|
||||||
// horizontal position
|
// horizontal position
|
||||||
// try to merge with the last line if possible
|
// try to merge with the last line if possible
|
||||||
double target = (cur_tx - draw_tx) * draw_scale;
|
double target = cur_tx - draw_tx;
|
||||||
if(abs(target) < param->h_eps)
|
if(abs(target) < param->h_eps)
|
||||||
{
|
{
|
||||||
// ignore it
|
// ignore it
|
||||||
@ -338,7 +338,7 @@ void HTMLRenderer::prepare_line(GfxState * state)
|
|||||||
// don't close a pending span here, keep the styling
|
// don't close a pending span here, keep the styling
|
||||||
|
|
||||||
double w;
|
double w;
|
||||||
auto wid = install_whitespace(target, w);
|
auto wid = install_whitespace(target * draw_scale, w);
|
||||||
html_fout << format("<span class=\"_ _%|1$x|\">%2%</span>") % wid % (target > 0 ? " " : "");
|
html_fout << format("<span class=\"_ _%|1$x|\">%2%</span>") % wid % (target > 0 ? " " : "");
|
||||||
draw_tx += w / draw_scale;
|
draw_tx += w / draw_scale;
|
||||||
}
|
}
|
||||||
@ -348,33 +348,30 @@ void HTMLRenderer::prepare_line(GfxState * state)
|
|||||||
{
|
{
|
||||||
// have to open a new tag
|
// have to open a new tag
|
||||||
|
|
||||||
if(new_line_status == LineStatus::SPAN)
|
if (new_line_status == LineStatus::DIV)
|
||||||
{
|
|
||||||
html_fout << "<span class=\"";
|
|
||||||
}
|
|
||||||
else if (new_line_status == LineStatus::DIV)
|
|
||||||
{
|
{
|
||||||
// TODO: recheck descent/ascent
|
// TODO: recheck descent/ascent
|
||||||
double x,y; // in user space
|
double x,y; // in user space
|
||||||
state->transform(state->getCurX(), state->getCurY(), &x, &y);
|
state->transform(state->getCurX(), state->getCurY(), &x, &y);
|
||||||
|
|
||||||
html_fout << format("<div style=\"bottom:%1%px;top:%2%px;left:%3%px;\" class=\"l ")
|
html_fout << format("<div style=\"bottom:%1%px;left:%2%px;\" class=\"l t%|3$x|\"><em></em>")
|
||||||
% (y + state->getFont()->getDescent() * draw_font_size)
|
% y % x % cur_tm_id;
|
||||||
% (pageHeight - y - state->getFont()->getAscent() * draw_font_size)
|
|
||||||
% x;
|
|
||||||
|
|
||||||
html_fout << format("t%|1$x| f%|2$x| s%|3$x| ") % cur_tm_id % cur_fn_id % cur_fs_id;
|
}
|
||||||
|
else if(new_line_status == LineStatus::SPAN)
|
||||||
|
{
|
||||||
|
// pass
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
assert(false && "Bad value of new_line_status");
|
assert(false && "Bad value of new_line_status");
|
||||||
}
|
}
|
||||||
|
|
||||||
html_fout << format("c%|1$x| l%|2$x| w%|3$x|") % cur_color_id % cur_ls_id % cur_ws_id;
|
html_fout << format("<span class=\"f%|1$x| s%|2$x| c%|3$x| l%|4$x| w%|5$x|\">")
|
||||||
|
% cur_fn_id % cur_fs_id % cur_color_id % cur_ls_id % cur_ws_id;
|
||||||
|
|
||||||
html_fout << "\">";
|
//line_status = new_line_status;
|
||||||
|
line_status = LineStatus::SPAN;
|
||||||
line_status = new_line_status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user