diff --git a/pdf2htmlEX/build.gradle.kts b/pdf2htmlEX/build.gradle.kts
index 9def236..426704e 100644
--- a/pdf2htmlEX/build.gradle.kts
+++ b/pdf2htmlEX/build.gradle.kts
@@ -17,7 +17,7 @@ val portVersion = when(project.findProperty("packageVersion")) {
}
// https://github.com/pdf2htmlEX/pdf2htmlEX/pull/154 Hoping it will be named rc2
else /* "0.18.8.rc2" */ -> {
- version = "0.18.8.rc2-beta-6"
+ version = "0.18.8.rc2-beta-7"
"0.18.8.rc2"
}
}
@@ -120,6 +120,7 @@ tasks.extractSrc {
.patch("cflags.patch")
.patch("missing-tests.patch")
srcDir.patch("make-a-library.patch")
+ srcDir.patch("dump-image.patch")
srcDir.patch("mismatched-tags.patch")
}
}
diff --git a/pdf2htmlEX/patches/0.18.8.rc2/dump-image.patch b/pdf2htmlEX/patches/0.18.8.rc2/dump-image.patch
new file mode 100644
index 0000000..97ec03d
--- /dev/null
+++ b/pdf2htmlEX/patches/0.18.8.rc2/dump-image.patch
@@ -0,0 +1,161 @@
+--- pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.cc 2020-08-19 23:43:25.000000000 +0300
++++ pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.cc 2023-12-27 04:19:36.091000000 +0200
+@@ -18,6 +18,8 @@
+ #include "util/const.h"
+
+ #include "SplashBackgroundRenderer.h"
++#include
++#include
+
+ namespace pdf2htmlEX {
+
+@@ -124,27 +126,39 @@
+
+ void SplashBackgroundRenderer::embed_image(int pageno)
+ {
+- // xmin->xmax is top->bottom
+- int xmin, xmax, ymin, ymax;
+-// poppler-0.84.0 hack to recover from the removal of *ModRegion tracking
+-//
+- auto * bitmap = getBitmap();
+- xmin = 0;
+- xmax = bitmap->getWidth();
+- ymin = 0;
+- ymax = bitmap->getHeight();
+-//
+-// end of hack
+-
++ auto * bitmap = getBitmap();
+ // dump the background image only when it is not empty
+- if((xmin <= xmax) && (ymin <= ymax))
++ if(bitmap->getWidth() >= 0 && bitmap->getHeight() >= 0)
+ {
+ {
+ 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((char*)fn);
++ html_renderer->tmp_files.add((const char *)fn);
+
+- dump_image((char*)fn, xmin, ymin, xmax, ymax);
++ SplashImageFileFormat splashImageFileFormat;
++ if(false) { }
++#ifdef ENABLE_LIBPNG
++ else if(format == "png")
++ {
++ splashImageFileFormat = splashFormatPng;
++ }
++#endif
++#ifdef ENABLE_LIBJPEG
++ else if(format == "jpg")
++ {
++ splashImageFileFormat = splashFormatJpeg;
++ }
++#endif
++ 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;
+@@ -154,10 +168,10 @@
+ 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)
+@@ -182,68 +196,4 @@
+ }
+ }
+
+-// There might be mem leak when exception is thrown !
+-void SplashBackgroundRenderer::dump_image(const char * filename, int x1, int y1, int x2, int y2)
+-{
+- int width = x2 - x1 + 1;
+- int height = y2 - y1 + 1;
+- if((width <= 0) || (height <= 0))
+- throw "Bad metric for background image";
+-
+- FILE * f = fopen(filename, "wb");
+- if(!f)
+- throw string("Cannot open file for background image " ) + filename;
+-
+- // use unique_ptr to auto delete the object upon exception
+- unique_ptr writer;
+-
+- if(false) { }
+-#ifdef ENABLE_LIBPNG
+- else if(format == "png")
+- {
+- writer = unique_ptr(new PNGWriter);
+- }
+-#endif
+-#ifdef ENABLE_LIBJPEG
+- else if(format == "jpg")
+- {
+- writer = unique_ptr(new JpegWriter);
+- }
+-#endif
+- else
+- {
+- throw string("Image format not supported: ") + format;
+- }
+-
+- if(!writer->init(f, width, height, param.actual_dpi, param.actual_dpi))
+- throw "Cannot initialize image writer";
+-
+- auto * bitmap = getBitmap();
+- assert(bitmap->getMode() == splashModeRGB8);
+-
+- SplashColorPtr data = bitmap->getDataPtr();
+- int row_size = bitmap->getRowSize();
+-
+- vector pointers;
+- pointers.reserve(height);
+- SplashColorPtr p = data + y1 * row_size + x1 * 3;
+- for(int i = 0; i < height; ++i)
+- {
+- pointers.push_back(p);
+- p += row_size;
+- }
+-
+- if(!writer->writePointers(pointers.data(), height))
+- {
+- throw "Cannot write background image";
+- }
+-
+- if(!writer->close())
+- {
+- throw "Cannot finish background image";
+- }
+-
+- fclose(f);
+-}
+-
+ } // namespace pdf2htmlEX
+
+--- pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.h 2020-08-19 23:43:25.000000000 +0300
++++ pdf2htmlEX/src/BackgroundRenderer/SplashBackgroundRenderer.h 2023-12-27 04:06:27.693000000 +0200
+@@ -53,7 +53,6 @@
+ void updateRender(GfxState *state);
+
+ protected:
+- void dump_image(const char * filename, int x1, int y1, int x2, int y2);
+ HTMLRenderer * html_renderer;
+ const Param & param;
+ std::string format;