summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/xetexdir/pdfimage.cpp
diff options
context:
space:
mode:
authorJonathan Kew <jfkthame@googlemail.com>2006-07-26 16:19:45 +0000
committerJonathan Kew <jfkthame@googlemail.com>2006-07-26 16:19:45 +0000
commit622bf4a7c90729be28a038c49e4c237ce9f31297 (patch)
tree77466d5c0a89c433bd1c08f4cbeaf410fda7b25c /Build/source/texk/web2c/xetexdir/pdfimage.cpp
parente88aafe4ca4779a73487925dea63e8b55dc5e251 (diff)
added main xetex source directory
git-svn-id: svn://tug.org/texlive/trunk@1920 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/xetexdir/pdfimage.cpp')
-rw-r--r--Build/source/texk/web2c/xetexdir/pdfimage.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/xetexdir/pdfimage.cpp b/Build/source/texk/web2c/xetexdir/pdfimage.cpp
new file mode 100644
index 00000000000..26d1bc79196
--- /dev/null
+++ b/Build/source/texk/web2c/xetexdir/pdfimage.cpp
@@ -0,0 +1,77 @@
+/****************************************************************************\
+ Part of the XeTeX typesetting system
+ copyright (c) 2006 by SIL International
+ written by Jonathan Kew
+
+ This software is distributed under the terms of the Common Public License,
+ version 1.0.
+ For details, see <http://www.opensource.org/licenses/cpl1.0.php> or the file
+ cpl1.0.txt included with the software.
+\****************************************************************************/
+
+#include "pdfimage.h"
+
+#include "PDFDoc.h"
+#include "Catalog.h"
+#include "Page.h"
+#include "GString.h"
+
+#include "XeTeX_ext.h"
+
+int
+pdf_get_rect(char* filename, int page_num, int pdf_box, realrect* box)
+{
+ GString* name = new GString(filename);
+ PDFDoc* doc = new PDFDoc(name);
+
+ if (!doc) {
+ delete name;
+ return -1;
+ }
+
+ /* if the doc got created, it now owns name, so we mustn't delete it! */
+
+ if (!doc->isOk()) {
+ delete doc;
+ return -1;
+ }
+
+ int pages = doc->getNumPages();
+ if (page_num > pages)
+ page_num = pages;
+ if (page_num < 0)
+ page_num = pages + 1 - page_num;
+ if (page_num < 1)
+ page_num = 1;
+
+ Page* page = doc->getCatalog()->getPage(page_num);
+
+ PDFRectangle* r;
+ switch (pdf_box) {
+ default:
+ case pdfbox_crop:
+ r = page->getCropBox();
+ break;
+ case pdfbox_media:
+ r = page->getMediaBox();
+ break;
+ case pdfbox_bleed:
+ r = page->getBleedBox();
+ break;
+ case pdfbox_trim:
+ r = page->getTrimBox();
+ break;
+ case pdfbox_art:
+ r = page->getArtBox();
+ break;
+ }
+
+ box->x = 72 / 72.27 * fmin(r->x1, r->x2);
+ box->y = 72 / 72.27 * fmin(r->y1, r->y2);
+ box->wd = 72 / 72.27 * fabs(r->x2 - r->x1);
+ box->ht = 72 / 72.27 * fabs(r->y2 - r->y1);
+
+ delete doc;
+
+ return 0;
+}