summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-09-16 23:50:38 +0200
committerCarl Hetherington <cth@carlh.net>2025-09-19 22:07:00 +0200
commitca96abfcfcbc718dcc6a3d4369e80dd0c59eccb7 (patch)
tree4b2df537050aa558a8765458b43326d4f366080d
parentc47eefbd3eb65215852fa534ff7c16db914c35e5 (diff)
Allow saving of verification reports as PDF (#1823).
-rw-r--r--cscript27
-rw-r--r--platform/osx/make_dmg.sh1
-rw-r--r--platform/windows/wscript1
-rw-r--r--src/tools/dcpomatic_verifier.cc1
-rw-r--r--src/wx/verify_dcp_result_panel.cc15
-rw-r--r--src/wx/verify_dcp_result_panel.h2
-rw-r--r--wscript2
7 files changed, 39 insertions, 10 deletions
diff --git a/cscript b/cscript
index ecc801889..687ad29eb 100644
--- a/cscript
+++ b/cscript
@@ -89,7 +89,8 @@ deb_depends['16.04'].extend(['libboost-filesystem1.58.0',
'libcurl3',
'libxerces-c3.1',
'libxmlsec1',
- 'libxmlsec1-openssl'])
+ 'libxmlsec1-openssl',
+ 'libhpdf-2.2.1'])
deb_depends['18.04'] = copy.deepcopy(deb_depends_base)
deb_depends['18.04'].extend(['libboost-filesystem1.65.1',
@@ -109,7 +110,8 @@ deb_depends['18.04'].extend(['libboost-filesystem1.65.1',
'libxerces-c3.2',
'libnanomsg4',
'libxmlsec1',
- 'libxmlsec1-openssl'])
+ 'libxmlsec1-openssl',
+ 'libhpdf-2.3.0'])
deb_depends['20.04'] = copy.deepcopy(deb_depends_base)
deb_depends['20.04'].extend(['libboost-filesystem1.71.0',
@@ -130,7 +132,8 @@ deb_depends['20.04'].extend(['libboost-filesystem1.71.0',
'libnanomsg5',
'libfmt-dev',
'libxmlsec1',
- 'libxmlsec1-openssl'])
+ 'libxmlsec1-openssl',
+ 'libhpdf-2.3.0'])
deb_depends['22.04'] = copy.deepcopy(deb_depends_base)
deb_depends['22.04'].extend(['libboost-filesystem1.74.0',
@@ -152,7 +155,8 @@ deb_depends['22.04'].extend(['libboost-filesystem1.74.0',
'libdav1d5',
'libfmt8',
'libxmlsec1',
- 'libxmlsec1-openssl'])
+ 'libxmlsec1-openssl',
+ 'libhpdf-2.3.0'])
def debs(boost, icu, x264, zip='4', fmt='9', xmlsec=None):
output = copy.deepcopy(deb_depends_base)
@@ -175,6 +179,7 @@ def debs(boost, icu, x264, zip='4', fmt='9', xmlsec=None):
'libwxgtk3.2-1',
'libwxgtk-gl3.2-1',
'libfmt' + fmt,
+ 'libhpdf-2.3.0',
'libxmlsec1' + (('-' + xmlsec) if xmlsec else ''),
'libxmlsec1-openssl' + (xmlsec if xmlsec else '')])
return output
@@ -202,7 +207,8 @@ deb_depends['11'].extend(['libboost-filesystem1.74.0',
'libxerces-c3.2',
'libnanomsg5',
'libdav1d4',
- 'libfmt7'])
+ 'libfmt7',
+ 'libhpdf-2.3.0'])
deb_depends_gui['11'] = [ 'libxcb-xfixes0',
'libxcb-shape0',
@@ -227,7 +233,8 @@ deb_depends['12'].extend(['libboost-filesystem1.74.0',
'libxerces-c3.2',
'libnanomsg5',
'libfmt9',
- 'libsqlite3-0'])
+ 'libsqlite3-0',
+ 'libhpdf-2.3.0'])
deb_depends_gui['12'] = [ 'libxcb-xfixes0',
'libxcb-shape0',
@@ -251,7 +258,8 @@ deb_depends['13'].extend(['libboost-filesystem1.83.0',
'libxerces-c3.2',
'libnanomsg5',
'libfmt10',
- 'libsqlite3-0'])
+ 'libsqlite3-0',
+ 'libhpdf-2.3.0'])
deb_depends_gui['13'] = [ 'libxcb-xfixes0',
'libxcb-shape0',
@@ -274,7 +282,8 @@ deb_depends['unstable'].extend(['libboost-filesystem1.83.0',
'libcurl4',
'libxerces-c3.2',
'libdav1d7',
- 'libfmt10'])
+ 'libfmt10',
+ 'libhpdf-2.3.0'])
def can_build_disk(target):
# We can build dcpomatic2_disk on platforms that have Boost process and can build the lwext4
@@ -489,7 +498,7 @@ def build_with_cpp17(target):
def dependencies(target, options):
- deps = [('libdcp', 'v1.10.27', {'c++17': build_with_cpp17(target)})]
+ deps = [('libdcp', 'v1.10.28', {'c++17': build_with_cpp17(target)})]
deps.append(('libsub', 'v1.6.53'))
deps.append(('leqm-nrt', '30dcaea1373ac62fba050e02ce5b0c1085797a23'))
deps.append(('rtaudio', 'f619b76'))
diff --git a/platform/osx/make_dmg.sh b/platform/osx/make_dmg.sh
index 79232dd31..d85992349 100644
--- a/platform/osx/make_dmg.sh
+++ b/platform/osx/make_dmg.sh
@@ -222,6 +222,7 @@ function copy_libs {
copy_lib_env libdav1d "$dest"
copy_lib_env libsqlite "$dest"
copy_lib_env libfmt "$dest"
+ copy_lib_env libhpdf "$dest"
}
# @param #1 directory to copy to
diff --git a/platform/windows/wscript b/platform/windows/wscript
index 990414722..5495eb765 100644
--- a/platform/windows/wscript
+++ b/platform/windows/wscript
@@ -198,6 +198,7 @@ File "%static_deps%/bin/libfribidi-0.dll"
File "%static_deps%/bin/libsharpyuv-0.dll"
File "%static_deps%/bin/libsqlite3-0.dll"
File "%static_deps%/bin/libfmt.dll"
+File "%static_deps%/bin/libhpdf.dll"
""", file=f)
if bits == 32:
diff --git a/src/tools/dcpomatic_verifier.cc b/src/tools/dcpomatic_verifier.cc
index f53f99e3d..0e5a7d450 100644
--- a/src/tools/dcpomatic_verifier.cc
+++ b/src/tools/dcpomatic_verifier.cc
@@ -42,6 +42,7 @@
#include "lib/util.h"
#include "lib/variant.h"
#include <dcp/search.h>
+#include <dcp/text_formatter.h>
#include <dcp/verify_report.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/evtloop.h>
diff --git a/src/wx/verify_dcp_result_panel.cc b/src/wx/verify_dcp_result_panel.cc
index 07ae65e84..d65806cf8 100644
--- a/src/wx/verify_dcp_result_panel.cc
+++ b/src/wx/verify_dcp_result_panel.cc
@@ -24,6 +24,9 @@
#include "verify_dcp_result_panel.h"
#include "wx_util.h"
#include "lib/verify_dcp_job.h"
+#include <dcp/html_formatter.h>
+#include <dcp/text_formatter.h>
+#include <dcp/pdf_formatter.h>
#include <dcp/verify.h>
#include <dcp/verify_report.h>
#include <dcp/warnings.h>
@@ -77,6 +80,8 @@ VerifyDCPResultPanel::VerifyDCPResultPanel(wxWindow* parent)
save_sizer->Add(_save_text_report, 0, wxALL, DCPOMATIC_SIZER_GAP);
_save_html_report = new Button(this, _("Save report as HTML..."));
save_sizer->Add(_save_html_report, 0, wxALL, DCPOMATIC_SIZER_GAP);
+ _save_pdf_report = new Button(this, _("Save report as PDF..."));
+ save_sizer->Add(_save_pdf_report, 0, wxALL, DCPOMATIC_SIZER_GAP);
sizer->Add(save_sizer);
SetSizer(sizer);
@@ -85,9 +90,11 @@ VerifyDCPResultPanel::VerifyDCPResultPanel(wxWindow* parent)
_save_text_report->bind(&VerifyDCPResultPanel::save_text_report, this);
_save_html_report->bind(&VerifyDCPResultPanel::save_html_report, this);
+ _save_pdf_report->bind(&VerifyDCPResultPanel::save_pdf_report, this);
_save_text_report->Enable(false);
_save_html_report->Enable(false);
+ _save_pdf_report->Enable(false);
}
@@ -143,6 +150,7 @@ VerifyDCPResultPanel::add(vector<shared_ptr<const VerifyDCPJob>> jobs)
_save_text_report->Enable(true);
_save_html_report->Enable(true);
+ _save_pdf_report->Enable(true);
for (auto type: _types) {
_pages[type]->ExpandAll();
@@ -729,3 +737,10 @@ VerifyDCPResultPanel::save_html_report()
{
save<dcp::HTMLFormatter>(this, char_to_wx("HTML files (*.htm;*html)|*.htm;*.html"), _jobs);
}
+
+
+void
+VerifyDCPResultPanel::save_pdf_report()
+{
+ save<dcp::PDFFormatter>(this, char_to_wx("PDF files (*.pdf)|*.pdf"), _jobs);
+}
diff --git a/src/wx/verify_dcp_result_panel.h b/src/wx/verify_dcp_result_panel.h
index fe75bfe35..ff4f29a1a 100644
--- a/src/wx/verify_dcp_result_panel.h
+++ b/src/wx/verify_dcp_result_panel.h
@@ -41,11 +41,13 @@ private:
std::map<dcp::VerificationNote::Type, int> add(std::shared_ptr<const VerifyDCPJob> job, bool many);
void save_text_report();
void save_html_report();
+ void save_pdf_report();
wxStaticText* _summary;
std::map<dcp::VerificationNote::Type, wxTreeCtrl*> _pages;
Button* _save_text_report;
Button* _save_html_report;
+ Button* _save_pdf_report;
std::vector<std::shared_ptr<const VerifyDCPJob>> _jobs;
diff --git a/wscript b/wscript
index e262c8279..b9ba179bf 100644
--- a/wscript
+++ b/wscript
@@ -398,7 +398,7 @@ def configure(conf):
check_via_pkg_config(conf, 'libdcp-1.0', 'DCP', mandatory=True, static=True, minimum_version=libdcp_version)
conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
conf.env.STLIB_DCP = ['dcp-1.0', 'asdcp-dcpomatic', 'kumu-dcpomatic', 'openjp2']
- conf.env.LIB_DCP = ['glibmm-' + conf.env.GLIBMM_API, 'ssl', 'crypto', 'bz2', 'xslt', 'xerces-c', 'fmt']
+ conf.env.LIB_DCP = ['glibmm-' + conf.env.GLIBMM_API, 'ssl', 'crypto', 'bz2', 'xslt', 'xerces-c', 'fmt', 'hpdf']
else:
check_via_pkg_config(conf, 'libdcp-1.0', 'DCP', mandatory=True, static=False, minimum_version=libdcp_version)
conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]