diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2017-08-06 07:02:46 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2017-08-06 07:02:46 +0000 |
commit | 0866741b109fde4a874b71685f92220fad324270 (patch) | |
tree | 010efc2917d71ebbb867c3321bc454246cc0cb9a /Build/source/texk/dvipdfm-x/xbb.c | |
parent | 3eb4bb85f27948534edb085f33601ad8f117b167 (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.c | 25 |
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); } |