diff --git a/TODO b/TODO index f983f2d..ea3fa14 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,5 @@ optimize font_size & transform matrix tracking -c++ classes for different states +print css for draw/link/image... == Future: == diff --git a/src/HTMLRenderer/HTMLRenderer.h b/src/HTMLRenderer/HTMLRenderer.h index 3a9f0b7..0735e8d 100644 --- a/src/HTMLRenderer/HTMLRenderer.h +++ b/src/HTMLRenderer/HTMLRenderer.h @@ -225,11 +225,6 @@ protected: double default_ctm[6]; - // page info - int pageNum; - double pageWidth ; - double pageHeight ; - /* * The content of each page is first scaled with factor1 (>=1), then scale back with factor2(<=1) * @@ -292,7 +287,9 @@ protected: WordSpaceManager word_space_manager; FillColorManager fill_color_manager; FontSizeManager font_size_manager; + BottomManager bottom_manager; HeightManager height_manager; + WidthManager width_manager; RiseManager rise_manager; LeftManager left_manager; //////////////////////////////////////////////// diff --git a/src/HTMLRenderer/TextLineBuffer.cc b/src/HTMLRenderer/TextLineBuffer.cc index ee16f13..38d0253 100644 --- a/src/HTMLRenderer/TextLineBuffer.cc +++ b/src/HTMLRenderer/TextLineBuffer.cc @@ -85,15 +85,14 @@ void HTMLRenderer::TextLineBuffer::flush(void) ostream & out = renderer->f_pages.fs; renderer->height_manager.install(max_ascent); - renderer->left_manager.install(x); + renderer->left_manager .install(x); + renderer->bottom_manager.install(y); - out << "
left_manager.get_id() - << " " << CSS::HEIGHT_CN << renderer->height_manager.get_id() + out << "
left_manager .get_id() + << " " << CSS::HEIGHT_CN << renderer->height_manager.get_id() + << " " << CSS::BOTTOM_CN << renderer->bottom_manager.get_id() << "\">"; auto cur_state_iter = states.begin(); diff --git a/src/HTMLRenderer/general.cc b/src/HTMLRenderer/general.cc index 7d273b3..07085d4 100644 --- a/src/HTMLRenderer/general.cc +++ b/src/HTMLRenderer/general.cc @@ -61,8 +61,10 @@ HTMLRenderer::HTMLRenderer(const Param * param) word_space_manager .set_eps(EPS); rise_manager .set_eps(param->v_eps); whitespace_manager .set_eps(param->h_eps); - height_manager .set_eps(EPS); left_manager .set_eps(param->h_eps); + height_manager .set_eps(EPS); + width_manager .set_eps(EPS); + bottom_manager .set_eps(EPS); } HTMLRenderer::~HTMLRenderer() @@ -156,18 +158,17 @@ void HTMLRenderer::startPage(int pageNum, GfxState *state) void HTMLRenderer::startPage(int pageNum, GfxState *state, XRef * xref) { - this->pageNum = pageNum; - this->pageWidth = state->getPageWidth(); - this->pageHeight = state->getPageHeight(); - assert((!line_opened) && "Open line in startPage detected!"); + height_manager.install(state->getPageWidth()); + width_maanger.install(state->getPageHeight()); f_pages.fs << "
" - << "
" + << " " << CSS::WIDTH_CN << width_manager.get_id() + << " " << CSS::HEIGHT_CN << height_manager.get_id() + << "\">" + << "
" << "
process_nontext) @@ -189,6 +190,7 @@ void HTMLRenderer::startPage(int pageNum, GfxState *state, XRef * xref) } } + // TODO print css f_pages.fs << ");background-position:0 0;background-size:" << pageWidth << "px " << pageHeight << "px;background-repeat:no-repeat;"; } @@ -348,7 +350,9 @@ void HTMLRenderer::post_process() whitespace_manager .dump_css(f_css.fs); fill_color_manager .dump_css(f_css.fs); font_size_manager .dump_css(f_css.fs); + bottom_manager .dump_css(f_css.fs); height_manager .dump_css(f_css.fs); + width_manager .dump_css(f_css.fs); rise_manager .dump_css(f_css.fs); left_manager .dump_css(f_css.fs); diff --git a/src/HTMLRenderer/state.cc b/src/HTMLRenderer/state.cc index c1e2b32..92ceabb 100644 --- a/src/HTMLRenderer/state.cc +++ b/src/HTMLRenderer/state.cc @@ -109,7 +109,9 @@ void HTMLRenderer::reset_state() whitespace_manager .reset(); fill_color_manager .reset(); font_size_manager .reset(); + bottom_manager .reset(); height_manager .reset(); + width_manager .reset(); rise_manager .reset(); left_manager .reset(); diff --git a/src/util/CSSClassNames.h b/src/util/CSSClassNames.h index 9e9eeb5..98d6140 100644 --- a/src/util/CSSClassNames.h +++ b/src/util/CSSClassNames.h @@ -46,8 +46,10 @@ const char * const LETTER_SPACE_CN = "l"; const char * const WORD_SPACE_CN = "w"; const char * const RISE_CN = "r"; const char * const WHITESPACE_CN = "_"; -const char * const HEIGHT_CN = "h"; const char * const LEFT_CN = "L"; +const char * const HEIGHT_CN = "h"; +const char * const WIDTH_CN = "W"; +const char * const BOTTOM_CN = "B"; const char * const CSS_DRAW_CN = "Cd"; const char * const LINK_CN = "a"; diff --git a/src/util/StateManager.h b/src/util/StateManager.h index 82a6e18..db4a4bc 100644 --- a/src/util/StateManager.h +++ b/src/util/StateManager.h @@ -314,6 +314,22 @@ public: } }; +class WidthManager : public StateManager +{ +public: + static const char * get_css_class_name (void) { return CSS::WIDTH_CN; } + double default_value(void) { return 0; } + void dump_value(std::ostream & out, double value) { out << "width:" << round(value) << "px;"; } +}; + +class BottomManager : public StateManager +{ +public: + static const char * get_css_class_name (void) { return CSS::BOTTOM_CN; } + double default_value(void) { return 0; } + void dump_value(std::ostream & out, double value) { out << "bottom:" << round(value) << "px;"; } +}; + class HeightManager : public StateManager { public: