mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 04:50:09 +00:00
draw_scale->draw_text_scale
This commit is contained in:
parent
4090d79eac
commit
779c91f81e
@ -108,8 +108,8 @@ void HTMLRenderer::process(PDFDoc *doc)
|
|||||||
zoom = *min_element(zoom_factors.begin(), zoom_factors.end());
|
zoom = *min_element(zoom_factors.begin(), zoom_factors.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
scale_factor1 = max(zoom, param->font_size_multiplier);
|
text_scale_factor1 = max(zoom, param->font_size_multiplier);
|
||||||
scale_factor2 = zoom / scale_factor1;
|
text_scale_factor2 = zoom / text_scale_factor1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -156,7 +156,8 @@ void HTMLRenderer::process(PDFDoc *doc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
doc->displayPage(this, i, zoom_factor() * DEFAULT_DPI, zoom_factor() * DEFAULT_DPI,
|
doc->displayPage(this, i,
|
||||||
|
text_zoom_factor() * DEFAULT_DPI, text_zoom_factor() * DEFAULT_DPI,
|
||||||
0, true, false, false,
|
0, true, false, false,
|
||||||
nullptr, nullptr, nullptr, nullptr);
|
nullptr, nullptr, nullptr, nullptr);
|
||||||
|
|
||||||
@ -219,7 +220,7 @@ void HTMLRenderer::startPage(int pageNum, GfxState *state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
html_fout << "\">";
|
html_fout << "\">";
|
||||||
draw_scale = 1.0;
|
draw_text_scale = 1.0;
|
||||||
|
|
||||||
cur_font_info = install_font(nullptr);
|
cur_font_info = install_font(nullptr);
|
||||||
cur_font_size = draw_font_size = 0;
|
cur_font_size = draw_font_size = 0;
|
||||||
|
@ -202,7 +202,7 @@ void HTMLRenderer::processLink(AnnotLink * al)
|
|||||||
auto * border = al->getBorder();
|
auto * border = al->getBorder();
|
||||||
if(border)
|
if(border)
|
||||||
{
|
{
|
||||||
border_width = border->getWidth() * zoom_factor();
|
border_width = border->getWidth();
|
||||||
if(border_width > 0)
|
if(border_width > 0)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ void HTMLRenderer::check_state_change(GfxState * state)
|
|||||||
|
|
||||||
bool need_recheck_position = false;
|
bool need_recheck_position = false;
|
||||||
bool need_rescale_font = false;
|
bool need_rescale_font = false;
|
||||||
bool draw_scale_changed = false;
|
bool draw_text_scale_changed = false;
|
||||||
|
|
||||||
// text position
|
// text position
|
||||||
// we've been tracking the text position positively in the update*** functions
|
// we've been tracking the text position positively in the update*** functions
|
||||||
@ -139,31 +139,31 @@ void HTMLRenderer::check_state_change(GfxState * state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw_text_tm, draw_scale
|
// draw_text_tm, draw_text_scale
|
||||||
// depends: font size & ctm & text_ctm & hori scale
|
// depends: font size & ctm & text_ctm & hori scale
|
||||||
if(need_rescale_font)
|
if(need_rescale_font)
|
||||||
{
|
{
|
||||||
double new_draw_text_tm[6];
|
double new_draw_text_tm[6];
|
||||||
memcpy(new_draw_text_tm, cur_text_tm, sizeof(new_draw_text_tm));
|
memcpy(new_draw_text_tm, cur_text_tm, sizeof(new_draw_text_tm));
|
||||||
|
|
||||||
double new_draw_scale = 1.0/scale_factor2 * sqrt(new_draw_text_tm[2] * new_draw_text_tm[2] + new_draw_text_tm[3] * new_draw_text_tm[3]);
|
double new_draw_text_scale = 1.0/text_scale_factor2 * sqrt(new_draw_text_tm[2] * new_draw_text_tm[2] + new_draw_text_tm[3] * new_draw_text_tm[3]);
|
||||||
|
|
||||||
double new_draw_font_size = cur_font_size;
|
double new_draw_font_size = cur_font_size;
|
||||||
if(_is_positive(new_draw_scale))
|
if(_is_positive(new_draw_text_scale))
|
||||||
{
|
{
|
||||||
new_draw_font_size *= new_draw_scale;
|
new_draw_font_size *= new_draw_text_scale;
|
||||||
for(int i = 0; i < 4; ++i)
|
for(int i = 0; i < 4; ++i)
|
||||||
new_draw_text_tm[i] /= new_draw_scale;
|
new_draw_text_tm[i] /= new_draw_text_scale;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_draw_scale = 1.0;
|
new_draw_text_scale = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(_equal(new_draw_scale, draw_scale)))
|
if(!(_equal(new_draw_text_scale, draw_text_scale)))
|
||||||
{
|
{
|
||||||
draw_scale_changed = true;
|
draw_text_scale_changed = true;
|
||||||
draw_scale = new_draw_scale;
|
draw_text_scale = new_draw_text_scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(_equal(new_draw_font_size, draw_font_size)))
|
if(!(_equal(new_draw_font_size, draw_font_size)))
|
||||||
@ -241,28 +241,28 @@ void HTMLRenderer::check_state_change(GfxState * state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// letter space
|
// letter space
|
||||||
// depends: draw_scale
|
// depends: draw_text_scale
|
||||||
if(all_changed || letter_space_changed || draw_scale_changed)
|
if(all_changed || letter_space_changed || draw_text_scale_changed)
|
||||||
{
|
{
|
||||||
double new_letter_space = state->getCharSpace();
|
double new_letter_space = state->getCharSpace();
|
||||||
if(!_equal(cur_letter_space, new_letter_space))
|
if(!_equal(cur_letter_space, new_letter_space))
|
||||||
{
|
{
|
||||||
new_line_state = max(new_line_state, NLS_SPAN);
|
new_line_state = max(new_line_state, NLS_SPAN);
|
||||||
cur_letter_space = new_letter_space;
|
cur_letter_space = new_letter_space;
|
||||||
cur_ls_id = install_letter_space(cur_letter_space * draw_scale);
|
cur_ls_id = install_letter_space(cur_letter_space * draw_text_scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// word space
|
// word space
|
||||||
// depends draw_scale
|
// depends draw_text_scale
|
||||||
if(all_changed || word_space_changed || draw_scale_changed)
|
if(all_changed || word_space_changed || draw_text_scale_changed)
|
||||||
{
|
{
|
||||||
double new_word_space = state->getWordSpace();
|
double new_word_space = state->getWordSpace();
|
||||||
if(!_equal(cur_word_space, new_word_space))
|
if(!_equal(cur_word_space, new_word_space))
|
||||||
{
|
{
|
||||||
new_line_state = max(new_line_state, NLS_SPAN);
|
new_line_state = max(new_line_state, NLS_SPAN);
|
||||||
cur_word_space = new_word_space;
|
cur_word_space = new_word_space;
|
||||||
cur_ws_id = install_word_space(cur_word_space * draw_scale);
|
cur_ws_id = install_word_space(cur_word_space * draw_text_scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,15 +280,15 @@ void HTMLRenderer::check_state_change(GfxState * state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rise
|
// rise
|
||||||
// depends draw_scale
|
// depends draw_text_scale
|
||||||
if(all_changed || rise_changed || draw_scale_changed)
|
if(all_changed || rise_changed || draw_text_scale_changed)
|
||||||
{
|
{
|
||||||
double new_rise = state->getRise();
|
double new_rise = state->getRise();
|
||||||
if(!_equal(cur_rise, new_rise))
|
if(!_equal(cur_rise, new_rise))
|
||||||
{
|
{
|
||||||
new_line_state = max(new_line_state, NLS_SPAN);
|
new_line_state = max(new_line_state, NLS_SPAN);
|
||||||
cur_rise = new_rise;
|
cur_rise = new_rise;
|
||||||
cur_rise_id = install_rise(new_rise * draw_scale);
|
cur_rise_id = install_rise(new_rise * draw_text_scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +333,7 @@ void HTMLRenderer::prepare_text_line(GfxState * state)
|
|||||||
{
|
{
|
||||||
// align horizontal position
|
// align 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) * draw_text_scale;
|
||||||
if(abs(target) < param->h_eps)
|
if(abs(target) < param->h_eps)
|
||||||
{
|
{
|
||||||
// ignore it
|
// ignore it
|
||||||
@ -341,7 +341,7 @@ void HTMLRenderer::prepare_text_line(GfxState * state)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
line_buf.append_offset(target);
|
line_buf.append_offset(target);
|
||||||
draw_tx += target / draw_scale;
|
draw_tx += target / draw_text_scale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -522,7 +522,7 @@ void HTMLRenderer::drawString(GfxState * state, GooString * s)
|
|||||||
if(is_space && (param->space_as_offset))
|
if(is_space && (param->space_as_offset))
|
||||||
{
|
{
|
||||||
// ignore horiz_scaling, as it's merged in CTM
|
// ignore horiz_scaling, as it's merged in CTM
|
||||||
line_buf.append_offset((dx1 * cur_font_size + cur_letter_space + cur_word_space) * draw_scale);
|
line_buf.append_offset((dx1 * cur_font_size + cur_letter_space + cur_word_space) * draw_text_scale);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
12
src/ffw.c
12
src/ffw.c
@ -332,15 +332,11 @@ void ffw_set_widths(int * width_list, int mapping_len, int stretch_narrow, int s
|
|||||||
SplineChar * sc = sf->glyphs[j];
|
SplineChar * sc = sf->glyphs[j];
|
||||||
if(sc == NULL) continue;
|
if(sc == NULL) continue;
|
||||||
|
|
||||||
DBounds bb;
|
if(((sc->width > EPS)
|
||||||
SplineCharFindBounds(sc, &bb);
|
&& (((sc->width > width_list[i] + EPS) && (squeeze_wide))
|
||||||
|
|| ((sc->width < width_list[i] - EPS) && (stretch_narrow)))))
|
||||||
double glyph_width = bb.maxx - bb.minx;
|
|
||||||
if((glyph_width > EPS)
|
|
||||||
&& (((glyph_width > width_list[i] + EPS) && (squeeze_wide))
|
|
||||||
|| ((glyph_width < width_list[i] - EPS) && (stretch_narrow))))
|
|
||||||
{
|
{
|
||||||
real transform[6]; transform[0] = ((double)width_list[i]) / glyph_width;
|
real transform[6]; transform[0] = ((double)width_list[i]) / (sc->width);
|
||||||
transform[3] = 1.0;
|
transform[3] = 1.0;
|
||||||
transform[1] = transform[2] = transform[4] = transform[5] = 0;
|
transform[1] = transform[2] = transform[4] = transform[5] = 0;
|
||||||
FVTrans(cur_fv, sc, transform, NULL, fvt_alllayers | fvt_dontmovewidth);
|
FVTrans(cur_fv, sc, transform, NULL, fvt_alllayers | fvt_dontmovewidth);
|
||||||
|
@ -237,9 +237,9 @@ class HTMLRenderer : public OutputDev
|
|||||||
* factor1 & factor 2 are determined according to zoom and font-size-multiplier
|
* factor1 & factor 2 are determined according to zoom and font-size-multiplier
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
double zoom_factor (void) const { return scale_factor1 * scale_factor2; }
|
double text_zoom_factor (void) const { return text_scale_factor1 * text_scale_factor2; }
|
||||||
double scale_factor1;
|
double text_scale_factor1;
|
||||||
double scale_factor2;
|
double text_scale_factor2;
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
@ -301,11 +301,11 @@ class HTMLRenderer : public OutputDev
|
|||||||
// we try to render the final font size directly
|
// we try to render the final font size directly
|
||||||
// to reduce the effect of ctm as much as possible
|
// to reduce the effect of ctm as much as possible
|
||||||
|
|
||||||
// draw_ctm is cur_ctm scaled by 1/draw_scale,
|
// draw_ctm is cur_ctm scaled by 1/draw_text_scale,
|
||||||
// so everything redenered should be multiplied by draw_scale
|
// so everything redenered should be multiplied by draw_text_scale
|
||||||
double draw_text_tm[6];
|
double draw_text_tm[6];
|
||||||
double draw_font_size;
|
double draw_font_size;
|
||||||
double draw_scale;
|
double draw_text_scale;
|
||||||
|
|
||||||
// the position of next char, in text coords
|
// the position of next char, in text coords
|
||||||
// this is actual position (in HTML), which might be different from cur_tx/ty (in PDF)
|
// this is actual position (in HTML), which might be different from cur_tx/ty (in PDF)
|
||||||
|
Loading…
Reference in New Issue
Block a user