List<BoundingBoxPair> readPDFBox(string inputPDFFileName, List<int> pages, string boxname) {
try {
using (var mupdf = new MuPDF(Path.Combine(GetToolsPath(), "mudraw.exe"))) {
if (controller_ != null) controller_.appendOutput("Getting the size of PDFBox...\n");
var rv = new List<BoundingBoxPair>();
var doc = mupdf.Execute<int>("open_document", Path.Combine(workingDir, inputPDFFileName));
if (doc == 0) return null;
foreach (var p in pages) {
if (abort) {
if (controller_ != null) controller_.appendOutput(Properties.Resources.STOPCONVERTMSG + "\n");
return null;
}
int rotate = 0;
BoundingBox box = new BoundingBox(), media = new BoundingBox();
const int repeatTimes = 10;
for (int i = 1; i <= repeatTimes; ++i) {
try {
var page = mupdf.Execute<int>("load_page", doc, p - 1);
media = mupdf.Execute< BoundingBox>("pdfbox_page", page, "media");
box = mupdf.Execute<BoundingBox>("pdfbox_page", page, boxname);
rotate = mupdf.Execute<int>("rotate_page", page);
break;
}
catch (Exception) {
mupdf.ClearError();
if (i == repeatTimes) throw;
}
}
BoundingBox bb;
switch (rotate) {
default:
case 0:
bb = new BoundingBox(box.Left - media.Left, box.Bottom - media.Bottom, box.Right - media.Left, box.Top - media.Bottom);
break;
case 90:
bb = new BoundingBox(box.Bottom - media.Bottom, media.Right - box.Right, box.Top - media.Bottom, media.Right - box.Left);
break;
case 180:
bb = new BoundingBox(media.Right - box.Right, media.Top - box.Top, media.Right - box.Left, media.Top - box.Bottom);
break;
case 270:
bb = new BoundingBox(media.Top - box.Top, box.Left - media.Left, media.Top - box.Bottom, box.Right - media.Left);
break;
}
if (controller_ != null) controller_.appendOutput(bb.ToString() + " (Page " + p + ")\n");
rv.Add(new BoundingBoxPair(bb.HiresBBToBB(), bb));
}
if (controller_ != null) controller_.appendOutput("\n");
return rv;
}
}
catch (Exception e) {
if (controller_ != null) controller_.appendOutput(e.Message + "\n");
#if DEBUG
System.Diagnostics.Debug.WriteLine(e.StackTrace);
#endif
return null;
}
}