From a5ac6b4d0d7a5c19dfbad44cdef50dffab5bebdb Mon Sep 17 00:00:00 2001 From: Duan Yao Date: Tue, 17 Jun 2014 17:05:01 +0800 Subject: [PATCH] Make SplashBackgroundRenderer working with --process-covered-text --- .../SplashBackgroundRenderer.cc | 8 +++++ .../SplashBackgroundRenderer.h | 1 + src/HTMLRenderer/HTMLRenderer.h | 1 - src/HTMLRenderer/general.cc | 32 ++++++++----------- src/HTMLTextPage.h | 3 ++ 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/BackgroundRenderer/SplashBackgroundRenderer.cc b/src/BackgroundRenderer/SplashBackgroundRenderer.cc index b7dc686..8b70e4c 100644 --- a/src/BackgroundRenderer/SplashBackgroundRenderer.cc +++ b/src/BackgroundRenderer/SplashBackgroundRenderer.cc @@ -88,6 +88,13 @@ void SplashBackgroundRenderer::drawChar(GfxState *state, double x, double y, { SplashOutputDev::drawChar(state,x,y,dx,dy,originX,originY,code,nBytes,u,uLen); } + // If a char is treated as image, it is not subject to cover test + // (see HTMLRenderer::drawString), so don't increase drawn_char_count. + else if (param.process_covered_text) { + if (html_renderer->get_chars_covered()[drawn_char_count]) + SplashOutputDev::drawChar(state,x,y,dx,dy,originX,originY,code,nBytes,u,uLen); + drawn_char_count++; + } } void SplashBackgroundRenderer::beginTextObject(GfxState *state) @@ -122,6 +129,7 @@ static GBool annot_cb(Annot *, void * pflag) { bool SplashBackgroundRenderer::render_page(PDFDoc * doc, int pageno) { + drawn_char_count = 0; bool process_annotation = param.process_annotation; doc->displayPage(this, pageno, param.h_dpi, param.v_dpi, 0, diff --git a/src/BackgroundRenderer/SplashBackgroundRenderer.h b/src/BackgroundRenderer/SplashBackgroundRenderer.h index 11d9534..6646e7b 100644 --- a/src/BackgroundRenderer/SplashBackgroundRenderer.h +++ b/src/BackgroundRenderer/SplashBackgroundRenderer.h @@ -70,6 +70,7 @@ protected: HTMLRenderer * html_renderer; const Param & param; std::string format; + int drawn_char_count; }; } // namespace pdf2htmlEX diff --git a/src/HTMLRenderer/HTMLRenderer.h b/src/HTMLRenderer/HTMLRenderer.h index 4c77c6d..9d47095 100644 --- a/src/HTMLRenderer/HTMLRenderer.h +++ b/src/HTMLRenderer/HTMLRenderer.h @@ -347,7 +347,6 @@ protected: #endif BackgroundRenderer * bg_renderer; BackgroundRenderer * fallback_bg_renderer; - bool fallback_bg_required; struct { std::ofstream fs; diff --git a/src/HTMLRenderer/general.cc b/src/HTMLRenderer/general.cc index c032e0e..9d24c60 100644 --- a/src/HTMLRenderer/general.cc +++ b/src/HTMLRenderer/general.cc @@ -153,12 +153,7 @@ void HTMLRenderer::process(PDFDoc *doc) false, // printing nullptr, nullptr, nullptr, nullptr); - if(param.process_nontext) - { - fallback_bg_required = !bg_renderer->render_page(doc, i); - if (fallback_bg_required && fallback_bg_renderer != nullptr) - fallback_bg_renderer->render_page(doc, i); - } + if(param.split_pages) { @@ -207,13 +202,15 @@ void HTMLRenderer::startPage(int pageNum, GfxState *state, XRef * xref) this->pageNum = pageNum; - double pageWidth = state->getPageWidth(); - double pageHeight = state->getPageHeight(); + html_text_page.set_page_size(state->getPageWidth(), state->getPageHeight()); - html_text_page.set_page_size(pageWidth, pageHeight); + reset_state(); +} + +void HTMLRenderer::endPage() { + long long wid = all_manager.width.install(html_text_page.get_width()); + long long hid = all_manager.height.install(html_text_page.get_height()); - long long wid = all_manager.width.install(pageWidth); - long long hid = all_manager.height.install(pageHeight); (*f_curpage) << "
render_page(cur_doc, pageNum)) bg_renderer->embed_image(pageNum); - else if (fallback_bg_renderer != nullptr) - fallback_bg_renderer->embed_image(pageNum); + else + { + if (fallback_bg_renderer->render_page(cur_doc, pageNum)) + fallback_bg_renderer->embed_image(pageNum); + } } - reset_state(); -} - -void HTMLRenderer::endPage() { // dump all text html_text_page.dump_text(*f_curpage); html_text_page.dump_css(f_css.fs); diff --git a/src/HTMLTextPage.h b/src/HTMLTextPage.h index 7bffec4..ccaa564 100644 --- a/src/HTMLTextPage.h +++ b/src/HTMLTextPage.h @@ -39,6 +39,9 @@ public: void set_page_size(double width, double height); void clip(const HTMLClipState & clip_state); + double get_width() { return page_width; } + double get_height() { return page_height; } + private: void optimize(void);