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__