From f982a6964c75948bb7c8ffc8e893c7674ed223d1 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 28 Feb 2013 22:37:15 +0800 Subject: [PATCH] background image css for print --- share/base.css.in | 2 ++ src/HTMLRenderer/HTMLRenderer.h | 4 ++++ src/HTMLRenderer/general.cc | 40 ++++++++++++++++----------------- src/util/StateManager.h | 37 ++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 20 deletions(-) diff --git a/share/base.css.in b/share/base.css.in index 986caea..f8104b4 100644 --- a/share/base.css.in +++ b/share/base.css.in @@ -109,6 +109,8 @@ -moz-transform-origin:0% 0%; -webkit-transform-origin:0% 0%; -o-transform-origin:0% 0%; + background-position:0 0; + background-repeat:no-repeat; } .@CSS_PAGE_CONTENT_BOX_CN@.opened { /* used by pdf2htmlEX.js, to show/hide pages */ display:block; diff --git a/src/HTMLRenderer/HTMLRenderer.h b/src/HTMLRenderer/HTMLRenderer.h index e2f497b..b079800 100644 --- a/src/HTMLRenderer/HTMLRenderer.h +++ b/src/HTMLRenderer/HTMLRenderer.h @@ -241,6 +241,9 @@ protected: double text_scale_factor1; double text_scale_factor2; + // 1px on screen should be printed as print_scale()pt + double print_scale (void) const { return 96.0 / DEFAULT_DPI / text_zoom_factor(); } + //////////////////////////////////////////////////// // states @@ -294,6 +297,7 @@ protected: RiseManager rise_manager; LeftManager left_manager; //////////////////////////////////////////////// + BGImageSizeManager bgimage_size_manager; // optimize for web // we try to render the final font size directly diff --git a/src/HTMLRenderer/general.cc b/src/HTMLRenderer/general.cc index cda2d5d..23cbc92 100644 --- a/src/HTMLRenderer/general.cc +++ b/src/HTMLRenderer/general.cc @@ -172,12 +172,13 @@ void HTMLRenderer::startPage(int pageNum, GfxState *state, XRef * xref) << "
" - << "
process_nontext) { f_pages.fs << "background-image:url("; - { if(param->single_html) { @@ -192,11 +193,8 @@ void HTMLRenderer::startPage(int pageNum, GfxState *state, XRef * xref) f_pages.fs << str_fmt("p%x.png", pageNum); } } - - // TODO print css - f_pages.fs << ");background-position:0 0;background-size:" - << state->getPageWidth() << "px " - << state->getPageHeight() << "px;background-repeat:no-repeat;"; + f_pages.fs << ");"; + bgimage_size_manager.install(pageNum, state->getPageWidth(), state->getPageHeight()); } f_pages.fs << "\">"; @@ -461,22 +459,24 @@ void HTMLRenderer::dump_css (void) width_manager .dump_css(f_css.fs); rise_manager .dump_css(f_css.fs); left_manager .dump_css(f_css.fs); + bgimage_size_manager.dump_css(f_css.fs); // print css - double print_scale = 96.0 / DEFAULT_DPI / text_zoom_factor(); + double ps = print_scale(); f_css.fs << CSS::PRINT_ONLY << "{" << endl; - transform_matrix_manager.dump_print_css(f_css.fs, print_scale); - letter_space_manager .dump_print_css(f_css.fs, print_scale); - stroke_color_manager .dump_print_css(f_css.fs, print_scale); - word_space_manager .dump_print_css(f_css.fs, print_scale); - whitespace_manager .dump_print_css(f_css.fs, print_scale); - fill_color_manager .dump_print_css(f_css.fs, print_scale); - font_size_manager .dump_print_css(f_css.fs, print_scale); - bottom_manager .dump_print_css(f_css.fs, print_scale); - height_manager .dump_print_css(f_css.fs, print_scale); - width_manager .dump_print_css(f_css.fs, print_scale); - rise_manager .dump_print_css(f_css.fs, print_scale); - left_manager .dump_print_css(f_css.fs, print_scale); + transform_matrix_manager.dump_print_css(f_css.fs, ps); + letter_space_manager .dump_print_css(f_css.fs, ps); + stroke_color_manager .dump_print_css(f_css.fs, ps); + word_space_manager .dump_print_css(f_css.fs, ps); + whitespace_manager .dump_print_css(f_css.fs, ps); + fill_color_manager .dump_print_css(f_css.fs, ps); + font_size_manager .dump_print_css(f_css.fs, ps); + bottom_manager .dump_print_css(f_css.fs, ps); + height_manager .dump_print_css(f_css.fs, ps); + width_manager .dump_print_css(f_css.fs, ps); + rise_manager .dump_print_css(f_css.fs, ps); + left_manager .dump_print_css(f_css.fs, ps); + bgimage_size_manager.dump_print_css(f_css.fs, ps); f_css.fs << "}" << endl; } diff --git a/src/util/StateManager.h b/src/util/StateManager.h index e9415ee..5b3ff33 100644 --- a/src/util/StateManager.h +++ b/src/util/StateManager.h @@ -453,6 +453,43 @@ public: } }; +///////////////////////////////////// +/* + * Manage the background image sizes + * Kind of similar with StateManager, but not exactly the same + * anyway temporarly leave it here + */ +class BGImageSizeManager +{ +public: + void install(int page_no, double width, double height){ + value_map.insert(std::make_pair(page_no, std::make_pair(width, height))); + } + + void dump_css(std::ostream & out) { + for(auto iter = value_map.begin(); iter != value_map.end(); ++iter) + { + const auto & s = iter->second; + out << "." << CSS::PAGE_CONTENT_BOX_CN << iter->first << "{"; + out << "background-size:" << round(s.first) << "px " << round(s.second) << "px;"; + out << "}" << std::endl; + } + } + + void dump_print_css(std::ostream & out, double scale) { + for(auto iter = value_map.begin(); iter != value_map.end(); ++iter) + { + const auto & s = iter->second; + out << "." << CSS::PAGE_CONTENT_BOX_CN << iter->first << "{"; + out << "background-size:" << round(s.first * scale) << "pt " << round(s.second * scale) << "pt;"; + out << "}" << std::endl; + } + } + +private: + std::unordered_map> value_map; +}; + } // namespace pdf2htmlEX #endif //STATEMANAGER_H__