summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/xbb.c
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2017-08-06 07:02:46 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2017-08-06 07:02:46 +0000
commit0866741b109fde4a874b71685f92220fad324270 (patch)
tree010efc2917d71ebbb867c3321bc454246cc0cb9a /Build/source/texk/dvipdfm-x/xbb.c
parent3eb4bb85f27948534edb085f33601ad8f117b167 (diff)
dvipdfm-x: Support /Rotate page attribute in PDF inclusion (by S. Hirata).
git-svn-id: svn://tug.org/texlive/trunk@44963 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/xbb.c')
-rw-r--r--Build/source/texk/dvipdfm-x/xbb.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/Build/source/texk/dvipdfm-x/xbb.c b/Build/source/texk/dvipdfm-x/xbb.c
index ea453b16109..63d1fcffae4 100644
--- a/Build/source/texk/dvipdfm-x/xbb.c
+++ b/Build/source/texk/dvipdfm-x/xbb.c
@@ -24,6 +24,8 @@
#include <time.h>
#include <string.h>
+#include "dpxutil.h"
+
#include "numbers.h"
#include "system.h"
#include "mem.h"
@@ -32,6 +34,7 @@
#include "pdfobj.h"
#include "pdfdoc.h"
#include "pdfparse.h"
+#include "pdfdraw.h"
#include "bmpimage.h"
#include "jpegimage.h"
@@ -255,6 +258,8 @@ static void do_pdf (FILE *fp, char *filename)
int page_no = Include_Page;
int count;
pdf_rect bbox;
+ pdf_tmatrix matrix;
+ pdf_coord p1, p2, p3, p4;
pf = pdf_open(filename, fp);
if (!pf) {
@@ -262,7 +267,7 @@ static void do_pdf (FILE *fp, char *filename)
return;
}
count = pdf_doc_get_page_count(pf);
- page = pdf_doc_get_page(pf, page_no, PageBox, &bbox, NULL);
+ page = pdf_doc_get_page(pf, page_no, PageBox, &bbox, &matrix, NULL);
pdf_close(pf);
@@ -270,6 +275,24 @@ static void do_pdf (FILE *fp, char *filename)
return;
pdf_release_obj(page);
+
+ /* Image's attribute "bbox" here is affected by /Rotate entry of included
+ * PDF page.
+ */
+ p1.x = bbox.llx; p1.y = bbox.lly;
+ pdf_dev_transform(&p1, &matrix);
+ p2.x = bbox.urx; p2.y = bbox.lly;
+ pdf_dev_transform(&p2, &matrix);
+ p3.x = bbox.urx; p3.y = bbox.ury;
+ pdf_dev_transform(&p3, &matrix);
+ p4.x = bbox.llx; p4.y = bbox.ury;
+ pdf_dev_transform(&p4, &matrix);
+
+ bbox.llx = min4(p1.x, p2.x, p3.x, p4.x);
+ bbox.lly = min4(p1.y, p2.y, p3.y, p4.y);
+ bbox.urx = max4(p1.x, p2.x, p3.x, p4.x);
+ bbox.ury = max4(p1.y, p2.y, p3.y, p4.y);
+
write_xbb(filename, bbox.llx, bbox.lly, bbox.urx, bbox.ury,
pdf_file_get_version(pf), count);
}