diff --git a/pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.cc b/pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.cc
index de965e16..83ee758b 100644
--- a/pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.cc
+++ b/pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.cc
@@ -111,66 +111,54 @@ bool SplashBackgroundRenderer::render_page(PDFDoc * doc, int pageno)
(!(param.use_cropbox)),
false, false,
nullptr, nullptr, &annot_cb, &process_annotation);
+
+ auto * bitmap = getBitmap();
+
+ auto fn = html_renderer->str_fmt("%s/bg%x.%s", (param.embed_image ? param.tmp_dir : param.dest_dir).c_str(), pageno, format.c_str());
+ if(param.embed_image)
+ html_renderer->tmp_files.add((const char *)fn);
+
+ SplashImageFileFormat splashImageFileFormat;
+ if(format == "png")
+ splashImageFileFormat = splashFormatPng;
+ else if(format == "jpg")
+ splashImageFileFormat = splashFormatJpeg;
+ else
+ throw string("Image format not supported: ") + format;
+
+ SplashError e = bitmap->writeImgFile(splashImageFileFormat, (const char *)fn, param.actual_dpi, param.actual_dpi);
+ if (e != splashOk)
+ throw string("Cannot write background image. SplashErrorCode: ") + std::to_string(e);
+
return true;
}
void SplashBackgroundRenderer::embed_image(int pageno)
{
- auto * bitmap = getBitmap();
- // dump the background image only when it is not empty
- if(bitmap->getWidth() >= 0 && bitmap->getHeight() >= 0)
+ auto & f_page = *(html_renderer->f_curpage);
+
+ f_page << "
str_fmt("%s/bg%x.%s", param.tmp_dir.c_str(), pageno, format.c_str());
+ ifstream fin((char*)path, ifstream::binary);
+ if(!fin)
+ throw string("Cannot read background image ") + (char*)path;
+
+ auto iter = FORMAT_MIME_TYPE_MAP.find(format);
+ if(iter == FORMAT_MIME_TYPE_MAP.end())
+ throw string("Image format not supported: ") + format;
+
+ string mime_type = iter->second;
+ f_page << "data:" << mime_type << ";base64," << Base64Stream(fin);
+ }
+ else
{
- {
- auto fn = html_renderer->str_fmt("%s/bg%x.%s", (param.embed_image ? param.tmp_dir : param.dest_dir).c_str(), pageno, format.c_str());
- if(param.embed_image)
- html_renderer->tmp_files.add((const char *)fn);
-
- SplashImageFileFormat splashImageFileFormat;
- if(format == "png")
- splashImageFileFormat = splashFormatPng;
- else if(format == "jpg")
- splashImageFileFormat = splashFormatJpeg;
- else
- throw string("Image format not supported: ") + format;
-
- SplashError e = bitmap->writeImgFile(splashImageFileFormat, (const char *)fn, param.actual_dpi, param.actual_dpi);
- if (e != splashOk)
- throw string("Cannot write background image. SplashErrorCode: ") + std::to_string(e);
- }
-
- double h_scale = html_renderer->text_zoom_factor() * DEFAULT_DPI / param.actual_dpi;
- double v_scale = html_renderer->text_zoom_factor() * DEFAULT_DPI / param.actual_dpi;
-
- auto & f_page = *(html_renderer->f_curpage);
- auto & all_manager = html_renderer->all_manager;
-
- f_page << "
getWidth())
- << " " << CSS::HEIGHT_CN << all_manager.height.install(v_scale * bitmap->getHeight())
- << "\" alt=\"\" src=\"";
-
- if(param.embed_image)
- {
- auto path = html_renderer->str_fmt("%s/bg%x.%s", param.tmp_dir.c_str(), pageno, format.c_str());
- ifstream fin((char*)path, ifstream::binary);
- if(!fin)
- throw string("Cannot read background image ") + (char*)path;
-
- auto iter = FORMAT_MIME_TYPE_MAP.find(format);
- if(iter == FORMAT_MIME_TYPE_MAP.end())
- throw string("Image format not supported: ") + format;
-
- string mime_type = iter->second;
- f_page << "data:" << mime_type << ";base64," << Base64Stream(fin);
- }
- else
- {
- f_page << (char*)html_renderer->str_fmt("bg%x.%s", pageno, format.c_str());
- }
- f_page << "\"/>";
+ f_page << (char*)html_renderer->str_fmt("bg%x.%s", pageno, format.c_str());
}
+ f_page << "\"/>";
}
} // namespace pdf2htmlEX
diff --git a/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h b/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h
index 6f2c24c9..984b1d7d 100644
--- a/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h
+++ b/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h
@@ -80,6 +80,8 @@ struct HTMLRenderer : OutputDev
void process(PDFDoc * doc);
+ bool renderPage(PDFDoc * doc, int pageno);
+
////////////////////////////////////////////////////
// OutputDev interface
////////////////////////////////////////////////////
diff --git a/pdf2htmlEX/src/HTMLRenderer/general.cc b/pdf2htmlEX/src/HTMLRenderer/general.cc
index 7d43d130..62d96e19 100644
--- a/pdf2htmlEX/src/HTMLRenderer/general.cc
+++ b/pdf2htmlEX/src/HTMLRenderer/general.cc
@@ -190,6 +190,21 @@ void HTMLRenderer::process(PDFDoc *doc)
cerr << endl;
}
+bool HTMLRenderer::renderPage(PDFDoc *doc, int pageno)
+{
+ if (bg_renderer->render_page(cur_doc, pageNum))
+ {
+ return true;
+ }
+ else if (fallback_bg_renderer)
+ {
+ if (fallback_bg_renderer->render_page(cur_doc, pageNum))
+ return true;
+ }
+
+ return false;
+}
+
void HTMLRenderer::setDefaultCTM(const double *ctm)
{
memcpy(default_ctm, ctm, sizeof(default_ctm));
@@ -243,14 +258,21 @@ void HTMLRenderer::endPage() {
if(param.process_nontext)
{
- if (bg_renderer->render_page(cur_doc, pageNum))
+ if (param.delay_background)
{
bg_renderer->embed_image(pageNum);
}
- else if (fallback_bg_renderer)
+ else
{
- if (fallback_bg_renderer->render_page(cur_doc, pageNum))
- fallback_bg_renderer->embed_image(pageNum);
+ if (bg_renderer->render_page(cur_doc, pageNum))
+ {
+ bg_renderer->embed_image(pageNum);
+ }
+ else if (fallback_bg_renderer)
+ {
+ if (fallback_bg_renderer->render_page(cur_doc, pageNum))
+ fallback_bg_renderer->embed_image(pageNum);
+ }
}
}
diff --git a/pdf2htmlEX/src/Param.h b/pdf2htmlEX/src/Param.h
index 859c78b7..b382b96f 100644
--- a/pdf2htmlEX/src/Param.h
+++ b/pdf2htmlEX/src/Param.h
@@ -46,6 +46,7 @@ struct Param
int printing;
int fallback;
int tmp_file_size_limit;
+ int delay_background;
// fonts
int embed_external_font;