@@ -29,6 +29,10 @@ namespace pdflib
2929
3030 std::pair<double , double > rotate (int angle);
3131
32+ private:
33+
34+ std::array<double , 4 > normalize_page_boundaries (std::array<double , 4 > bbox, std::string name);
35+
3236 private:
3337
3438 bool initialised;
@@ -154,6 +158,33 @@ namespace pdflib
154158
155159 return delta;
156160 }
161+
162+ std::array<double , 4 > pdf_resource<PAGE_DIMENSION>::normalize_page_boundaries(std::array<double , 4 > bbox, std::string name)
163+ {
164+ LOG_S (INFO) << __FUNCTION__;
165+
166+ double llx = std::min (bbox[0 ], bbox[2 ]);
167+ double lly = std::min (bbox[1 ], bbox[3 ]);
168+ double urx = std::max (bbox[0 ], bbox[2 ]);
169+ double ury = std::max (bbox[1 ], bbox[3 ]);
170+
171+ if (urx<llx)
172+ {
173+ LOG_S (ERROR) << " we have a malformed page-boundary for " << name << " -> llx: " << llx << " , urx: " << urx;
174+ }
175+
176+ if (ury<lly)
177+ {
178+ LOG_S (ERROR) << " we have a malformed page-boundary for " << name << " -> lly: " << lly << " , ury: " << ury;
179+ }
180+
181+ bbox[0 ] = llx;
182+ bbox[1 ] = lly;
183+ bbox[2 ] = urx;
184+ bbox[3 ] = ury;
185+
186+ return bbox;
187+ }
157188
158189 bool pdf_resource<PAGE_DIMENSION>::init_from(nlohmann::json& data)
159190 {
@@ -324,6 +355,12 @@ namespace pdflib
324355 LOG_S (ERROR) << ss.str ();
325356 throw std::logic_error (ss.str ());
326357 }
358+
359+ crop_bbox = normalize_page_boundaries (crop_bbox, " crop_bbox" );
360+ media_bbox = normalize_page_boundaries (media_bbox, " media_bbox" );
361+ art_bbox = normalize_page_boundaries (art_bbox, " art_bbox" );
362+ bleed_bbox = normalize_page_boundaries (bleed_bbox, " bleed_bbox" );
363+ trim_bbox = normalize_page_boundaries (trim_bbox, " trim_bbox" );
327364 }
328365
329366}
0 commit comments