[poppler] utils/pdfinfo.cc

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 4 10:28:52 UTC 2019


 utils/pdfinfo.cc |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

New commits:
commit 78840bb796384942a21f1d99de80cdaaafcd7f58
Author: Thomas Fischer <fischer at unix-ag.uni-kl.de>
Date:   Thu Nov 21 21:19:44 2019 +0100

    pdfinfo: improved paper size recognition
    
    Paper sizes of ISO 216, A Series were originally defined in millimeters.
    For example, A3 is defined to be 297mm x 420mm. However, depending on
    source, the corresponding size in pts may vary between 1190pt and 1191pt
    for the longer edge.
    
    pdfinfo's formula to compute the length of the longer edge of an A3
    paper determines this length to be 1191.82pt. As the error margin so far
    was set to 1pt, A3 papers with edge length of 1190.8pt were not
    recognized as A3.
    
    This patch makes the error margin depending on the paper size, setting
    it at 0.3% of the longer edge's length. For A3 paper, the error marging
    (variable 'isoThreshold') thus becomes 3.58pt.
    
    Accordingly, the threshold for 'letter' paper has been raised from 0.1pt
    to 1pt.

diff --git a/utils/pdfinfo.cc b/utils/pdfinfo.cc
index 7890a75b..59e812a4 100644
--- a/utils/pdfinfo.cc
+++ b/utils/pdfinfo.cc
@@ -27,6 +27,7 @@
 // Copyright (C) 2018 Evangelos Rigas <erigas at rnd2.org>
 // Copyright (C) 2019 Christian Persch <chpe at src.gnome.org>
 // Copyright (C) 2019 Oliver Sander <oliver.sander at tu-dresden.de>
+// Copyright (C) 2019 Thomas Fischer <fischer at unix-ag.uni-kl.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -665,7 +666,7 @@ static void printPdfSubtype(PDFDoc *doc, UnicodeMap *uMap) {
 static void printInfo(PDFDoc *doc, UnicodeMap *uMap, long long filesize, bool multiPage) {
   Page *page;
   char buf[256];
-  double w, h, wISO, hISO;
+  double w, h, wISO, hISO, isoThreshold;
   int pg, i;
   int r;
 
@@ -767,20 +768,22 @@ static void printInfo(PDFDoc *doc, UnicodeMap *uMap, long long filesize, bool mu
     } else {
       printf("Page size:      %g x %g pts", w, h);
     }
-    if ((fabs(w - 612) < 0.1 && fabs(h - 792) < 0.1) ||
-	(fabs(w - 792) < 0.1 && fabs(h - 612) < 0.1)) {
+    if ((fabs(w - 612) < 1 && fabs(h - 792) < 1) ||
+       (fabs(w - 792) < 1 && fabs(h - 612) < 1)) {
       printf(" (letter)");
     } else {
       hISO = sqrt(sqrt(2.0)) * 7200 / 2.54;
       wISO = hISO / sqrt(2.0);
+      isoThreshold = hISO * 0.003; ///< allow for 0.3% error when guessing conformance to ISO 216, A series
       for (i = 0; i <= 6; ++i) {
-	if ((fabs(w - wISO) < 1 && fabs(h - hISO) < 1) ||
-	    (fabs(w - hISO) < 1 && fabs(h - wISO) < 1)) {
+	if ((fabs(w - wISO) < isoThreshold && fabs(h - hISO) < isoThreshold) ||
+	    (fabs(w - hISO) < isoThreshold && fabs(h - wISO) < isoThreshold)) {
 	  printf(" (A%d)", i);
 	  break;
 	}
 	hISO = wISO;
 	wISO /= sqrt(2.0);
+	isoThreshold /= sqrt(2.0);
       }
     }
     printf("\n");


More information about the poppler mailing list