From 31e13515f5d00f6d578623cec5ad4515bd19142e Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Sat, 27 Nov 2021 17:34:05 +0100 Subject: [PATCH] XFA - Draw arcs correctly - it aims to fix #14315; - take into account the startAngle to compute the coordinates of the final point. --- src/core/xfa/template.js | 8 ++++---- test/pdfs/.gitignore | 1 + test/pdfs/xfa_issue14315.pdf | Bin 0 -> 11568 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 test/pdfs/xfa_issue14315.pdf diff --git a/src/core/xfa/template.js b/src/core/xfa/template.js index 251af54df..c3f0f65cc 100644 --- a/src/core/xfa/template.js +++ b/src/core/xfa/template.js @@ -475,7 +475,7 @@ class Arc extends XFAObject { }, }; - if (this.startAngle === 0 && this.sweepAngle === 360) { + if (this.sweepAngle === 360) { arc = { name: "ellipse", attributes: { @@ -490,12 +490,12 @@ class Arc extends XFAObject { } else { const startAngle = (this.startAngle * Math.PI) / 180; const sweepAngle = (this.sweepAngle * Math.PI) / 180; - const largeArc = this.sweepAngle - this.startAngle > 180 ? 1 : 0; + const largeArc = this.sweepAngle > 180 ? 1 : 0; const [x1, y1, x2, y2] = [ 50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), - 50 * (1 + Math.cos(sweepAngle)), - 50 * (1 - Math.sin(sweepAngle)), + 50 * (1 + Math.cos(startAngle + sweepAngle)), + 50 * (1 - Math.sin(startAngle + sweepAngle)), ]; arc = { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 1e0488f11..889b2a104 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -489,3 +489,4 @@ !issue14267.pdf !PDFBOX-4352-0.pdf !REDHAT-1531897-0.pdf +!xfa_issue14315.pdf diff --git a/test/pdfs/xfa_issue14315.pdf b/test/pdfs/xfa_issue14315.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3dde6e3d27096e07614848c02661c67d01cba305 GIT binary patch literal 11568 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 z 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 iGqVUk{~Ip-`i2)Pcu}F!aycw*LjK5g8`{ literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 1bd10bd55..de7967d98 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1037,6 +1037,13 @@ "lastPage": 1, "type": "eq" }, + { "id": "xfa_issue14315", + "file": "pdfs/xfa_issue14315.pdf", + "md5": "e239710875f9dea72fd94c20672a29e1", + "rounds": 1, + "enableXfa": true, + "type": "eq" + }, { "id": "xfa_issue14071", "file": "pdfs/xfa_issue14071.pdf", "md5": "7ef09705091602668ce22086c83a90f3",