Skip to content

Commit 4f79862

Browse files
committed
Fix ppageno which should be zero-based and add minimal logic to handle incorrect 1-based ppageno
1 parent 43baf89 commit 4f79862

4 files changed

Lines changed: 18 additions & 6 deletions

File tree

gtk/src/hocr/HOCRDocument.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,12 @@ HOCRPage::HOCRPage(const xmlpp::Element* element, int pageId, const Glib::ustrin
11961196
m_titleAttrs["ppageno"] = m_titleAttrs["pageno"];
11971197
m_titleAttrs.erase(m_titleAttrs.find("pageno"));
11981198
}
1199+
m_pageNr += 1;
1200+
// Hacky fix, at least for non-pdf sources, for older gImageReader versions which incorrectly stored one-based ppageno
1201+
if (!Utils::string_endswith(m_sourceFile.lowercase(), ".pdf") && m_pageNr != 1) {
1202+
m_pageNr = 1;
1203+
}
1204+
11991205
m_angle = std::atof(m_titleAttrs["rot"].c_str());
12001206
m_resolution = std::atoi(m_titleAttrs["scan_res"].c_str());
12011207
if (m_resolution == 0) {

gtk/src/hocr/OutputEditorHOCR.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ void OutputEditorHOCR::HOCRBatchProcessor::appendOutput(std::ostream& dev, tesse
277277
std::map<Glib::ustring, Glib::ustring> attrs = HOCRItem::deserializeAttrGroup(pageDiv->get_attribute_value("title"));
278278
// This works because in batch mode the output is created next to the source image
279279
attrs["image"] = Glib::ustring::compose("'%1'", Glib::path_get_basename(pageInfos.filename));
280-
attrs["ppageno"] = Glib::ustring::compose("%1", pageInfos.page);
280+
attrs["ppageno"] = Glib::ustring::compose("%1", pageInfos.page - 1);
281281
attrs["rot"] = Glib::ustring::compose("%1", pageInfos.angle);
282282
attrs["scan_res"] = Glib::ustring::compose("%1", pageInfos.resolution);
283283
pageDiv->set_attribute("title", HOCRItem::serializeAttrGroup(attrs));
@@ -554,7 +554,7 @@ void OutputEditorHOCR::addPage(const Glib::ustring& hocrText, HOCRReadSessionDat
554554
}
555555
std::map<Glib::ustring, Glib::ustring> attrs = HOCRItem::deserializeAttrGroup(pageDiv->get_attribute_value("title"));
556556
attrs["image"] = Glib::ustring::compose("'%1'", data.pageInfo.filename);
557-
attrs["ppageno"] = Glib::ustring::compose("%1", data.pageInfo.page);
557+
attrs["ppageno"] = Glib::ustring::compose("%1", data.pageInfo.page - 1);
558558
attrs["rot"] = Glib::ustring::compose("%1", data.pageInfo.angle);
559559
attrs["scan_res"] = Glib::ustring::compose("%1", data.pageInfo.resolution);
560560
pageDiv->set_attribute("title", HOCRItem::serializeAttrGroup(attrs));

qt/src/hocr/HOCRDocument.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,13 +1064,19 @@ HOCRPage::HOCRPage(const QDomElement& element, int pageId, const QString& defaul
10641064
m_attrs["id"] = QString("page_%1").arg(pageId);
10651065

10661066
m_sourceFile = m_titleAttrs["image"].replace(QRegularExpression("^['\"]"), "").replace(QRegularExpression("['\"]$"), "");
1067-
m_pageNr = m_titleAttrs["ppageno"].toInt();
1067+
bool ok = false;
1068+
m_pageNr = m_titleAttrs["ppageno"].toInt(&ok);
10681069
// Code to handle pageno -> ppageno typo in previous versions of gImageReader
1069-
if (m_pageNr == 0) {
1070+
if (ok == false) {
10701071
m_pageNr = m_titleAttrs["pageno"].toInt();
10711072
m_titleAttrs["ppageno"] = m_titleAttrs["pageno"];
10721073
m_titleAttrs.remove("pageno");
10731074
}
1075+
m_pageNr += 1;
1076+
// Hacky fix, at least for non-pdf sources, for older gImageReader versions which incorrectly stored one-based ppageno
1077+
if (!m_sourceFile.endsWith(".pdf", Qt::CaseInsensitive) && m_pageNr != 1) {
1078+
m_pageNr = 1;
1079+
}
10741080
m_angle = m_titleAttrs["rot"].toDouble();
10751081
m_resolution = m_titleAttrs.value("scan_res", "100").toInt();
10761082

qt/src/hocr/OutputEditorHOCR.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ void OutputEditorHOCR::HOCRBatchProcessor::appendOutput(QIODevice* dev, tesserac
267267
QMap<QString, QString> attrs = HOCRItem::deserializeAttrGroup(pageDiv.attribute("title"));
268268
// This works because in batch mode the output is created next to the source image
269269
attrs["image"] = QString("'./%1'").arg(QFileInfo(pageInfos.filename).fileName());
270-
attrs["ppageno"] = QString::number(pageInfos.page);
270+
attrs["ppageno"] = QString::number(pageInfos.page - 1);
271271
attrs["rot"] = QString::number(pageInfos.angle);
272272
attrs["scan_res"] = QString::number(pageInfos.resolution);
273273
pageDiv.setAttribute("title", HOCRItem::serializeAttrGroup(attrs));
@@ -436,7 +436,7 @@ void OutputEditorHOCR::addPage(const QString& hocrText, HOCRReadSessionData data
436436
QDomElement pageDiv = doc.firstChildElement("div");
437437
QMap<QString, QString> attrs = HOCRItem::deserializeAttrGroup(pageDiv.attribute("title"));
438438
attrs["image"] = QString("'%1'").arg(data.pageInfo.filename);
439-
attrs["ppageno"] = QString::number(data.pageInfo.page);
439+
attrs["ppageno"] = QString::number(data.pageInfo.page - 1);
440440
attrs["rot"] = QString::number(data.pageInfo.angle);
441441
attrs["scan_res"] = QString::number(data.pageInfo.resolution);
442442
pageDiv.setAttribute("title", HOCRItem::serializeAttrGroup(attrs));

0 commit comments

Comments
 (0)