diff options
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp')
-rw-r--r-- | Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp index 75d83f2b4b6..167ab0bc393 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp @@ -45,7 +45,7 @@ int PsSpecialHandler::SHADING_SEGMENT_SIZE = 20; double PsSpecialHandler::SHADING_SIMPLIFY_DELTA = 0.01; -PsSpecialHandler::PsSpecialHandler () : _psi(this), _actions(), _previewFilter(_psi), _psSection(PS_NONE), _xmlnode(), _savenode() +PsSpecialHandler::PsSpecialHandler () : _psi(this), _actions(), _previewFilter(_psi), _xmlnode(), _savenode() { } @@ -286,14 +286,15 @@ void PsSpecialHandler::imgfile (FileType filetype, const string &fname, const un double lly = (it = attr.find("lly")) != attr.end() ? stod(it->second) : 0; double urx = (it = attr.find("urx")) != attr.end() ? stod(it->second) : 0; double ury = (it = attr.find("ury")) != attr.end() ? stod(it->second) : 0; + int pageno = (it = attr.find("page")) != attr.end() ? stoi(it->second, nullptr, 10) : 1; if (filetype == FileType::PDF && llx == 0 && lly == 0 && urx == 0 && ury == 0) { - _psi.execute("\n("+fname+")@getpdfpagebox "); - if (_pdfpagebox.valid()) { - llx = _pdfpagebox.minX(); - lly = _pdfpagebox.minY(); - urx = _pdfpagebox.maxX(); - ury = _pdfpagebox.maxY(); + BoundingBox pagebox = _psi.pdfPageBox(fname, pageno); + if (pagebox.valid()) { + llx = pagebox.minX(); + lly = pagebox.minY(); + urx = pagebox.maxX(); + ury = pagebox.maxY(); } } @@ -335,11 +336,13 @@ void PsSpecialHandler::imgfile (FileType filetype, const string &fname, const un auto groupNode = util::make_unique<XMLElementNode>("g"); // append following elements to this group _xmlnode = groupNode.get(); _psi.execute( - "\n@beginspecial @setspecial" // enter special environment - "/setpagedevice{@setpagedevice}def" // activate processing of operator "setpagedevice" - "[1 0 0 -1 0 0] setmatrix" // don't apply outer PS transformations - "(" + string(filepath) + ")run " // execute file content - "@endspecial " // leave special environment + "\n@beginspecial @setspecial" // enter special environment + "/setpagedevice{@setpagedevice}def" // activate processing of operator "setpagedevice" + "[1 0 0 -1 0 0] setmatrix" // don't apply outer PS transformations + "/FirstPage "+to_string(pageno)+" def" // set number of fisrt page to convert (PDF only) + "/LastPage "+to_string(pageno)+" def" // set number of last page to convert (PDF only) + "(" + string(filepath) + ")run " // execute file content + "@endspecial " // leave special environment ); if (!groupNode->empty()) { // has anything been drawn? Matrix matrix(1); @@ -421,8 +424,7 @@ void PsSpecialHandler::dviEndPage (unsigned, SpecialActions &actions) { Message::mstream() << " preview package (version " << _previewFilter.version() << ")\n"; // apply page transformations to box extents - Matrix pagetrans; - actions.getPageTransform(pagetrans); + Matrix pagetrans = actions.getPageTransformation(); bool isBaselineHorizontal = transform_box_extents(pagetrans, w, h, d); actions.bbox().lock(); |