From 929f0bbbe5aa431b0268795c48f471ecedfe36d3 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 20 Jul 2024 09:53:58 +0100 Subject: [PATCH] version bump, multi file fix and disable survey (#1550) * version bump, multi file fix and disable survey * example test stuff * logs * Update docker-compose-latest.yml --------- Co-authored-by: a --- build.gradle | 2 +- chart/stirling-pdf/Chart.yaml | 2 +- cucumber/exampleFiles/ghost1.pdf | 106 ++ cucumber/exampleFiles/ghost2.pdf | 106 ++ cucumber/exampleFiles/ghost3.pdf | 106 ++ cucumber/exampleFiles/images.pdf | 1255 +++++++++++++++++ cucumber/exampleFiles/pdfa1.pdf | 106 ++ cucumber/exampleFiles/pdfa2.pdf | 106 ++ cucumber/features/environment.py | 5 + cucumber/features/examples.feature | 2 +- cucumber/features/external.feature | 17 +- cucumber/features/general.feature | 20 + cucumber/features/steps/step_definitions.py | 112 +- exampleYmlFiles/docker-compose-latest.yml | 1 - .../api/misc/CompressController.java | 2 +- .../convert/pdf-to-presentation.html | 2 +- .../templates/convert/pdf-to-word.html | 2 +- src/main/resources/templates/home.html | 3 +- .../resources/templates/remove-pages.html | 2 +- .../templates/security/add-watermark.html | 4 +- test.sh | 3 + 21 files changed, 1922 insertions(+), 42 deletions(-) create mode 100644 cucumber/exampleFiles/ghost1.pdf create mode 100644 cucumber/exampleFiles/ghost2.pdf create mode 100644 cucumber/exampleFiles/ghost3.pdf create mode 100644 cucumber/exampleFiles/images.pdf create mode 100644 cucumber/exampleFiles/pdfa1.pdf create mode 100644 cucumber/exampleFiles/pdfa2.pdf diff --git a/build.gradle b/build.gradle index 90e130f6..e5460c19 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ ext { } group = "stirling.software" -version = "0.26.1" +version = "0.26.2" // 17 is lowest but we support and recommend 21 sourceCompatibility = "17" diff --git a/chart/stirling-pdf/Chart.yaml b/chart/stirling-pdf/Chart.yaml index ebe8dd48..9b633ddb 100644 --- a/chart/stirling-pdf/Chart.yaml +++ b/chart/stirling-pdf/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 0.26.1 +appVersion: 0.26.2 description: locally hosted web application that allows you to perform various operations on PDF files home: https://github.com/Stirling-Tools/Stirling-PDF diff --git a/cucumber/exampleFiles/ghost1.pdf b/cucumber/exampleFiles/ghost1.pdf new file mode 100644 index 00000000..4e497da0 --- /dev/null +++ b/cucumber/exampleFiles/ghost1.pdf @@ -0,0 +1,106 @@ +%PDF-1.3 +%東京 ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +4 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20240718233034+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240718233034+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 3 /Kids [ 3 0 R 4 0 R 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 210 +>> +stream +Gap@Gb79+X'F"5[`EfJOD4:mD<%*=m+N>oDG,>NK`5P_s[usI/ph*0pV~>endstream +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@Gb79+X'F"5Y`EfJOV2A9=!fB]F'tK1LS`,]G+MiTenb&V2-^hqa(5IE#Nr59/!"Qm*5_(BdF!0&h!Yhk/A+\iS'%6tuO$O)9LaZS+flr([1p2&#RS1p/gT[B;rDj-=&=iqUlj(P^/5U@eCFqn4:endstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@GbmK%f(e+0_`ODoa2.):e/i+N3r(.o*Qf\gSNb(bt4FIubi@GIOE=p8Ir3;CbQ@KuG^cdJhODZKQ*upt+*rdZ%!mFmN$*.P)K;`s#]G=8AO3s3DGB.RCOn?[F]bEIg,a>25?B%dh\Z/C6opFE'el@I,P\u\V\]:*JYrrsNJ&d,11VL;$h!43eGu&1X6$+5-h\Vr6!+>4Je,~>endstream +endobj +xref +0 12 +0000000000 65535 f +0000000073 00000 n +0000000104 00000 n +0000000211 00000 n +0000000404 00000 n +0000000598 00000 n +0000000792 00000 n +0000000860 00000 n +0000001156 00000 n +0000001227 00000 n +0000001527 00000 n +0000001827 00000 n +trailer +<< +/ID +[<0d5cf047e754e05f8d574f067785875c><0d5cf047e754e05f8d574f067785875c>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 7 0 R +/Root 6 0 R +/Size 12 +>> +startxref +2127 +%%EOF diff --git a/cucumber/exampleFiles/ghost2.pdf b/cucumber/exampleFiles/ghost2.pdf new file mode 100644 index 00000000..6b2f529b --- /dev/null +++ b/cucumber/exampleFiles/ghost2.pdf @@ -0,0 +1,106 @@ +%PDF-1.3 +%東京 ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +4 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20240718233034+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240718233034+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 3 /Kids [ 3 0 R 4 0 R 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 207 +>> +stream +Gap@G:CDb.*/b(UbS>%`/0S`k\\5'TNY0mmgH?`8]i_0~>endstream +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 207 +>> +stream +Gap@G]afWJ'Lm;=if<;s>V*7BTJ]oQ@P!(q5S+WG1%>L@?8Ue;c>[fY&&IOd5@t@TY@+q.5TA_`50SO&7M04=8M'Oendstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@GYmu@>'Ld5[if35r/JNaJ.A.7fP9RpSN*8k^-sEER0,enq1Rsuo@R/uCO-^&Y`F'9d^a?9)?ns+F&dXm[HMgPn6Ep+%TRk5Nh+!(+[H#H:U^.^(YL,PKS'%j/:3O\hJVEK-UUekJTd[A$N^((K^#0Du`i@,/^f5KiUISGr")3/+f9NF8NO1+iUgm^b"X\cE^+[:s!0]Gu6i~>endstream +endobj +xref +0 12 +0000000000 65535 f +0000000073 00000 n +0000000104 00000 n +0000000211 00000 n +0000000404 00000 n +0000000598 00000 n +0000000792 00000 n +0000000860 00000 n +0000001156 00000 n +0000001227 00000 n +0000001524 00000 n +0000001822 00000 n +trailer +<< +/ID +[<407fc55425168745e56176202aad30c9><407fc55425168745e56176202aad30c9>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 7 0 R +/Root 6 0 R +/Size 12 +>> +startxref +2122 +%%EOF diff --git a/cucumber/exampleFiles/ghost3.pdf b/cucumber/exampleFiles/ghost3.pdf new file mode 100644 index 00000000..ea051661 --- /dev/null +++ b/cucumber/exampleFiles/ghost3.pdf @@ -0,0 +1,106 @@ +%PDF-1.3 +%東京 ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +4 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20240718233034+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240718233034+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 3 /Kids [ 3 0 R 4 0 R 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@G]+0EH(e/_@iZH]:>:>hu1e>07BJg5<'#:.C1n)e#(QJ6R1Rsuo_gpn.+0-H5$/#"iYR[B.9\'>7!aDAC*rf/t&6O#aHfeLAB\mpjZhp"`@J3;"Fm97#9+W,"eb95\+#p\^HN~>endstream +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@G]+0EX'Eriuig+>QHNeD'#n%Sq#n%BW`C'uDUOYK)HdS4E9JMsp+HUmDj&H-t*4?UamXX0peVspk"i_@ba+&u"J>UYDKV_^G,7V==aTZZendstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@G]+0EH(e/_@iZH]:>J`g!jPCLm;?AgU"fdk"PQZD\d?lRI_oWc[$tp^]O\:3fK8kWeX2&Jcg0+RoJ]j;2j*upu!b4.o&f)b$I@7CfIYjP^#\VjhC=QhQ]^lV-@<0Tam!0.+Dn@("AK%N,Uc7hb+6VoQ$q2q[7]BB92RoY/.j2N028i1jNf'@<1+Fqf$1&"8omHk`#DHP>OT~>endstream +endobj +xref +0 12 +0000000000 65535 f +0000000073 00000 n +0000000104 00000 n +0000000211 00000 n +0000000404 00000 n +0000000598 00000 n +0000000792 00000 n +0000000860 00000 n +0000001156 00000 n +0000001227 00000 n +0000001526 00000 n +0000001826 00000 n +trailer +<< +/ID +[<80da26147a484f2b7573da8151a93d2e><80da26147a484f2b7573da8151a93d2e>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 7 0 R +/Root 6 0 R +/Size 12 +>> +startxref +2126 +%%EOF diff --git a/cucumber/exampleFiles/images.pdf b/cucumber/exampleFiles/images.pdf new file mode 100644 index 00000000..a87bca41 --- /dev/null +++ b/cucumber/exampleFiles/images.pdf @@ -0,0 +1,1255 @@ +%PDF-1.3 +%粤マモ +1 0 obj +<< +/Type /Pages +/Count 20 +/Kids [ 4 0 R 9 0 R 14 0 R 19 0 R 24 0 R 29 0 R 34 0 R 39 0 R 44 0 R 49 0 R 54 0 R 59 0 R 64 0 R 69 0 R 74 0 R 79 0 R 84 0 R 89 0 R 94 0 R 99 0 R ] +>> +endobj +2 0 obj +<< +/Producer (PyPDF2) +>> +endobj +3 0 obj +<< +/Type /Catalog +/Pages 1 0 R +>> +endobj +4 0 obj +<< +/Contents 5 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 6 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 8 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +5 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +6 0 obj +<< +/F1 7 0 R +>> +endobj +7 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +8 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +9 0 obj +<< +/Contents 10 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 11 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 13 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +11 0 obj +<< +/F1 12 0 R +>> +endobj +12 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +13 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +14 0 obj +<< +/Contents 15 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 16 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 18 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +15 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +16 0 obj +<< +/F1 17 0 R +>> +endobj +17 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +18 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +19 0 obj +<< +/Contents 20 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 21 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 23 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +20 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +21 0 obj +<< +/F1 22 0 R +>> +endobj +22 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +23 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +24 0 obj +<< +/Contents 25 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 26 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 28 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +25 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +26 0 obj +<< +/F1 27 0 R +>> +endobj +27 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +28 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +29 0 obj +<< +/Contents 30 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 31 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 33 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +30 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +31 0 obj +<< +/F1 32 0 R +>> +endobj +32 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +33 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +34 0 obj +<< +/Contents 35 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 36 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 38 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +35 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +36 0 obj +<< +/F1 37 0 R +>> +endobj +37 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +38 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +39 0 obj +<< +/Contents 40 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 41 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 43 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +40 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +41 0 obj +<< +/F1 42 0 R +>> +endobj +42 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +43 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +44 0 obj +<< +/Contents 45 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 46 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 48 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +45 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +46 0 obj +<< +/F1 47 0 R +>> +endobj +47 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +48 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +49 0 obj +<< +/Contents 50 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 51 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 53 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +50 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +51 0 obj +<< +/F1 52 0 R +>> +endobj +52 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +53 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +54 0 obj +<< +/Contents 55 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 56 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 58 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +55 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +56 0 obj +<< +/F1 57 0 R +>> +endobj +57 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +58 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +59 0 obj +<< +/Contents 60 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 61 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 63 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +60 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +61 0 obj +<< +/F1 62 0 R +>> +endobj +62 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +63 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +64 0 obj +<< +/Contents 65 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 66 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 68 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +65 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +66 0 obj +<< +/F1 67 0 R +>> +endobj +67 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +68 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +69 0 obj +<< +/Contents 70 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 71 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 73 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +70 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +71 0 obj +<< +/F1 72 0 R +>> +endobj +72 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +73 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +74 0 obj +<< +/Contents 75 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 76 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 78 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +75 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +76 0 obj +<< +/F1 77 0 R +>> +endobj +77 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +78 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +79 0 obj +<< +/Contents 80 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 81 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 83 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +80 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +81 0 obj +<< +/F1 82 0 R +>> +endobj +82 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +83 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +84 0 obj +<< +/Contents 85 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 86 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 88 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +85 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +86 0 obj +<< +/F1 87 0 R +>> +endobj +87 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +88 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +89 0 obj +<< +/Contents 90 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 91 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 93 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +90 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +91 0 obj +<< +/F1 92 0 R +>> +endobj +92 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +93 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +94 0 obj +<< +/Contents 95 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 96 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 98 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +95 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +96 0 obj +<< +/F1 97 0 R +>> +endobj +97 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +98 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +99 0 obj +<< +/Contents 100 0 R +/MediaBox [ 0 0 612 792 ] +/Resources << +/Font 101 0 R +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/XObject << +/FormXob.c13e8595b419a997b6975c8b3bcc8e5f 103 0 R +>> +>> +/Rotate 0 +/Trans << +>> +/Type /Page +/Parent 1 0 R +>> +endobj +100 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] +/Length 129 +>> +stream +Gap(;YmQ"8$jHBQ`VT^RCobf1lJs.2E&Bp?.Jj'sU)_r?a)E^0fhS3dW$_d.a9O\(!I;\Pkp#TOGPr!!]KaqF\^.ZsAaK.*-#-i@6oo1]MjDkn=k_neU!Q-!#?I!*g&~> +endstream +endobj +101 0 obj +<< +/F1 102 0 R +>> +endobj +102 0 obj +<< +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +/Name /F1 +/Subtype /Type1 +/Type /Font +>> +endobj +103 0 obj +<< +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter [ /ASCII85Decode /FlateDecode ] +/Height 300 +/Subtype /Image +/Type /XObject +/Width 300 +/Length 101 +>> +stream +Gb"0;0`_7S!5bE%:MgL^TE"rlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(qq*p`k-~> +endstream +endobj +xref +0 104 +0000000000 65535 f +0000000015 00000 n +0000000207 00000 n +0000000247 00000 n +0000000296 00000 n +0000000548 00000 n +0000000768 00000 n +0000000799 00000 n +0000000906 00000 n +0000001195 00000 n +0000001450 00000 n +0000001671 00000 n +0000001704 00000 n +0000001812 00000 n +0000002102 00000 n +0000002358 00000 n +0000002579 00000 n +0000002612 00000 n +0000002720 00000 n +0000003010 00000 n +0000003266 00000 n +0000003487 00000 n +0000003520 00000 n +0000003628 00000 n +0000003918 00000 n +0000004174 00000 n +0000004395 00000 n +0000004428 00000 n +0000004536 00000 n +0000004826 00000 n +0000005082 00000 n +0000005303 00000 n +0000005336 00000 n +0000005444 00000 n +0000005734 00000 n +0000005990 00000 n +0000006211 00000 n +0000006244 00000 n +0000006352 00000 n +0000006642 00000 n +0000006898 00000 n +0000007119 00000 n +0000007152 00000 n +0000007260 00000 n +0000007550 00000 n +0000007806 00000 n +0000008027 00000 n +0000008060 00000 n +0000008168 00000 n +0000008458 00000 n +0000008714 00000 n +0000008935 00000 n +0000008968 00000 n +0000009076 00000 n +0000009366 00000 n +0000009622 00000 n +0000009843 00000 n +0000009876 00000 n +0000009984 00000 n +0000010274 00000 n +0000010530 00000 n +0000010751 00000 n +0000010784 00000 n +0000010892 00000 n +0000011182 00000 n +0000011438 00000 n +0000011659 00000 n +0000011692 00000 n +0000011800 00000 n +0000012090 00000 n +0000012346 00000 n +0000012567 00000 n +0000012600 00000 n +0000012708 00000 n +0000012998 00000 n +0000013254 00000 n +0000013475 00000 n +0000013508 00000 n +0000013616 00000 n +0000013906 00000 n +0000014162 00000 n +0000014383 00000 n +0000014416 00000 n +0000014524 00000 n +0000014814 00000 n +0000015070 00000 n +0000015291 00000 n +0000015324 00000 n +0000015432 00000 n +0000015722 00000 n +0000015978 00000 n +0000016199 00000 n +0000016232 00000 n +0000016340 00000 n +0000016630 00000 n +0000016886 00000 n +0000017107 00000 n +0000017140 00000 n +0000017248 00000 n +0000017538 00000 n +0000017797 00000 n +0000018019 00000 n +0000018054 00000 n +0000018163 00000 n +trailer +<< +/Size 104 +/Root 3 0 R +/Info 2 0 R +>> +startxref +18454 +%%EOF diff --git a/cucumber/exampleFiles/pdfa1.pdf b/cucumber/exampleFiles/pdfa1.pdf new file mode 100644 index 00000000..2873c0d4 --- /dev/null +++ b/cucumber/exampleFiles/pdfa1.pdf @@ -0,0 +1,106 @@ +%PDF-1.3 +%東京 ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +4 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20240718233034+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240718233034+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 3 /Kids [ 3 0 R 4 0 R 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 206 +>> +stream +Gap@G\IO3f&4Lr[@S4&T2aReWZ3N'9",Ncra>5AuK^J(o@r?=EP>b]h[L@XZ8q7#[c:#H2:^/=b,p3^,&f-Q.'H%!U?%N\iVa1pLMlh/41\A8@dF5@0al:-1?L;D%LpL3g\9`.3c6N/Mp=sE/nO%^@%Cc3`]e`qqS@[pkUWemMZCendstream +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@G\IO3V'LdA_ig"8P1PS=kA5Q_GQ\P]*S3\>Q`jHYt?8UdkV`6]UV*On)+1VMV+A@.iF:*6sWfM9f"s.NmVuMto!p7-+,Rb<.h,pdi-&OQ5KO\RRFj.j"A)ScTQ7$hudF^TnZ'XuQA5"O]rYkt><-DJmj'"Ri>n!4`^m409XX`e)AR'*rGsn6m79.18+^ba=qRuss"-A3k+9~>endstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 210 +>> +stream +Gap@G]+0EH(e/_@iZH]:.1fBHK`Xl'[i1&AjX(\k8hbgo(QJ6R1Rsuo6_I1A5Gg$JL;D#$J2CX;+Cf*cUHk2%H1XmpWe+qZ5moJ#B]>b%%[d,mfSSkS4A:Q4NlOFfrL7eA,s45"eUSakM;927AA,1"-LZ)&nZ/ah=8_X7:?ZMj@J@;r7d`t]Z0\d39M%:$k8[S5D"2oSap4s80l?~>endstream +endobj +xref +0 12 +0000000000 65535 f +0000000073 00000 n +0000000104 00000 n +0000000211 00000 n +0000000404 00000 n +0000000598 00000 n +0000000792 00000 n +0000000860 00000 n +0000001156 00000 n +0000001227 00000 n +0000001523 00000 n +0000001823 00000 n +trailer +<< +/ID +[<88edee24ee67bd7d6b7cf53cfa2222b0><88edee24ee67bd7d6b7cf53cfa2222b0>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 7 0 R +/Root 6 0 R +/Size 12 +>> +startxref +2124 +%%EOF diff --git a/cucumber/exampleFiles/pdfa2.pdf b/cucumber/exampleFiles/pdfa2.pdf new file mode 100644 index 00000000..b0622aec --- /dev/null +++ b/cucumber/exampleFiles/pdfa2.pdf @@ -0,0 +1,106 @@ +%PDF-1.3 +%東京 ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +4 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20240718233034+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240718233034+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 3 /Kids [ 3 0 R 4 0 R 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@GYmu@>'Ld5[if35rI0]sG)F[U^"c>T)"\\os-r:1V0,enq1Rsuo,*67.@k7U.LRF-P.e"CM2V!>iYi=B8H6e;F1WmG#,(eS00(Qe9&:O@nI879DTsT,njXAB?`8:>,Hn3*RV!qh4;&@6%]<9Y*>QZ].Z5o;RAZXg7d[#+bphHs_Ep!QR2TZ2~>endstream +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 210 +>> +stream +Gap@G]+0EH(e/_@iZH]:>=,iY1bE)XN?M;1'J/>i&HY;gks]*rj:!DKpb8@`prC#N+9E#o#-%usEeEk=sRendstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 209 +>> +stream +Gap@G_$YcZ'LhbF`EQB$nqi=8S<;#HbK3&f>rnodRPo`Vf4P[3cJidY(I=[K5NWCT'endstream +endobj +xref +0 12 +0000000000 65535 f +0000000073 00000 n +0000000104 00000 n +0000000211 00000 n +0000000404 00000 n +0000000598 00000 n +0000000792 00000 n +0000000860 00000 n +0000001156 00000 n +0000001227 00000 n +0000001526 00000 n +0000001827 00000 n +trailer +<< +/ID +[<4fcc82a085fe71e34a32d1b23c8b939f><4fcc82a085fe71e34a32d1b23c8b939f>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 7 0 R +/Root 6 0 R +/Size 12 +>> +startxref +2127 +%%EOF diff --git a/cucumber/features/environment.py b/cucumber/features/environment.py index ec7f2c9f..ca56b21f 100644 --- a/cucumber/features/environment.py +++ b/cucumber/features/environment.py @@ -14,3 +14,8 @@ def after_scenario(context, scenario): os.remove('response_file') if hasattr(context, 'file_name') and os.path.exists(context.file_name): os.remove(context.file_name) + + # Remove any temporary files + for temp_file in os.listdir('.'): + if temp_file.startswith('genericNonCustomisableName') or temp_file.startswith('temp_image_'): + os.remove(temp_file) \ No newline at end of file diff --git a/cucumber/features/examples.feature b/cucumber/features/examples.feature index 04e4081f..c6477466 100644 --- a/cucumber/features/examples.feature +++ b/cucumber/features/examples.feature @@ -1,4 +1,4 @@ -@example +@example @general Feature: API Validation @positive @password diff --git a/cucumber/features/external.feature b/cucumber/features/external.feature index 1d503135..c1330f52 100644 --- a/cucumber/features/external.feature +++ b/cucumber/features/external.feature @@ -32,7 +32,7 @@ Feature: API Validation @ocr @positive Scenario: Extract Image Scans Given I generate a PDF file as "fileInput" - And the pdf contains 3 images on 2 pages + And the pdf contains 3 images of size 300x300 on 2 pages And the request data includes | parameter | value | | angleThreshold | 5 | @@ -125,8 +125,7 @@ Feature: API Validation @ocr Scenario: PDFA - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/pdfa2.pdf" as parameter "fileInput" And the request data includes | parameter | value | | outputFormat | pdfa | @@ -137,8 +136,7 @@ Feature: API Validation @ocr Scenario: PDFA1 - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/pdfa1.pdf" as parameter "fileInput" And the request data includes | parameter | value | | outputFormat | pdfa-1 | @@ -149,8 +147,7 @@ Feature: API Validation @compress @ghostscript @positive Scenario: Compress - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/ghost3.pdf" as parameter "fileInput" And the request data includes | parameter | value | | optimizeLevel | 4 | @@ -161,8 +158,7 @@ Feature: API Validation @compress @ghostscript @positive Scenario: Compress - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/ghost2.pdf" as parameter "fileInput" And the request data includes | parameter | value | | optimizeLevel | 1 | @@ -175,8 +171,7 @@ Feature: API Validation @compress @ghostscript @positive Scenario: Compress - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/ghost1.pdf" as parameter "fileInput" And the request data includes | parameter | value | | optimizeLevel | 1 | diff --git a/cucumber/features/general.feature b/cucumber/features/general.feature index 229d37b5..345f59cb 100644 --- a/cucumber/features/general.feature +++ b/cucumber/features/general.feature @@ -94,3 +94,23 @@ Feature: API Validation | 1 | 10 | 2 | 10 | + @extract-images + Scenario Outline: Extract Image Scans + Given I use an example file at "exampleFiles/images.pdf" as parameter "fileInput" + And the request data includes + | parameter | value | + | format | | + When I send the API request to the endpoint "/api/v1/misc/extract-images" + Then the response content type should be "application/octet-stream" + And the response file should have extension ".zip" + And the response ZIP should contain 20 files + And the response file should have size greater than 0 + And the response status code should be 200 + + Examples: + | format | + | png | + | gif | + | jpeg | + + diff --git a/cucumber/features/steps/step_definitions.py b/cucumber/features/steps/step_definitions.py index 60479b6e..65a49fda 100644 --- a/cucumber/features/steps/step_definitions.py +++ b/cucumber/features/steps/step_definitions.py @@ -6,11 +6,14 @@ import io import random import string from reportlab.lib.pagesizes import letter +from reportlab.lib.utils import ImageReader from reportlab.pdfgen import canvas import mimetypes import requests import zipfile import shutil +import re +from PIL import Image, ImageDraw ######### # GIVEN # @@ -43,8 +46,6 @@ def step_use_example_file(context, filePath, fileInput): except FileNotFoundError: raise FileNotFoundError(f"The example file '{filePath}' does not exist.") - - @given('the pdf contains {page_count:d} pages') def step_pdf_contains_pages(context, page_count): writer = PdfWriter() @@ -66,8 +67,6 @@ def step_pdf_contains_blank_pages(context, page_count): context.files[context.param_name].close() context.files[context.param_name] = open(context.file_name, 'rb') - - def create_black_box_image(file_name, size): can = canvas.Canvas(file_name, pagesize=size) width, height = size @@ -76,36 +75,75 @@ def create_black_box_image(file_name, size): can.showPage() can.save() -def create_pdf_with_black_boxes(file_name, image_count, page_count): - page_width, page_height = letter - box_size = 72 # 1 inch by 1 inch black box +@given(u'the pdf contains {image_count:d} images of size {width:d}x{height:d} on {page_count:d} pages') +def step_impl(context, image_count, width, height, page_count): + context.param_name = "fileInput" + context.file_name = "genericNonCustomisableName.pdf" + create_pdf_with_images_and_boxes(context.file_name, image_count, page_count, width, height) + if not hasattr(context, 'files'): + context.files = {} + context.files[context.param_name] = open(context.file_name, 'rb') + +def add_black_boxes_to_image(image): + if isinstance(image, str): + image = Image.open(image) + + draw = ImageDraw.Draw(image) + draw.rectangle([(0, 0), image.size], fill=(0, 0, 0)) # Fill image with black + return image + +def create_pdf_with_images_and_boxes(file_name, image_count, page_count, image_width, image_height): + page_width, page_height = max(letter[0], image_width), max(letter[1], image_height) boxes_per_page = image_count // page_count + (1 if image_count % page_count != 0 else 0) - + writer = PdfWriter() box_counter = 0 - + for page in range(page_count): packet = io.BytesIO() - can = canvas.Canvas(packet, pagesize=letter) - + can = canvas.Canvas(packet, pagesize=(page_width, page_height)) + for i in range(boxes_per_page): if box_counter >= image_count: break - x = (i % (page_width // box_size)) * box_size - y = page_height - ((i // (page_width // box_size) + 1) * box_size) - can.setFillColorRGB(0, 0, 0) - can.rect(x, y, box_size, box_size, fill=1) + + # Simulating a dynamic image creation (replace this with your actual image creation logic) + # For demonstration, we'll create a simple black image + dummy_image = Image.new('RGB', (image_width, image_height), color='white') # Create a white image + dummy_image = add_black_boxes_to_image(dummy_image) # Add black boxes + + # Convert the PIL Image to bytes to pass to drawImage + image_bytes = io.BytesIO() + dummy_image.save(image_bytes, format='PNG') + image_bytes.seek(0) + + # Check if the image fits in the current page dimensions + x = (i % (page_width // image_width)) * image_width + y = page_height - (((i % (page_height // image_height)) + 1) * image_height) + + if x + image_width > page_width or y < 0: + break + + # Add the image to the PDF + can.drawImage(ImageReader(image_bytes), x, y, width=image_width, height=image_height) box_counter += 1 - + can.showPage() can.save() packet.seek(0) new_pdf = PdfReader(packet) writer.add_page(new_pdf.pages[0]) - + + # Write the PDF to file with open(file_name, 'wb') as f: writer.write(f) + # Clean up temporary image files + for i in range(image_count): + temp_image_path = f"temp_image_{i}.png" + if os.path.exists(temp_image_path): + os.remove(temp_image_path) + @given('the pdf contains {image_count:d} images on {page_count:d} pages') def step_pdf_contains_images(context, image_count, page_count): if not hasattr(context, 'param_name'): @@ -118,7 +156,6 @@ def step_pdf_contains_images(context, image_count, page_count): context.files[context.param_name].close() context.files[context.param_name] = open(context.file_name, 'rb') - @given('the pdf contains {page_count:d} pages with random text') def step_pdf_contains_pages_with_random_text(context, page_count): buffer = io.BytesIO() @@ -186,6 +223,21 @@ def save_generated_pdf(context, filename): # WHEN # ######## +@when('I send a GET request to "{endpoint}"') +def step_send_get_request(context, endpoint): + base_url = "http://localhost:8080" + full_url = f"{base_url}{endpoint}" + response = requests.get(full_url) + context.response = response + +@when('I send a GET request to "{endpoint}" with parameters') +def step_send_get_request_with_params(context, endpoint): + base_url = "http://localhost:8080" + params = {row['parameter']: row['value'] for row in context.table} + full_url = f"{base_url}{endpoint}" + response = requests.get(full_url, params=params) + context.response = response + @when('I send the API request to the endpoint "{endpoint}"') def step_send_api_request(context, endpoint): url = f"http://localhost:8080{endpoint}" @@ -278,7 +330,6 @@ def step_save_response_file(context, filename): f.write(context.response.content) print(f"Saved response content to {filename}") - @then('the response PDF should contain {page_count:d} pages') def step_check_response_pdf_page_count(context, page_count): response_file = io.BytesIO(context.response.content) @@ -305,3 +356,26 @@ def step_check_response_zip_doc_page_count(context, doc_count, pages_per_doc): reader = PdfReader(pdf_file) actual_pages_per_doc = len(reader.pages) assert actual_pages_per_doc == pages_per_doc, f"Expected {pages_per_doc} pages per document but got {actual_pages_per_doc} pages in document {file_name}" + +@then('the JSON value of "{key}" should be "{expected_value}"') +def step_check_json_value(context, key, expected_value): + actual_value = context.response.json().get(key) + assert actual_value == expected_value, \ + f"Expected JSON value for '{key}' to be '{expected_value}' but got '{actual_value}'" + +@then('JSON list entry containing "{identifier_key}" as "{identifier_value}" should have "{target_key}" as "{target_value}"') +def step_check_json_list_entry(context, identifier_key, identifier_self, target_key, target_value): + json_response = context.response.json() + for entry in json_response: + if entry.get(identifier_key) == identifier_value: + assert entry.get(target_key) == target_value, \ + f"Expected {target_key} to be {target_value} in entry where {identifier_key} is {identifier_value}, but found {entry.get(target_key)}" + break + else: + raise AssertionError(f"No entry with {identifier_key} as {identifier_value} found") + +@then('the response should match the regex "{pattern}"') +def step_response_matches_regex(context, pattern): + response_text = context.response.text + assert re.match(pattern, response_text), \ + f"Response '{response_text}' does not match the expected pattern '{pattern}'" diff --git a/exampleYmlFiles/docker-compose-latest.yml b/exampleYmlFiles/docker-compose-latest.yml index 794eb1be..6090e291 100644 --- a/exampleYmlFiles/docker-compose-latest.yml +++ b/exampleYmlFiles/docker-compose-latest.yml @@ -22,7 +22,6 @@ services: DOCKER_ENABLE_SECURITY: "false" SECURITY_ENABLELOGIN: "false" LANGS: "en_GB,en_US,ar_AR,de_DE,fr_FR,es_ES,zh_CN,zh_TW,ca_CA,it_IT,sv_SE,pl_PL,ro_RO,ko_KR,pt_BR,ru_RU,el_GR,hi_IN,hu_HU,tr_TR,id_ID" - INSTALL_BOOK_AND_ADVANCED_HTML_OPS: "true" SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java index 12dd625c..2240dbed 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java @@ -99,7 +99,7 @@ public class CompressController { List command = new ArrayList<>(); command.add("gs"); command.add("-sDEVICE=pdfwrite"); - command.add("-dCompatibilityLevel=1.4"); + command.add("-dCompatibilityLevel=1.5"); switch (optimizeLevel) { case 1: diff --git a/src/main/resources/templates/convert/pdf-to-presentation.html b/src/main/resources/templates/convert/pdf-to-presentation.html index 79431760..ce1f455d 100644 --- a/src/main/resources/templates/convert/pdf-to-presentation.html +++ b/src/main/resources/templates/convert/pdf-to-presentation.html @@ -22,8 +22,8 @@
diff --git a/src/main/resources/templates/convert/pdf-to-word.html b/src/main/resources/templates/convert/pdf-to-word.html index 7e5f96c0..0fd004f2 100644 --- a/src/main/resources/templates/convert/pdf-to-word.html +++ b/src/main/resources/templates/convert/pdf-to-word.html @@ -22,8 +22,8 @@
diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index ffb25a37..d2846a24 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -264,6 +264,7 @@ diff --git a/src/main/resources/templates/remove-pages.html b/src/main/resources/templates/remove-pages.html index 58dc18c7..84471ef2 100644 --- a/src/main/resources/templates/remove-pages.html +++ b/src/main/resources/templates/remove-pages.html @@ -21,7 +21,7 @@
- +
diff --git a/src/main/resources/templates/security/add-watermark.html b/src/main/resources/templates/security/add-watermark.html index 12e706e4..71c32374 100644 --- a/src/main/resources/templates/security/add-watermark.html +++ b/src/main/resources/templates/security/add-watermark.html @@ -20,9 +20,7 @@
-
- -
+
diff --git a/test.sh b/test.sh index 54c3c883..54d95ec9 100644 --- a/test.sh +++ b/test.sh @@ -88,6 +88,9 @@ main() { passed_tests+=("Stirling-PDF-Regression") else failed_tests+=("Stirling-PDF-Regression") + echo "Printing docker logs of failed regression" + docker logs "Stirling-PDF" + echo "Printed docker logs of failed regression" fi cd .. fi