From 7a251b206e1aca51dea3e058692f75abebd89663 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Tue, 29 Apr 2025 18:27:07 +0200 Subject: [PATCH] Fix the bbox when saving a rotated text field (bug 1963407) --- src/core/annotation.js | 6 +++++- test/pdfs/.gitignore | 1 + test/pdfs/bug1963407.pdf | Bin 0 -> 6483 bytes test/test_manifest.json | 14 ++++++++++++++ test/unit/annotation_spec.js | 4 ++-- 5 files changed, 22 insertions(+), 3 deletions(-) create mode 100755 test/pdfs/bug1963407.pdf diff --git a/src/core/annotation.js b/src/core/annotation.js index a1a7a76a6..3bdf9b788 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -2248,7 +2248,11 @@ class WidgetAnnotation extends Annotation { const appearanceDict = (appearanceStream.dict = new Dict(xref)); appearanceDict.set("Subtype", Name.get("Form")); appearanceDict.set("Resources", resources); - appearanceDict.set("BBox", [0, 0, this.width, this.height]); + const bbox = + rotation % 180 === 0 + ? [0, 0, this.width, this.height] + : [0, 0, this.height, this.width]; + appearanceDict.set("BBox", bbox); const rotationMatrix = this.getRotationMatrix(annotationStorage); if (rotationMatrix !== IDENTITY_MATRIX) { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 7d5ba5fc3..189aa8b1e 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -723,3 +723,4 @@ !issue18529.pdf !issue16742.pdf !chrome-text-selection-markedContent.pdf +!bug1963407.pdf diff --git a/test/pdfs/bug1963407.pdf b/test/pdfs/bug1963407.pdf new file mode 100755 index 0000000000000000000000000000000000000000..d76c16e1c0c3506962a307ad627a3453e1a6ca79 GIT binary patch literal 6483 zcmeHLd2~}%8c(4uHKZ&BfyxN4LApqix8`M`4YWx^TN=7Tg<44R^3sMTc_DeFDT{)# zyTAYrQWyl(q8$;cwvK{AwV)JAS3p1k%ZLo1fGC?N-j}3Jkl+mGjOWZBzWc4e z`@8pk?;Dw|(TY(C89B1^baQ(oAC*D~#2BYXCMLp}7CUWlT4vEE2!%5tl91zY7KF;+ zR0t(7IXnS8&WA`;hQn!4Aw)=V2qk4jDpe$HH*q$gV4p}nhWdSIXo@k>*#@W01w5)5 zYnjdNf(SUkFB#mdr7SZg(~v{waA*Ayn=aJ`X?xVI-Vi;h^Csa%nSMP>4bpgaQa$ ztdlm_BKajJj7C#Gz22x_77`_>8T-r($r5>(@cH=-OmcXvcF_%Ja=13)@+&ji$IRpP zw++^yqdAI zw4ECx9%E`J<49rLg@^=7@BC zehxp_8Y=vm1fiPN;&cIg6x|u17&sc!E+E>b6!WM^VAuScz1usTA##@g0@+gCTj zn|{?x2i7D&b8c4uqwpl}Oe|jXlW@g?Z7r4W9_;mb^FNo(UU_YtE9F!DS@G7jUq6bmd6+_lL$sFV7(k%q90L2=1JGUN8T z4~ctcChy9O#HD|f*__o)_Tz})vuS&>kiF@xRb%@@g-N2_Exgj%C5s;|Sz5QSaZ>ei z>(Tb*g9aSgQgmU(t=nnKj896IrRMx?Pg8aLn$!=bJX~IWDZ1y}GW7z+w0z(TDQ|>- z^Ir6^oZ9%OcK5ux`qN75@K-Q3>P38?}AMV?fbXvL>x-ja*k=yh|UHghH z$vM|Q*!j${_P>tZRNgcG^u%*R$3H!G$C8ZxYtFW{Y|i><&%pXx`$pNNC!;pkR4zLt z-WfMIVf+5v8M7m|em3HA#o_F@(u8OB){T7nsed2qF}bu)edxxi)Y*B9ZcTsdbVG|f zztu6?hLKxpI~w}#Usv~B%et5_`HJO#A0N_7Y;)YKT#QFYe>5b;eE!oht}{PIFCQlT z>Fmjk=$C`%^qqOZF|Gd9=g*}M9oFeyR50VxZqY*h?qwbQLzmua+O~P;)Uhw^JUzT% z098MWV8kJeSZq#yn0+;xMk zh4pL3-^e(XacX*a!GPKUO%sS6Yt1rC^%wQeu0HtCzb8&_@Q z?a(2-*v9WR1tB(f)7-hmahxQ&&)+9>ncgF?>zecL|HLtFhk+`kS;$BiTkJ`~i#v7+ zA&V(VSRmCQI)|Drv82s%(s{Ecipler1#30*d%W}Gynkf34;K~QkzNl2O0gqUR_a5rK&jF2#jicy6U zLzUpN_I-pZuGC0$n#{^vjn?N6jFN;UEbCChaCv#Tq#Tzp&SDrn39R=)^U_Mt)9?K6ii!b8&?ScJv68uz*MK}Rt@UTW(%t62*BeGJum^>;X#!Q zrV@rK_XBx{B3B_94Qw(eQ@}V&%~qz|o3Lj+IE28efQXek#$+*9Xh8L$0?Q~BBZL@J z0e zF1rD`0d_$qN`Q;0jG~?YEnIi#1laNsQVC)NWI_|+J0Ap*oJl)f08bUzQGV&Jhd%j4 znA_t4d)|AXc%Fh21)OGZ_i+}$Z7;+BlwW@$e~Njp(FacM3)}~AJ%H=J5V$Yl2kd$P z*L@*yU&0UA^*@7)?|&fz&CeuZIe6U(^1{V+X#Z0uLE6+^?Iyo%b?>&L%{3bx23&<^=JRM|LSdu zbw`7OH!V-={9fVYc*Buo=tTPtG`rG8p!ZUPaiu+izC#eQIs$DYkz5&)ePqEKjc}VI zb6-}*L`SBiF)Krq6A|B7u%s2iTXl`1rLFl0b_nmlF$5(KbzE!8sz+KIc6SW43$vLF zi}Ufz+GC!)qGuznASiQvZXe437mfP6d-Kw}JMyU1*Xq1?N1oRsR(m)>kSTcn{du8R zbWnX^MCaA{ONNd;I(YefQFyp^Nd5J`3-^b1Vi*ssdiqNdu|d!Y=*pug+1;1_4K4fb A&;S4c literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 2ffe7549f..2e90ee9bd 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -12093,5 +12093,19 @@ "md5": "98b19e944339c01c10c503685eee3ad2", "rounds": 1, "type": "eq" + }, + { + "id": "bug1963407", + "file": "pdfs/bug1963407.pdf", + "md5": "49d3d2dd42014d978af6e6ad814e5e64", + "rounds": 1, + "type": "eq", + "save": true, + "print": true, + "annotationStorage": { + "24R": { + "value": "Hello World" + } + } } ] diff --git a/test/unit/annotation_spec.js b/test/unit/annotation_spec.js index a75747b20..1879ac1a8 100644 --- a/test/unit/annotation_spec.js +++ b/test/unit/annotation_spec.js @@ -2257,7 +2257,7 @@ describe("annotation", function () { ); expect(newData.data).toEqual( "2 0 obj\n<< /Subtype /Form /Resources " + - "<< /Font << /Helv 314 0 R>>>> /BBox [0 0 32 10] /Matrix [0 1 -1 0 32 0] /Length 74>> stream\n" + + "<< /Font << /Helv 314 0 R>>>> /BBox [0 0 10 32] /Matrix [0 1 -1 0 32 0] /Length 74>> stream\n" + "/Tx BMC q BT /Helv 5 Tf 1 0 0 1 0 0 Tm 2 2.94 Td (hello world) Tj " + "ET Q EMC\nendstream\nendobj\n" ); @@ -3808,7 +3808,7 @@ describe("annotation", function () { [ "2 0 obj", "<< /Subtype /Form /Resources << /Font << /Helv 314 0 R>>>> " + - "/BBox [0 0 32 10] /Matrix [0 -1 1 0 0 10] /Length 170>> stream", + "/BBox [0 0 10 32] /Matrix [0 -1 1 0 0 10] /Length 170>> stream", "/Tx BMC q", "1 1 10 32 re W n", "0.600006 0.756866 0.854904 rg",