Skip to content

Commit 6e041d0

Browse files
committed
page cache
1 parent 276ea93 commit 6e041d0

File tree

4 files changed

+39
-8
lines changed

4 files changed

+39
-8
lines changed

pdf2htmlEX/src/CoveredTextDetector.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
namespace pdf2htmlEX {
1616

17-
CoveredTextDetector::CoveredTextDetector(Param & param): param(param)
17+
CoveredTextDetector::CoveredTextDetector(Param & param): param(&param)
1818
{
1919
}
2020

@@ -41,10 +41,10 @@ void CoveredTextDetector::add_char_bbox_clipped(cairo_t *cairo, double * bbox, i
4141
char_pts_visible.push_back(pts_visible);
4242

4343
// DCRH: Hide if no points are visible, or if some points are visible and correct_text_visibility == 2
44-
if (pts_visible == 0 || param.correct_text_visibility == 2) {
44+
if (pts_visible == 0 || param->correct_text_visibility == 2) {
4545
chars_covered.push_back(true);
46-
if (pts_visible > 0 && param.correct_text_visibility == 2) {
47-
param.actual_dpi = std::min(param.text_dpi, param.max_dpi); // Char partially covered so increase background resolution
46+
if (pts_visible > 0 && param->correct_text_visibility == 2) {
47+
param->actual_dpi = std::min(param->text_dpi, param->max_dpi); // Char partially covered so increase background resolution
4848
}
4949
} else {
5050
chars_covered.push_back(false);
@@ -98,13 +98,13 @@ printf("pts_visible=%x\n", pts_visible);
9898
printf("pts_visible=%x\n", pts_visible);
9999
#endif
100100
char_pts_visible[i] = pts_visible;
101-
if (pts_visible == 0 || (pts_visible != (1|2|4|8) && param.correct_text_visibility == 2)) {
101+
if (pts_visible == 0 || (pts_visible != (1|2|4|8) && param->correct_text_visibility == 2)) {
102102
#ifdef DEBUG
103103
printf("Char covered\n");
104104
#endif
105105
chars_covered[i] = true;
106-
if (pts_visible > 0 && param.correct_text_visibility == 2) { // Partially visible text => increase rendering DPI
107-
param.actual_dpi = std::min(param.text_dpi, param.max_dpi);
106+
if (pts_visible > 0 && param->correct_text_visibility == 2) { // Partially visible text => increase rendering DPI
107+
param->actual_dpi = std::min(param->text_dpi, param->max_dpi);
108108
}
109109
}
110110
} else {

pdf2htmlEX/src/CoveredTextDetector.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class CoveredTextDetector
6060
// x00, y00, x01, y01; x10, y10, x11, y11;...
6161
std::vector<double> char_bboxes;
6262
std::vector<int> char_pts_visible;
63-
Param & param;
63+
Param * param;
6464
};
6565

6666
}

pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,11 @@ struct HTMLRenderer : OutputDev
381381

382382
CoveredTextDetector covered_text_detector;
383383
DrawingTracer tracer;
384+
385+
struct PageCache {
386+
CoveredTextDetector covered_text_detector;
387+
};
388+
std::unordered_map<int, PageCache> page_cache;
384389
};
385390

386391
} //namespace pdf2htmlEX

pdf2htmlEX/src/HTMLRenderer/general.cc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,31 @@ void HTMLRenderer::process(PDFDoc *doc)
183183

184184
post_process();
185185

186+
if (param.delay_background == 0)
187+
{
188+
bg_renderer = nullptr;
189+
fallback_bg_renderer = nullptr;
190+
}
191+
186192
if(param.quiet == 0)
187193
cerr << endl;
188194
}
189195

190196
bool HTMLRenderer::renderPage(PDFDoc *doc, int pageno)
191197
{
198+
if (param.delay_background == 0)
199+
{
200+
return false;
201+
}
202+
203+
if (page_cache.find(pageno) != page_cache.end())
204+
{
205+
cerr << "Page number " << pageno << " not found in page cache" << endl;
206+
return false;
207+
}
208+
209+
covered_text_detector = page_cache[pageno].covered_text_detector;
210+
192211
if (bg_renderer->render_page(cur_doc, pageno))
193212
{
194213
return true;
@@ -209,6 +228,13 @@ void HTMLRenderer::setDefaultCTM(const double *ctm)
209228

210229
void HTMLRenderer::startPage(int pageNum, GfxState *state, XRef * xref)
211230
{
231+
if (param.delay_background && this->pageNum > 0)
232+
{
233+
page_cache[this->pageNum] = {
234+
.covered_text_detector = covered_text_detector,
235+
};
236+
}
237+
212238
covered_text_detector.reset();
213239
tracer.reset(state);
214240

0 commit comments

Comments
 (0)