Skip bogus d1
operators in Type3-glyphs (issue 14953)
In the `src/display/canvas.js` code the `d1` operator will be used to set the clipping region, and it obviously cannot be empty since that prevents the Type3-glyph from rendering. Also, the patch removes an outdated comment; refer to PR 12718.
This commit is contained in:
parent
61012b931c
commit
5a2899c57e
@ -4463,21 +4463,30 @@ class TranslatedFont {
|
||||
"Type3 glyph shall start with the d1 operator."
|
||||
);
|
||||
}
|
||||
if (isEmptyBBox) {
|
||||
const charBBox = Util.normalizeRect(operatorList.argsArray[0].slice(2)),
|
||||
width = charBBox[2] - charBBox[0],
|
||||
height = charBBox[3] - charBBox[1];
|
||||
|
||||
if (width === 0 || height === 0) {
|
||||
// Skip the d1 operator when its bounds are bogus (fixes issue14953.pdf).
|
||||
operatorList.fnArray.splice(0, 1);
|
||||
operatorList.argsArray.splice(0, 1);
|
||||
} else if (isEmptyBBox) {
|
||||
if (!this._bbox) {
|
||||
this._bbox = [Infinity, Infinity, -Infinity, -Infinity];
|
||||
}
|
||||
const charBBox = Util.normalizeRect(operatorList.argsArray[0].slice(2));
|
||||
|
||||
this._bbox[0] = Math.min(this._bbox[0], charBBox[0]);
|
||||
this._bbox[1] = Math.min(this._bbox[1], charBBox[1]);
|
||||
this._bbox[2] = Math.max(this._bbox[2], charBBox[2]);
|
||||
this._bbox[3] = Math.max(this._bbox[3], charBBox[3]);
|
||||
}
|
||||
let i = 1,
|
||||
|
||||
let i = 0,
|
||||
ii = operatorList.length;
|
||||
while (i < ii) {
|
||||
switch (operatorList.fnArray[i]) {
|
||||
case OPS.setCharWidthAndBounds:
|
||||
break; // Handled above.
|
||||
case OPS.setStrokeColorSpace:
|
||||
case OPS.setFillColorSpace:
|
||||
case OPS.setStrokeColor:
|
||||
|
@ -2652,8 +2652,6 @@ class CanvasGraphics {
|
||||
}
|
||||
|
||||
setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
|
||||
// TODO According to the spec we're also suppose to ignore any operators
|
||||
// that set color or include images while processing this type3 font.
|
||||
this.ctx.rect(llx, lly, urx - llx, ury - lly);
|
||||
this.ctx.clip();
|
||||
this.endPath();
|
||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -49,6 +49,7 @@
|
||||
!issue7426.pdf
|
||||
!issue7439.pdf
|
||||
!issue7847_radial.pdf
|
||||
!issue14953.pdf
|
||||
!issue7446.pdf
|
||||
!issue7492.pdf
|
||||
!issue7544.pdf
|
||||
|
BIN
test/pdfs/issue14953.pdf
Normal file
BIN
test/pdfs/issue14953.pdf
Normal file
Binary file not shown.
@ -2058,6 +2058,12 @@
|
||||
"rounds": 1,
|
||||
"type": "eq"
|
||||
},
|
||||
{ "id": "issue14953",
|
||||
"file": "pdfs/issue14953.pdf",
|
||||
"md5": "dd7d6cb92e58d75a0eb8c0476a3bc64a",
|
||||
"rounds": 1,
|
||||
"type": "eq"
|
||||
},
|
||||
{ "id": "extgstate-text",
|
||||
"file": "pdfs/extgstate.pdf",
|
||||
"md5": "001bb4ec04463a01d93aad748361f049",
|
||||
|
Loading…
Reference in New Issue
Block a user