1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
From 4b045ba2c8b2bda899a7ef77a3a68666d62a8423 Mon Sep 17 00:00:00 2001
From: Volker Krause <vkrause@kde.org>
Date: Fri, 3 Jul 2026 20:52:27 +0200
Subject: [PATCH] Adapt to Poppler 26.08 API changes
---
src/lib/pdf/pdfdocument.cpp | 48 +++++++++++++++++++++++++++----------
1 file changed, 35 insertions(+), 13 deletions(-)
diff --git a/src/lib/pdf/pdfdocument.cpp b/src/lib/pdf/pdfdocument.cpp
index dd37122a..59fa46f2 100644
--- a/src/lib/pdf/pdfdocument.cpp
+++ b/src/lib/pdf/pdfdocument.cpp
@@ -300,12 +300,9 @@ int PdfDocument::fileSize() const
return d->m_pdfData.size();
}
-[[nodiscard]] static QDateTime parsePdfDateTime(const GooString *str)
+template <typename StrT>
+[[nodiscard]] static QDateTime parsePdfDateTime(const StrT &str)
{
- if (!str) {
- return {};
- }
-
int year;
int month;
int day;
@@ -316,7 +313,7 @@ int PdfDocument::fileSize() const
int tzMins;
char tz;
-#if KPOPPLER_VERSION < QT_VERSION_CHECK(26, 3, 90)
+#if KPOPPLER_VERSION < QT_VERSION_CHECK(26, 3, 90) || KPOPPLER_VERSION >= QT_VERSION_CHECK(26, 7, 90)
if (!parseDateString(str, &year, &month, &day, &hour, &min, &sec, &tz, &tzHours, &tzMins)) {
#else
if (!parseDateString(str->toStr(), &year, &month, &day, &hour, &min, &sec, &tz, &tzHours, &tzMins)) {
@@ -341,18 +338,42 @@ int PdfDocument::fileSize() const
QDateTime PdfDocument::creationTime() const
{
+#if KPOPPLER_VERSION < QT_VERSION_CHECK(26, 7, 90)
std::unique_ptr<GooString> dt(d->m_popplerDoc->getDocInfoCreatDate());
- return parsePdfDateTime(dt.get());
+ return dt ? parsePdfDateTime(dt.get()) : QDateTime();
+#else
+ const auto dt = d->m_popplerDoc->getDocInfoCreatDate();
+ return dt ? parsePdfDateTime(*dt) : QDateTime();
+#endif
}
QDateTime PdfDocument::modificationTime() const
{
+#if KPOPPLER_VERSION < QT_VERSION_CHECK(26, 7, 90)
std::unique_ptr<GooString> dt(d->m_popplerDoc->getDocInfoModDate());
- return parsePdfDateTime(dt.get());
+ return dt ? parsePdfDateTime(dt.get()) : QDateTime();
+#else
+ const auto dt = d->m_popplerDoc->getDocInfoModDate();
+ return dt ? parsePdfDateTime(*dt) : QDateTime();
+#endif
}
+#if KPOPPLER_VERSION >= QT_VERSION_CHECK(26, 7, 90)
+[[nodiscard]] static QString fromPdfString(const std::string &s)
+{
+ if (hasUnicodeByteOrderMark(s) || hasUnicodeByteOrderMarkLE(s)) {
+ return QString::fromUtf16(reinterpret_cast<const char16_t*>(s.c_str()), (qsizetype)s.size() / 2);
+ }
+ const auto utf16Data = pdfDocEncodingToUTF16(s);
+ return QString::fromUtf16(reinterpret_cast<const char16_t *>(utf16Data.c_str()), (qsizetype)utf16Data.size() / 2);
+}
-QString gooStringToUnicode(const std::unique_ptr<GooString> &s)
+[[nodiscard]] static QString fromPdfString(const std::optional<std::string> &s)
+{
+ return s ? fromPdfString(*s) : QString();
+}
+#else
+[[nodiscard]] static QString fromPdfString(const std::unique_ptr<GooString> &s)
{
if (!s) {
return {};
@@ -377,25 +398,26 @@ QString gooStringToUnicode(const std::unique_ptr<GooString> &s)
return QString::fromUtf8(s->c_str());
}
+#endif
QString PdfDocument::title() const
{
- return gooStringToUnicode(d->m_popplerDoc->getDocInfoTitle());
+ return fromPdfString(d->m_popplerDoc->getDocInfoTitle());
}
QString PdfDocument::producer() const
{
- return gooStringToUnicode(d->m_popplerDoc->getDocInfoProducer());
+ return fromPdfString(d->m_popplerDoc->getDocInfoProducer());
}
QString PdfDocument::creator() const
{
- return gooStringToUnicode(d->m_popplerDoc->getDocInfoCreator());
+ return fromPdfString(d->m_popplerDoc->getDocInfoCreator());
}
QString PdfDocument::author() const
{
- return gooStringToUnicode(d->m_popplerDoc->getDocInfoAuthor());
+ return fromPdfString(d->m_popplerDoc->getDocInfoAuthor());
}
QVariantList PdfDocument::pagesVariant() const
--
GitLab
|