From a90ccad02468db1751c7bcacb8f7d0c7c26e5ae8 Mon Sep 17 00:00:00 2001 From: Apryse Software Date: Tue, 17 Oct 2023 17:23:16 +0000 Subject: [PATCH 1/8] [AFTER RELEASE] pdfOCR 3.0.1 --- .../itext.pdfocr.api.tests/Properties/AssemblyInfo.cs | 6 +++--- .../itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj | 4 ++-- .../Properties/AssemblyInfo.cs | 6 +++--- .../itext.pdfocr.tesseract4.tests.csproj | 4 ++-- itext/itext.pdfocr.api/Properties/AssemblyInfo.cs | 6 +++--- itext/itext.pdfocr.api/itext.pdfocr.api.csproj | 2 +- itext/itext.pdfocr.api/pdfocr-api.nuspec | 4 ++-- itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs | 8 ++++---- .../actions/data/PdfOcrTesseract4ProductData.cs | 2 +- itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec | 4 ++-- port-hash | 2 +- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs b/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs index 7a6a984..699188e 100644 --- a/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs +++ b/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs @@ -15,6 +15,6 @@ [assembly: Guid("d6a6ea97-1f23-448f-b700-eff62971d234")] -[assembly: AssemblyVersion("3.0.1.0")] -[assembly: AssemblyFileVersion("3.0.1.0")] -[assembly: AssemblyInformationalVersion("3.0.1-SNAPSHOT")] +[assembly: AssemblyVersion("3.0.2.0")] +[assembly: AssemblyFileVersion("3.0.2.0")] +[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] diff --git a/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj b/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj index 979537f..1446b4a 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj +++ b/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj @@ -25,9 +25,9 @@ - + - + diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs b/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs index a091b60..68058e9 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs @@ -15,6 +15,6 @@ [assembly: Guid("d6a6ea97-1f23-448f-b700-eff62971d234")] -[assembly: AssemblyVersion("3.0.1.0")] -[assembly: AssemblyFileVersion("3.0.1.0")] -[assembly: AssemblyInformationalVersion("3.0.1-SNAPSHOT")] +[assembly: AssemblyVersion("3.0.2.0")] +[assembly: AssemblyFileVersion("3.0.2.0")] +[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj b/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj index 121f312..0c21c41 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj @@ -26,9 +26,9 @@ - + - + diff --git a/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs b/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs index aecd9fd..c045fd9 100644 --- a/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs +++ b/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs @@ -14,9 +14,9 @@ [assembly: Guid("0c4ceb00-9a56-4547-a925-5974a85a6048")] -[assembly: AssemblyVersion("3.0.1.0")] -[assembly: AssemblyFileVersion("3.0.1.0")] -[assembly: AssemblyInformationalVersion("3.0.1-SNAPSHOT")] +[assembly: AssemblyVersion("3.0.2.0")] +[assembly: AssemblyFileVersion("3.0.2.0")] +[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] [assembly: InternalsVisibleTo("itext.pdfocr.api.tests, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001008b21ed5b3fc1c1" + "1996390981fe22bbe71a39a9e11d3c2cefddd6ee92920fa871f9666ae0fa941af0280d0653df04" + diff --git a/itext/itext.pdfocr.api/itext.pdfocr.api.csproj b/itext/itext.pdfocr.api/itext.pdfocr.api.csproj index 3c35051..8ef9900 100644 --- a/itext/itext.pdfocr.api/itext.pdfocr.api.csproj +++ b/itext/itext.pdfocr.api/itext.pdfocr.api.csproj @@ -30,7 +30,7 @@ - + diff --git a/itext/itext.pdfocr.api/pdfocr-api.nuspec b/itext/itext.pdfocr.api/pdfocr-api.nuspec index 05f72f4..5a5ec34 100644 --- a/itext/itext.pdfocr.api/pdfocr-api.nuspec +++ b/itext/itext.pdfocr.api/pdfocr-api.nuspec @@ -2,7 +2,7 @@ itext.pdfocr.api - 3.0.1-SNAPSHOT + 3.0.2-SNAPSHOT iText pdfOcr Apryse Software Apryse Software @@ -18,7 +18,7 @@ - + diff --git a/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs b/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs index 5d9eba0..2bdec11 100644 --- a/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs +++ b/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs @@ -14,9 +14,9 @@ [assembly: Guid("0c4ceb00-9a56-4547-a925-5974a85a6048")] -[assembly: AssemblyVersion("3.0.1.0")] -[assembly: AssemblyFileVersion("3.0.1.0")] -[assembly: AssemblyInformationalVersion("3.0.1-SNAPSHOT")] +[assembly: AssemblyVersion("3.0.2.0")] +[assembly: AssemblyFileVersion("3.0.2.0")] +[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] [assembly: InternalsVisibleTo("itext.pdfocr.tesseract4.tests, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001008b21ed5b3fc1c1" + "1996390981fe22bbe71a39a9e11d3c2cefddd6ee92920fa871f9666ae0fa941af0280d0653df04" + @@ -24,4 +24,4 @@ "009746bbdafcb75bcdbcecb7caf1f0f4b6e7d013906ba60b66eb1c8298e4efb052caf6cece4bf1" + "816902cc")] -[assembly: Versions.Attributes.KernelVersion("8.0.2.0")] +[assembly: Versions.Attributes.KernelVersion("8.0.3.0")] diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs index 5ecc679..872a66d 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs @@ -34,7 +34,7 @@ public class PdfOcrTesseract4ProductData { private const String PDF_OCR_TESSERACT4_PUBLIC_PRODUCT_NAME = "pdfOCR-Tesseract4"; - private const String PDF_OCR_VERSION = "3.0.1-SNAPSHOT"; + private const String PDF_OCR_VERSION = "3.0.2-SNAPSHOT"; private const int PDF_OCR_COPYRIGHT_SINCE = 2000; diff --git a/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec b/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec index 25c9dd5..c75272e 100644 --- a/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec +++ b/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec @@ -2,7 +2,7 @@ itext.pdfocr.tesseract4 - 3.0.1-SNAPSHOT + 3.0.2-SNAPSHOT iText pdfOcr Apryse Software Apryse Software @@ -18,7 +18,7 @@ - + diff --git a/port-hash b/port-hash index daec387..7dd55eb 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -06d3c398594f20ca7a7027f1a7609e494b3a70a8 +05adb343a58b2c9b2abfea17d3dc2469de0b226b From 85529041cbf0f87f55d379941f4867643e1ed9c0 Mon Sep 17 00:00:00 2001 From: Vitali Prudnikovich Date: Mon, 15 Jan 2024 09:04:37 +0000 Subject: [PATCH 2/8] Fix font size calculation DEVSIX-7182 Autoported commit. Original commit hash: [e40be42] --- .../tessdata/TessDataIntegrationLibTest.cs | 16 ++++++++-------- .../tessdata/TessDataIntegrationTest.cs | 4 ++-- .../pdfocr/tesseract4/ImageIntegrationTest.cs | 18 +++++++++--------- .../documents/englishText_executable.pdf | Bin 53145 -> 53522 bytes .../pdfocr/documents/englishText_lib.pdf | Bin 53145 -> 53522 bytes .../documents/example_01_executable.pdf | Bin 26884 -> 27234 bytes .../itext/pdfocr/documents/example_01_lib.pdf | Bin 26884 -> 27234 bytes .../itext/pdfocr/documents/example_02.pdf | Bin 59557 -> 59907 bytes .../invoice_front_thai_lib_dotnet.pdf | Bin 58783 -> 59120 bytes .../documents/invoice_front_thai_lib_java.pdf | Bin 58735 -> 59108 bytes .../pdfocr/documents/multilang_executable.pdf | Bin 397635 -> 398008 bytes .../itext/pdfocr/documents/multilang_lib.pdf | Bin 397635 -> 398008 bytes .../pdfocr/documents/multipage_executable.pdf | Bin 1413232 -> 1413610 bytes .../itext/pdfocr/documents/multipage_lib.pdf | Bin 1413232 -> 1413610 bytes .../itext/pdfocr/documents/numbers_01.pdf | Bin 48397 -> 48774 bytes .../itext/pdfocr/documents/numbers_01_a3u.pdf | Bin 433616 -> 433993 bytes .../numbers_01_compareJpe_executable.pdf | Bin 36546 -> 36923 bytes .../documents/numbers_01_compareJpe_lib.pdf | Bin 36546 -> 36923 bytes .../numbers_01_compareTif_executable.pdf | Bin 27652 -> 28029 bytes .../documents/numbers_01_compareTif_lib.pdf | Bin 27652 -> 28029 bytes .../numbers_02_compareJpg_executable.pdf | Bin 5051758 -> 5052131 bytes .../documents/numbers_02_compareJpg_lib.pdf | Bin 5051758 -> 5052131 bytes .../itext/pdfocr/documents/spanish_01_a3u.pdf | Bin 41590 -> 41964 bytes .../pdfocr/documents/thai_01_lib_dotnet.pdf | Bin 35288 -> 35632 bytes .../pdfocr/documents/thai_01_lib_java.pdf | Bin 35264 -> 35656 bytes .../itext/pdfocr/OcrPdfCreator.cs | 2 +- .../itext/pdfocr/PdfCreatorUtil.cs | 1 + port-hash | 2 +- 28 files changed, 22 insertions(+), 21 deletions(-) diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs index 6f928b7..2a7ff1b 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs @@ -84,10 +84,10 @@ public virtual void CompareInvoiceFrontThaiImage() { tesseractReader.SetTesseract4OcrEngineProperties(properties); DoOcrAndSavePdfToPath(tesseractReader, TEST_IMAGES_DIRECTORY + filename + ".jpg", resultPdfPath, JavaUtil.ArraysAsList ("tha", "eng"), JavaUtil.ArraysAsList(NOTO_SANS_THAI_FONT_PATH, NOTO_SANS_FONT_PATH), DeviceRgb.RED); - bool javaTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathJava, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; - bool dotNetTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathDotNet, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; + bool javaTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathJava, GetTargetDirectory( + ), "diff_") == null; + bool dotNetTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathDotNet, GetTargetDirectory + (), "diff_") == null; NUnit.Framework.Assert.IsTrue(javaTest || dotNetTest); } @@ -108,10 +108,10 @@ public virtual void CompareThaiTextImage() { tesseractReader.SetTesseract4OcrEngineProperties(properties); DoOcrAndSavePdfToPath(tesseractReader, TEST_IMAGES_DIRECTORY + filename + ".jpg", resultPdfPath, JavaUtil.ArraysAsList ("tha"), JavaUtil.ArraysAsList(NOTO_SANS_THAI_FONT_PATH), DeviceRgb.RED); - bool javaTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathJava, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; - bool dotNetTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathDotNet, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; + bool javaTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathJava, GetTargetDirectory( + ), "diff_") == null; + bool dotNetTest = new CompareTool().CompareByContent(resultPdfPath, expectedPdfPathDotNet, GetTargetDirectory + (), "diff_") == null; NUnit.Framework.Assert.IsTrue(javaTest || dotNetTest); } } diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs index 67d7d89..43edff8 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs @@ -290,8 +290,8 @@ public virtual void CompareMultiLangImage() { tesseractReader.SetTesseract4OcrEngineProperties(properties); DoOcrAndSavePdfToPath(tesseractReader, TEST_IMAGES_DIRECTORY + filename + ".jpg", resultPdfPath, JavaUtil.ArraysAsList ("eng", "deu", "spa"), DeviceCmyk.BLACK); - NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(resultPdfPath, expectedPdfPath, TEST_DOCUMENTS_DIRECTORY - , "diff_")); + NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(resultPdfPath, expectedPdfPath, GetTargetDirectory + (), "diff_")); } finally { NUnit.Framework.Assert.AreEqual(TextPositioning.BY_WORDS, tesseractReader.GetTesseract4OcrEngineProperties diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs index 72ff0bc..b4621cf 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs @@ -93,10 +93,10 @@ public virtual void CompareRotatedImage() { // Because of difference of tesseract 5 and tesseract 4 there're some differences in text recognition. // So the goal of this test is to make text invisible and check if image is rotated. // Proper text recognition is compared in testHocrRotatedImage test by checking HOCR file. - bool javaTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathJava, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; - bool dotNetTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathDotNet, TEST_DOCUMENTS_DIRECTORY + bool javaTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathJava, GetTargetDirectory() , "diff_") == null; + bool dotNetTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathDotNet, GetTargetDirectory + (), "diff_") == null; NUnit.Framework.Assert.IsTrue(javaTest || dotNetTest); filename = "180_degrees_rotated"; expectedPdfPathJava = TEST_DOCUMENTS_DIRECTORY + filename + "_java.pdf"; @@ -104,10 +104,10 @@ public virtual void CompareRotatedImage() { resultPdfPath = GetTargetDirectory() + filename + "_" + testName + ".pdf"; DoOcrAndSavePdfToPath(tesseractReader, TEST_IMAGES_DIRECTORY + filename + ".jpg", resultPdfPath, JavaUtil.ArraysAsList ("eng"), JavaUtil.ArraysAsList(NOTO_SANS_FONT_PATH), null, true); - javaTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathJava, TEST_DOCUMENTS_DIRECTORY, + javaTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathJava, GetTargetDirectory(), "diff_" + ) == null; + dotNetTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathDotNet, GetTargetDirectory(), "diff_") == null; - dotNetTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathDotNet, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; NUnit.Framework.Assert.IsTrue(javaTest || dotNetTest); filename = "270_degrees_rotated"; expectedPdfPathJava = TEST_DOCUMENTS_DIRECTORY + filename + "_java.pdf"; @@ -115,10 +115,10 @@ public virtual void CompareRotatedImage() { resultPdfPath = GetTargetDirectory() + filename + "_" + testName + ".pdf"; DoOcrAndSavePdfToPath(tesseractReader, TEST_IMAGES_DIRECTORY + filename + ".jpg", resultPdfPath, JavaUtil.ArraysAsList ("eng"), JavaUtil.ArraysAsList(NOTO_SANS_FONT_PATH), null, true); - javaTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathJava, TEST_DOCUMENTS_DIRECTORY, + javaTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathJava, GetTargetDirectory(), "diff_" + ) == null; + dotNetTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathDotNet, GetTargetDirectory(), "diff_") == null; - dotNetTest = new CompareTool().CompareVisually(resultPdfPath, expectedPdfPathDotNet, TEST_DOCUMENTS_DIRECTORY - , "diff_") == null; NUnit.Framework.Assert.IsTrue(javaTest || dotNetTest); } } diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/englishText_executable.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/englishText_executable.pdf index 5d706d06bc2ac1add83db472f0790399bacb6ca1..0ec47a6fb18b4f425a3be7d9ba26108e7503263c 100644 GIT binary patch delta 1264 zcmcIjTSydP6vkbIn(lW(vMDon%5ne8{Bv1kL*30SD@~UqGHQ0_pV(S=ZFUQzXkWS$ zB2ExRWF!c_Wm1L|QAr6_CPksvQ}@eLVUb>N6bk>t3 z#$IncVN$i4sXey4{?bw(9P5Ag{=m+H`Qe7<^v!b?oSQo2e7J86t?wHed~)W^`X?=c z(fr}J#|O4MT8_HzcFe9jwcTTOeA%@@zO;7lgRGnz0cB9Cxf))_T2OMcJ0ls*BP7mL;U?C zt&ez4t6uoLv97cA;G@iG{-TW;IQneUt4J2V|6};$xXOXZErv$*@1`wxT9f5>%*w?O zAsHwbK(G+t8~}1S_wtzTQxnwX^B{nJAy{>enaQGw4NY>!l-^zH)J4nZGUO-0J=wS})KUr;JJ4NnDa{(v5Lo?W&h%8!9)Je`OC_1HKe-%X@?SiTOkgkn-D2A$@%5n} zmPU1da4eDlWbJtXz(!f-TL3YFLJ9_eAc5a742e~EbAD2iQ=aS+B1y$WD5YWm$WTn- z+4~`;wj#q{mcp|!8GXZ&KeZDiz+Z?7Qw>L`$>is|m-yH<`GQK3qJsu=3?yJmB^XjQYN#O%5JN&(gG7{dtOHfYf=nf~N6QCiveD biXVAUOgy2QiCU8y3_&s$nCxtS>0;(9Q3Z`) delta 869 zcmbQVh%j2>_= z(Tv^FG9lMLzSoxdrOHwX#m^h=tMAp$=xqF>^S7k!?7uUK)s4(C50@T%Hnmx5n$#`! z6t|5EQ!jXBymx5)yxz1haX6}~B@Tf3DHX>GBe|P(jrYoAuE;r3#)mJ z=iG|dM`q7Fw)mG$f26XHS^4vhRoOy`XSiR^ubA?@Vp$1CaBQXP!96~@*VHNFnwT0JT2B7QD2Bq9XOgrs*E7^J zG*nn=WME*RYh++#ppY4oT2Z3lUX)*2px_s#5ToJf9^j)}mReMtnV%P^A_eZeF$^1zVTLOb91B3&yBqqCnuX~PS!FtoZMroG+Dq*EE;Or zA>6j1Sf;7Or2qyMxdm3v!1ydlbpc{qC6GIH4a{^6OhXJ!tW1rqfS$W(swjposBK_u zWni#*s@bP0P?z?c{>@}>VrHfQ^sa${LY@K_m|crz7G@S`>P!tSO%1?e{0O(38X1{eOs+aF z<&gw;t1ppkF7rX!f diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/englishText_lib.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/englishText_lib.pdf index 004e5ef3190ffb8bf45499bc1e451adb5729343d..be02c79e63f97480f3a08b1300073849bf648e9c 100644 GIT binary patch delta 1266 zcmcIjS!_&E7*1zGxb~$)L|v*nS9?2Wx#!+9lV+qk)uFV-gop}vIU~b#X55)dg_sw6 zq-lC3LPUk6N#9gaX^2>Yq-YyLsyx}3CxU2fx0cXB;>Fva?|lFHzwcl6H#!@RIO|CY zW1laPG?`k>)gIhde}29n4ljB4e)pE5nc;?}LF=c@Iz7J6`C#WTR^QY2=JCnbs~%9_roXXg=V&-9EMM*e0*p{(0*fdVb}O``NkI1D-cZ{BlHCcIA2VIY&-br|&Si z)zCNb-stW_frEin+DQM>Io9>%Pof>Ev)-E5y`M&o`Z%_Fdx7&lxLVcSL3%QmcN#~B zwIQLs@$TVMU5Py(X9(H*wi(AaH*FoH@Rz_|eA3hsq5!>=Zp%kM=1{X($n9FtPTF_ZDM02E+xNqJG_l0Zd}uW}WY zRxaQ-Ff$R3MXQ8-K5m36iWiGPmPjyD)sqsB?G*I)6uub&0L1=+d{Nxom|%RV8LNr& zyZSl zQZn6YBjZM65h4-MAnT>QfS(f{e?`@F&Qf97yuN? zX*>XdoL-9bPc4mSV-$VGQa`m5B*9;ZNmC6+n8_6uy65@%6@^%#DhOc%Gm1P&Q=ud? zU6mz6MHmAQQh{o$K&oI}_x%qE`L>3CmS8RF%v;>Qb>hJ5;&Q@4R+|)m dJ1KGCNpXp!Y9?z<7UBq^SmJVWN-E}ZUjX3MjAQ@+ delta 870 zcmbQVh%j2>_= z(Tv^FG9lMLzSoxdrOHwX#m^h=tMAp$=xqF>^S7k!?7uUK)s4(C50@T%Hnmx5n$#`! z6t|5EQ!jXBymx5)yxz1haX6}~B@Tf3DHX>GBe|P(jrYoAuE;r3#)mJ z=iG|dM`q7Fw)mG$f26XHS^4vhRoOy`XSiR^ubA?@Vp$1CaBQXP!96~@*VHNFnwT0JSxo-ND2Bq9XOgrs*E7^J zG*nn=WME*RYh++#ppY4oT2Z3lUX)*2px_s#5ToJf9^j)}mReMtnV%P#H9cR6}bgg&cGNgNp%5YTP2W7bq&mP4NOA}O{`3ft$^OUXsRfNE~sr_ zY-M1ud8*l`DKNM8p8myTZ(?Sq0Q9kefkK`F7nosa3=AbSF#`ir3quSsV?)Eq$IhwM z8(5-A0gbT4FxJe##28JTfq}V+Ifj^}CAw9nh8AWPXzEN2Elmx;V*CiVn;IFJTTHGx zFYREFnwXMeY-DC`VUTQWW@eUbl4NXYWNc|^mS||6mTYHZj9qxhRy{^;=P#`=q_~ zRQm^&6Z_BZ{kr1lp7iz$=eHjCcewad<;B!L_vfBIpPIT?7C$+b+i`2(!SJu?XWM=} zHkweb$G&O)Q;*5NOm6$HqUrJ=OvK0gZ_pi6F!5LIt)J_k9)EZzHFfh^VslmITjnMQ zlaJSRka?$D2fpm;O+47rPDlHOo6iRK6es&9`^THzL(ccHox%BS(xMNSKfXJ#`1Zhk z+;IC|?CQKDJtx0QTxr-U#q-)dt-2-oKtP2m#hqUe`DA?gTz}%KlOIgk3XUc zK?Qjdj3^pWP4`aG%K4?Bzmq6{$LYfCyF$*$I7`GC31G2KMaiRRz1!vrx6hl5ZVN5KIMQy7M=qsf`(I0yyQ99{LN`C+)}i!5$wXyMBRjj|lA_eaT&{{axf4!zH5u}>ey{AZarBwIOk6FcVYJYXERsR3Oo0GHsTg};>P18EwJYWC*+=htx%yn@O*w=lynD9|Hpx5hYS%Z$o z)RSD>Yz^A}J!5g45wYQJ!pSu=E%Wx4otbu{b-HC=-uLR%7t_Mua)id`a`jFPN)Iy< zx%mIYq9yzbJ|5BFb-2T`mU;E-N2$df`N!rac_m3~ny~cxQ?8}Yi{2@p3y{87_1t!b znA_L=d(wMFns-)rEV1f0e3sesxuTA-<5xuPWIo2VlNT`+Pu|TaTW?@sVQgq+^Jws#NU_Zxz zU=RNgg_S^E2D%{43Sboq?nU{f1qyy)3Nadv?g2i!WvNBQnfZA!nw*;YA(!K1D!X|Vvf^=vM2vD*urdXVYqp#p*Q1XLu1X!Ka30~M;R+kzGp0!f^P94 z+%}_Ftf|DM00tGg1y;_$2rfwl`Pfzo9DQ0PouGh%a%)}JUJR?(cBXf|L0FvX4%nX15a4JK} z$s{es+}JqTBH6;oJTcWQF*zmG%-A@|Jkc~Y$uuR&)Xs*GipkG1wbalejH|dLv8be? SC^d}>PP)m`8 z6tpl=WJ=MEtQ5)&sff^^hk6RJi(M!z3W6+(Ac|U}D7Sp*p_iY-`M>Y*eTVbyyyJQ{ z;7Z9!xu__fu(@6*G`7{HmTkyJxy>H~%@s$>FAUG}g!f-c@$1uTsxQ|}$Qx?A*19q0 z)FET%js9&%K6jPgC6>f&E~-B85vjVOI81bxSS8z>s-ainMr0l2g%gQL_%1?ss{c5!2w{-Ws)~7 zvzgvW0Kien%-G*dj`28-#W4=Y62!jo4R*gJ$Kj``R`XU?P*$jzUI&0!FACoagk^>^ zdH|G?KYCbIofGTbNrvQ%KZF&?#3Lr7%pQQE`ZKtIfMnt@Q&=VrGnJxIZt^$rSVmO& zH85f8(OPZ`g@px+O2yTM7E&UVP;Oy^Vbw2F3Vvpqx}{Svxq@{X(J`}--y#uX^iip< zC{&gelVH=(iAhvuF-m|Lrh*hbLR3gv3ertQHweR)YNyMBRjj|lA_eaT&{{axf4!zH5u}>ey{AZarBwIOk6FcVYJYXERsR3Oo0GHsTg};>P18EwJYWC*+=htx%yn@O*w=lynD9|Hpx5hYS%Z$o z)RSD>Yz^A}J!5g45wYQJ!pSu=E%Wx4otbu{b-HC=-uLR%7t_Mua)id`a`jFPN)Iy< zx%mIYq9yzbJ|5BFb-2T`mU;E-N2$df`N!rac_m3~ny~cxQ?8}Yi{2@p3y{87_1t!b znA_L=d(wMFns-)rEV1f0e3sesxuTA-<5xuPWIo2VlNT`+Pu|TaTW?@sVQgq+^Jws#NU_Zxz zU=RNgg_S^E2D%{43Sboq?nU{f1qyy)3Nadv?g2i!WvNBQnfZA!nw*;YA(9DQ0PouGh%a%)}JUJR?(cBXf|L0FvX4%nXc;C!flY zaxyfvFf&QBNHk3`GBh$sHnB9YFicG}FiW;HG6j0Z$j*k4ipkG1wbalejH|dLv8be? SC^d}>+&hUfXg;WP%*hyv;y%vcggSO-D*dRT zhlLb0aHHrUMNwp>lx9SQgav)nPawVQK`^}_$f5|Ms7VTQ(vLp++bq^PXRXa%C-2&} z58Dzf&Pqz6F_Wv!Lfet%#IkiZG^69Qx1;7*RbMjS5!`nv!LQG5tiRGYtzhKH;Gy+d zrw(d6Zr<2(^lNY8Ou?<-mp3!6-UyDq$gI3P6y5dY@G<8F?fbUlrw9DfgVL>aFFmE= zx#YHQS+#e%VWe`n^C8(a3L~#eo}4ZF-1qKTaP-lA|E9w5PG$zW10U8lq3o;mT`ODK z{ckrnl7WuixT?8Jn$#nenVD zUs-iUMgJPx8tK<;4Z%g5OlW^QT9RRX!cOZNMphn~YaJjtvxtPSgyjGzUV^>IZCxP+ zx#?hPCtd(cCV7#`LQcpyMZ^gSCkn)&sRQ=EC*|jVhgy`powQ^e932z!8}W0awE48S8RX*@tc(s@*NlXMqUrfAG<{13ZS zmNAS!7&Fyy6E}t8;-czuaaFOda|W8n&~?TYL@+3vVfwsY;#`ptr3U7Pf)QxC$_!2rsDv6JP3J1&T1eGA zsZZpR|6swD^6(E9tQD^dm;bypX=0rO`&iYazd9t5RPDwqBt&DX8EZ3nNT8{_ieR@d IuB{M$0Pm560{{R3 delta 896 zcmZp^!o2h%^8~YcBRjj|lA_eaT&{{axf4!zH5u}>ey{AZarBwIOk6FcVYJYXERsR3Oo0GHsTg};>P18EwJYWC*+=htx%yn@O*w=lynD9|Hpx5hYS%Z$o z)RSD>Yz^A}J!5g45wYQJ!pSu=E%Wx4otbu{b-HC=-uLR%7t_Mua)id`a`jFPN)Iy< zx%mIYq9yzbJ|5BFb-2T`mU;E-N2$df`N!rac_m3~ny~cxQ?8}Yi{2@p3y{87_1t!b znA_L=d(wMFns-)rEV1f0e3sesxuTA-<5xuPWIo2VlNT`+Pu|TaTW?@sVQgq1HSZeXCUsqdSg;*waBs^MZ~WMG6%K|oP{N@;Rxkw#`nYDLL91#>+^Jws#NU_Zxz zU=RNgg_S^E2D%{43Sboq?nU{f1qyy)3Nadv?g2i!WvNBQnfZA!nw*;YA(lZG15++lRabvEE&v^2AX@+c diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/invoice_front_thai_lib_dotnet.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/invoice_front_thai_lib_dotnet.pdf index 011d403dd489ff966d2fe474c120192e2a124c8c..1f065128d5e3edaab3e90fb9a0085c3ea232f2c0 100644 GIT binary patch delta 1681 zcmc(fZA?>F7{@0CG)1L`4Z;@js#K}9aL#?d6>z1slo#ohG8AQDx9x4}g0!~9!RYMP zt%|xCa)0$@y^df1Z=) ze}3mY=j$%f{ccf}+Vkbg?bm_CH=^|ES;O+`OmEc+T}VN=+dEV{J9G=zaCXp8y>4h; zmp>j)8}g-|9I5wjcDDbjw=N%!#V>XC@2D6ZPP_QW>X92KkLw#NMl%gt&R%qH+Ve?U zyLDgo!!xT=9{#!Ypsr=}UeAfh%FmmV7hKI*ToHZkVuN#(o^W}JZpWpte>JE>yJN^V zYK~q_oWCwRV&Azd6?cwbKjG0w`%dkUv~0cInshg2K(w~?BpWiViLGy0)Lc0-rd!Yx z`Q`zB)p%;raP>dj4xG*O4VHiV9=~&h&i^Lt1G;S8+=Ftjsq~jmcQt9I3ogy;g2m6~ z43xKY%if+RuX{A$@pf1r_^X@4brDD6?x|8lhu*zY)FRbhm=z_uMReZZIdj>}zgt$u zoR_v0k6r!h*zPs%@#W`)s-G*`HXJp`9s^a!-ri;O!nWG&MYBG3MIM;J`I192{gRsY zA3h7OY>FCQ)W)u(l7k}FlEk4i2L-QQhz^V*!` z)WdyNLr-kxX}5jm;lg`Iev&>G+3$9q7qUW532xC`4+c?`1~eKNasUE ze1b-a0`z4Gtixt5HSvyw^?7`m>oB6WIe3Il1c{i!kfUM^I(;5en4n5$vyn}_!@1s8 zQYc%B*v%HbI#-d$JDt3PGr4dCOH_eG^woQiIurn)c;W(4*&XFh9!YoDO6^EazAPzk zy{ni{kO>nZ9|`hMZ)C=rg50&MY%(yE&KVTzwqgM3%grR*OhAf2u&`5wE07wZU ze!74(B+wuY0E(i7`hKN{3=TmWKoFD;X%t{V8VVr{)&PWoTbo=SK#atLG=e0lXPW1Q zPlBWfGB}Zf*c3Au$xJbgG5C}s6gheG#)a3uuLTJE)S&R~Hp`+ms_y@B z{*6^j&i^J|>zK`_x83jM@Q$^-azEWtX+g=)-CWr#KY5mzrCyp|d7$Skn@*hSk3IRZ zBA*!Ld%i!<+!Q^1%bF5454pm4`*U`!*M3hAIwah2h4WPahfTKkp9vZ_1&&2NZ*E1Z0_$t1Rpe__=6-!zqSTnQ{p`QX05MNIQU?)H`Bh!ADD|L zb27`;8yJ`w8yFfHni!jE8yKq_7^rLN`{t*(B$lLVxL6q(7-3ToP?Voinw(mskr|R& zQL;|KT+dL?&`3Af&oLm_!#_k}B~X`vE=aQiScQUnQGRKGf?t?IjE19ofRAojYEf}! zeqM|wr>1^LW=T$}hUVl*mL4`YFxdQ>McDw#o-AVelGPssHZz&!2tb&Vi`{lJn_C!e zHgxx9oV?aUb8?A?;pA%`O8x~YX;v`T*(!l8KZNPNL%1D?;y%sEA3UUm4Rj66bd3!{ z42`S|O{~D-G+EA5P7I5x&*%F-;bEA}ncWVPI*d01O}l z1BE;VE-=Huz{1jKvcwasdINMRLvu@06Ex+97KSF~Xktc&1_s7xVg`l=X6Wh+42=ye z(A1flnVLcDs7JWT)XdBT-7%)-pg2W!yP>g}F}gZKV+#umOUz9yF~v;HQN)1h(Euo9 zVu`S%q$n{nC$)&n#zx=MMIqWIB{|j5I4Lc~GSxga$i%KerQq#Ch PEr6+;OI6j?-;E0ZNBrPz diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/invoice_front_thai_lib_java.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/invoice_front_thai_lib_java.pdf index 616b5881483defca94602fe46ba5519b572dc3e0..eb6415a97de4e8cd5ac7d85fa245a9041b2efd04 100644 GIT binary patch delta 1806 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 S#36JC1ft^zgpF)B+`j;INvV4P delta 1946 zcmah`2~bm67G+DKBuG%%w-6DMpz!lQNytJ(0w}TtJAld>NKj-8AwWdNfar{%HcK3c z(nteZ3Mi{Ag0?g?LRcJR5k*lD!4;4OZ0JU8aIBhYYNqB@ovK^so>%AGdmFCmv=-@P zvLsgzIDcg+nzk#mFdW-$jxY#Y zzY?RMBRRS(WqDUIeoCVMv^=Z!An=~C#Aw&|fky4QFUD@|ZWA+~Zvt{w_~5}O0%m}E z&llu_d+L?WOCsh9^+eyW)6Eg+^8DO*g=D7Ae*$4WKSls??lvwRI<6j-aZl;3^5Cj>xTt zMR_T1JA%`XY8*NTpGRV1>~>V@XX9H>7Jk=QW_&jPnY5Vzo-MQ)hL^{XoZ5PiOq{nt z8)B0?-x>kNp|r3oraj$<0xa* znfub8V;8A#dPE$9%><`Dq#PISb(@9#d5l$GMFNlBU; zLWU=>3?Bt;)yK6xujEsyOlX=X|zr7>3eeo1Mr@7N|Pk zJtpCuQYmp9W$xo5r|oJJ1xI}93QFh0YP1u_uP4N+Oyo%D(|qhFE7q9q&oM5X z^h3iJ0_G}d(yk325`)IXo-zwq+l42{n5kAT1>A>Gra#}>Up>```$pPQG@n5@pO@}B zM_pS0XM$kNew+l6uN-8yhzw*WfF7Y%egUMcI2d|xK1W`fI0)Wf`z#MPo7R__uiugDO8VG>@O~4jL^WsAILR=V! zFBX+!D3(M^A`w%vDh770{lR=~VD<>3;{+IYZ;T&q_a3(E&Un5sHY_^I50AIvgoz^f zIK0#okp@3tZ|~;rP&10SNAQiFy zABg>mt58~n@+ws75&L1h+ut(R#~|TND!Cjqe6ubH5Gf?g>NWrX6NORzS^z{c3C#6D z!>JMgqONPMMghs|IS8OY>o|aDL$q1XfdCo&D+f_YRA8NMjiUl54>!RX)TQH>RGg(9(# UAF2vbDMTt!b^CTl4=2?>0kL2g3IG5A diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/multilang_lib.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/multilang_lib.pdf index 7fa0333c7fbfe180e915dd66629d871ece8b3788..ade75fc2de331d3a2b8f6a0298bc5bc7e8765ba3 100644 GIT binary patch delta 2327 zcmc&zX;4#H8f}oxC_>vKi-@ijIW57e!?Ykww7BqKML{ zM2U(4+i`2r#uhLQvUCW_B2BBY3m29sw1CKJqXLdhw7P0Wdb(=<&8<3Bx6b{(`0EQnzrQqpK(1jZcgX94U=`KlMw`FOAAZSMCvRo%-3mhFG_n zm0u8NFi(2dGH$6^$&6uRcZS8pkq>F_QL^FA&ayM_UTdUVk8~G#fg`!M=N~Ze&O)^r z$Iry^(y#7Ia&W*sI=rOd^_rr(UHcTfy#fm(WP%+WT;A&pg;~oa$+-7aXZZBVR{c%& zFK|P!1{Xpd$tl+);4zWp`@i%3lleUl-p{BnUGG9+`)hmBSfo&5?X zQ>yPI+HrObWV+u$<_|-idv*GaX zi^&tImLPywVyc0uD-i)$Ll|RWelZm+p#%i}twLN$iBeZ5;zwdG}@~83h?I+syyhzg^ zEfWpS^o2ifxz&|J-FD!Z^x)Hm9sAq%?MZGT{Hk@ph6)aGY-ty$ zV|-PX#pW{Wz16>y_%nao-jH0*+?*&Hoi9H?W#@B9}}|;-ikVU+vY4E*!r^Q z>X5W6-wow#EnkyMnNr=1h8MgX>zh08pHCm$o3_YH?FfH?G@6@sS`Du|M^-1w0}5l} zt@?-AZ0%dpBh|j&QnDUK?of?-_YZyLVz=LOVD-rG@XdBxU*~lzsvYAF?=5Ef4CN+; z2iH%yX_BKtY3~)+mp^JYJ>*(QUQplVc-y8{nrL~4)p_tu^s?TKNe!x;@^# zPLpln97<~((WaCV2^EPOcX!@)Ne_kDuJ3HjeSk6%4zDVTzT7-%@G4c&?=EX7OpE{O zN{XWQ8?Dm|_1$}hk7wqjYEo=u>kKPo5+hp@Oo1RKh`=<6;tawLAm~7JT_1yb3M81L zCkq0h|0s~v7+Fg_V#FB0bOBvpa*#iV7qphk2R1u$ym{+@1WX(s856ykNCIL}5!WM- z%*W#6F|j}>p#re31^Vk2;5!HeLGs6e04G+Q9FGCs;+WmBfPV73II*lnWHaA)(H6C=(TlFaZ@6iXaR_mggP)OC`6?*U}1#rLzGUX(NIi?pdtn+pkNRk zMrcebg-)X}5GD{CUK1@e+Yp Vk|f4NI2d8T6a+^gtl@g${sl@XtquSH delta 1946 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 delta 3333 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 delta 3333 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 delta 792 zcmZqs%hdaeX@W_;rKO!+aY<2XVlG$39Nja%Tn+&uM?e0IJQ{nj*#Et<7n_shs@=>+ z0Yc8Jzk4jN-+$9GP_66P&w#pf)?J0mOW4)sWbht!P`r9nV_VZj?#bmoN!)vGux34F zI+}N7)tVwj^Z&=LA2a(hOWpxY;%nXc; zj7%&{O|%V+)eQ{PHT8Y-Q(O{DQZ-zxj0}vB6ilAOC~0M`XQ*drsIU?!VW10=SI7)W ztte4&FUl`1Q1A;=h|zF#5Ae|~OD!tS%+HI_)YK2jEXhgL(44%OsgupyJ=D`Fe6tbr zPh}{3vZ4AGW^;3+%`eow87HS`YEIVHG@RV4sWe$oOROGh-67oep;)J>#H9cR6}bgg z&cF~ZNd~>+1LF`QBP$aNE3kj93=EJp06m_WR*9@Z7>kb0)3hx6VIH}< zQ;o^q*w|D77#s!$3V8}#V1}WAfw>8qn1O+bsR4$Vp@qR@t3Ar~29}n_7HG1D28Ko$ zCL39r8=VJ+P0URUfi4w7alVPUnThe_cYCCqj7(F~(o79Z zQw>ehj1x`L(vlL5(-I9+(^3;nfkMf4HiT46=Gvzv3yDUq;*!Lol8U0#G%gc!OH&gr KRaIAiH!cAB|KkJz diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_a3u.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_a3u.pdf index 7657a62bbf86e42ca94d9299c3632213a2860ebc..5faffc2730a8499c9c222ca2057b1d037219d49e 100644 GIT binary patch delta 1216 zcmc&zOGs2v7Bkwi$Eh#bs<)F6sD&(X0|8q%x#W;KDK^q{a5|k%yxWkD3O>Q zjxW@Xe-w$4g`vdA>*2&)?f6E*!_)Z6o%x^7XfMrLt4)r|#Hj91)Tb^ymjs&VY z89Z@b5-DSMph&%Z`>Oc7`c#2pLNwr%5aI{w25@`ZuBVMoJtsV!Ap+!}3w>tV7>fzh zlZ=Rb?hWcln*wP;2+}}*Pq?rDQf~wedcxg(*U)`oW|QgEptluejCgOy%|JwCv%=J4 zIfiI33_)@@2h9@z2$WQyaK?O)6{y=xk7ZELZEss7nY$}I-lZ1ag|QAPCFY4s)C88 zi?|}VrW?^Hj>)P37ALAPxU22|Dn delta 788 zcmX@PPwK*MsR<_amX>yQ#U(|liMd=Ab9B%6aybNu9R2t+@@VYAV*mHbUTjX1t9COR z1qeB>{_e57e*aC&K((%CKLhH{S$7pKFJV`klfiq`LGkKQjcrXAxhI$VBysP#!J74y z>1f`SRcneA&Ho>}e$4F4GtIF*6Xe05R+K+1hLm^Pn!= z-ZYC%oyp$V*i-@NX9EL;JOwT=!_dIU!T?PS7+j|4>I@7FEexi=n8T)8Z)jqIroqs_ z*w_$V%-F~RU7d-!8HQd10}CT`y#|H`W@f17nHU?H8d-wGR1mHQ3Yr1q5$q9|kAPwp zCWg~D%w>~uGE1{CH8C}|Ft#)?PE0g3GD$Q~F-$T^H8V~%G%`#ww6h_kV)~hRY+7=V d800E0Nh~U7QY5=A~VvvY4)xx37cu~IM~ z)PtE7Q%@NvQ4mBB`c@%G_6HP21Qk{f5n^ve5Yk;U$Tgw2?$hDB=bZ05ALq>73_P3+ zT+ux>8qK;6GY6&IgfbSB=3r^-x9q4l^6~P3B|SSoGt#y24!qyLEqJUaU2f+dy|{5< zBJ{fKPE&u~kH@_)E4HisCClxVephU9>r*gR+cDZab!+O}zLKT-uk&r!vnM`ZoBgmb z|Mu0r+2u{cWo6GLma>N6zhn0gEP#@4y054ay`h{yr-pCNw92|IcCyT z0TCs5;}UQeLkN{TA&6z1;Vc6kPI@Q<4jq;o69evP7Lub;iTPbc!~V&DS9~Pi(tWgZ z`b*$@^=j-d)y!-*h&Fw@wyVgmlx6=@2>G3IRdsGK6KN4%yDUFfb5)*2L0G{?0@4Vk z5smt95ddq~vLf?v^v>V+6V zun>b#H^K#Zq8lk>Bbts#L7u>+|rO`Sz!cKLYb{Xsw11*1XId&fxx6LP*cPvgPe%2x~XDaLmEUx z#U_VL^irwCII?YS*`66~`kxZE2o0uxcD$}Pzh%nWtCNB&E2ykHHD&FoNmO> PM089vDHv?)X_tNi`}|a` delta 779 zcmdnJfa%a&rU_>C26lGEB}J);xm*=zKGz-HlQ1`pU*w2Gh=Is6_O3>y zq*t$FU1u#?^ol!mQN}#}r_X;n7|Km~ccg`T?LrBSCA%b!h8a{Pe(LkgX{_T-W#3xV zm}H(68a8vn%=+Wkdvjmt-nX0ZPlA&xH7^Bf9gvlulr?eZoXIv!#gjuBWpxY;%nVEo zO-zjq&9n`S)eQ{PHT8Y-Q(O{DQZ-zxj0}vB6ilASC~0M`XQ*drsIU?!VW10=SI7)W ztte4&FUl`1Q1A;=h|zF#5Ae|~OD!tS%+HI_)YK2jEXhgL(44%Ksgun=#4XCpXR`_O zPh}{3va$LWW^;3+&9BtG87HS{YEIVGG@RV8sWe$wOUwXj-67oep;)Imd8MYbfPt=o znXZ9ph@pvGElmv2WDN}rjWA3$vNShAQwI!iLkkQs3o~@v zj7?1}4AImXo0^&#D;U(HIN#XR+!9H1Nl{{EPHGXCjg7vii$b(bnrTw9MT&*7S(=%N zxuu~+im{1tijlEllDUDIaf)HG9bpx*`kr}d`3gXr6@v7G^7AKO=$Dj*#2i;~Nn%k+ VMNw)Rm$8|lfiah=s;j>n7XbP)-B|zt diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_compareJpe_lib.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_compareJpe_lib.pdf index cafdbf590215160fba64694e55288237a5c88f9b..04615097d4277cf220e40c9db596592a9229ed25 100644 GIT binary patch delta 1159 zcmc&z?MqWp9L`ljmm~;55TxU5Zdbi}UhX~j-l41ITeNaEM+EId_vI{BxsAISlY$FE zeK51))~5`VC<=i4h$yT+M2LMWf{^aah|Pq)b>P4`&-uMQ&-wj|H$4xh zJy)nLhC;c##k66rFeOZcxgxCX`IZ~E$39+8>D;sPb7PUkci{cLZN6jCOubon^y0>a zsle;HJDrJ^ACF@%8+M3^nw7prClX%T`V>s~`^URxZq1zATeIBub)olq?!@P7^B)!$ z-oCmwzp`nxuI@R<(&k!9mcII6+Idpd&`J=-3RDS(v=tIRgnqu`P{!=h@+{C3#1Q{6 zaJGBu?e2`lfYJ`zi7+$}9vs>qje|rW+&_2_oMBcjl}RV~Hjp)w(e9WKXSp1+G$Stp z;=16CUBF!oArwmaKsalS<{0R=G9y_qaD?xOr}C#+fDeT@=0vJSos%BBIvPD1j~$-< z;`!dRc6OGV=Qb-un!W9hR5^`2?|cd%=K$~Z7KXFIZdd9&E79umma+&43s{LmHArv} zI&XNdU4fPK2tw%P!0K`-1qZE+IbtxY%bSX`LcVw({7sHBHU346Uks}W5TpUOdO#3~QUwMf5z#sfDbzW2smVsJpIY(iMp0=cMi8vT zAf$?1Vdq98mDz|y5vj0qG1aYfXIc3~QnBdlnyj}qS=SU@(+opINra$eK!lMC26lGEB}J);xm*=zKGz-HlQ1`pU*w2Gh=Is6_O3>y zq*t$FU1u#?^ol!mQN}#}r_X;n7|Km~ccg`T?LrBSCA%b!h8a{Pe(LkgX{_T-W#3xV zm}H(68a8vn%=+Wkdvjmt-nX0ZPlA&xH7^Bf9gvlulr?eZoXIv!#gjuBWwi|q%nVEo zO-zlA%(M-R)eQ{PHT8Y-Q(O{DQZ-zxj0}tr3MS8Gl(I6{Gt@IQR9FcVH_!!1D`bYG zR+K2X7v+~0DENgb#ArCW2l(igr4|)u=I6y|YU+n%mgJ;rXii?r)X5eW66oz6w%LUF zr!tg1*;suGv$?s^=2z<8jFZzeH7Dz88cy!lRGKWTC1wD%?htPKP^{COyi!w|-$2*E zOxM6P#L&db)Y!^s@?}jWF*GrdXRQnjHqX#{lK^v6SGO9Iy|J;m0?=y)1`2r!TwsQw zfq}UhnwWusiK!8Wn4yKylH&%CsJ1)$9eLHa@Y`I9g7OUgnbj;pvNv8be? UC^e1C*v!ztm`hdF)!&T^0O@<()c^nh diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_compareTif_executable.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_compareTif_executable.pdf index f74a7df2c7943d38ff5b0d9248393b90cc12bd58..695f84c6a7f5ddb151364833cfd107cf996f0d00 100644 GIT binary patch delta 1161 zcmc&z-%Aux6mGX4(0~LXNP=)(TX)ACJ#+8;xU=Zi=Fi%6MVESLUuI|S)N1Z7vumsn zEJ*brLdDcmJ|s~PR1o@@2$KB)MIl0k)k8$sTM?8rYX7 z=H=<&O3mH2MAP^A!IyRWq(s$vcfAvheA@jKO$B-;+h=aiTsTs-*8F9u>qhR($LkC4 zR+nBc-(OhYFl;74nM@(ck0F*}DMj(PH$rYIU!IHQI6RF}n7;Y$vZk|?g>%O8Xl^7AB z5(7}ETETN)Bb91cQN>CPtWa=y`^(D5DiCn=k=i1o*aE;ZF%-#Ql9IG2(KVTB7Ew%D zwKPnyp(m3`ISJUsi9#`BCg_Aw$&jgTnWDmgCYdUmqM;}*RU^dIEox9pl+2`tHJySa zsiGuVU}>@I98gyrVq-n4;WkUJZasG`F6t=9IP`+whF0b49 Sg3T-rtL_YNet%c2oBIh6pi(UW delta 762 zcmex+i?QVf;{>yM13SColA_eaT&{{ax;>U$4Gsb`dc~c(C}SS~)8{`O4CSW0JJQ0vcA(+%9^-y&SV>=;>n?mvN{F^W(KB) zCZ@)Q7TN~J>IMetn)<%^DK3d6sTwX;Mg~Sm3MS8El(aI}Gt@IQR9Fd=Fwh0bD`bYG zR+K2X7v+~0DENgb#ArCW2l(igr4|)u=I6y|YU+n%mgJ;rXii?r)XC-<=pGU7z1f8M zr!tg1*;suGv$?s^=2z<8jFZzeH7Dz88cy!lRGKWTC1wD%?htPKP^{COyi!wIz(Ci) zOxM6P#L&db)Y!_P&_jlfALAxdPB{1_law3S3}@ zp@D(98Jd`Zfr+URhM1v+(PYDH<$424OA`Y$SwjOuBMg&`EX_^O)BywB&;mou!VKLu zBQsMAbn}eN%*-qm4DwK%Z)9d+iDY0&QDSCJY7v)>jlQRgLbQ!}vbk}Rsc~9rs-gw;t F1pq(Z*pL7K diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_compareTif_lib.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_01_compareTif_lib.pdf index ea13a399268d725227045ac0fbe57aa583ebb2e8..e12d776bcc226f13ba21b79dc184acd4aaca9384 100644 GIT binary patch delta 1161 zcmc&z-%Aux6mGX4(0~LXNP=)(TX)ACJ#**xqFb9kY15T;>7{*{ow-x1xx37au|hB) z)q@BXQ&0JjL_ttN=wl*C_6HP&2o+Wj5n*pdP|~a!v|~bV-KWEM&v(9aKF+zg68Nzi zxGFk)JZ{-0QOBtA3^SdemY}x#t2O0JzQ2;sQO_>TPbSyiptr~Ohfk-9^?Ld7i<_5c zqN{axJF+d`7t${q4)EEUjowB#nfSE#DVmP-O?A%Rp1p9aX1(>xa?cIx%*X4C@79)I zuiRhU*fmjC_naaHeM^!Qu06WtJ_$6maxBI&C>&p2^$iNR*DpDdHvr6YfaR*_RqfCwhA4J_o-w zZN=_-^Zag^6Xxzjk^#4orri%w);&Ron#yCPSeNIuO)7JBhAJuyiy16uK#6fU#)A8b zZgl*h=SU17M4`>+%@i9li~6`m%+63gL(2BjL-aR4s_gg|H+~TgZy89VrJdcFt8HnE z|DL}8Y;*9aAYtTr2Y?EQ+6-7=dBKMPa6G#WV`b5OFw*3(9#8T8dQ}wBk8v#cF#u7P ze0g3q&aZ|=iS=t>Q3fyXU{(8A0uEetwBAtxi$sxm&CpauP_V3syuuqY!I}a@)^tG; zRbCW$PLsR@O%*iIRSpb=lewHE8X$-U;blFiv!LlYg@^!H&l$YLSCmDK2MKhL6(Z;| z3kvA00=b+3h9rvMK)mCBwy?+R0o;YrmULyynCh#e!ka6|Y&$ik`qU`PR!zHX5`)5$ Nw*yo-+>`31egaU%PvHOn delta 762 zcmex+i?QVf;{>yM13SColA_eaT&{{ax;>U$4Gsb`dc~c(C}SS~)8{`O4CSW0JJQ0vcA(+%9^-y&SV>=;>n?mvN{F^W(KB) zCZ@(l=Gq3v>IMetn)<%^DK3d6sTwX;Mg~Sm3MS8El(aI}Gt@IQR9Fd=Fwh0bD`bYG zR+K2X7v+~0DENgb#ArCW2l(igr4|)u=I6y|YU+n%mgJ;rXii?r)XC->>FVngvDt+A zr!tg1*;suGv$?s^=2z<8jFZzeH7Dz88cy!lRGKWTC1wD%?htPKP^{COyi!wIz(Ci) zOxM6P#L&db)Y!_%eDW1dMKN?ipm(hd3^vcu(zAoP>P&_jlfALAxdPB{1_law3S3}@ zp@D(98Jd`Zfr+URhM1v+(PYDH<$424OA`Y$SwjOuBMg&`EX_^O)BywB&;mou!VKLu zBQsMAbn}eN%*-qm4DwK%Z)9d+iDY0&QDSCJY7v)>jlQRgLbOe?v5C2gw;t F1psmL)+Yb} diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_02_compareJpg_executable.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/numbers_02_compareJpg_executable.pdf index c86db6517aef84e9b5345e38d917fe758b03c964..3191b10fd4453668fb8edd3ad0f5ec5795acfb2a 100644 GIT binary patch delta 1466 zcmbuCQj3p9XFptB&3X!uNTHap|l1;K#OI4V5Vhr!E5lrQPw~v1&PQ z`y!T4D^z*hh6%4)o_2&6s}#kI|0T&)JwbSirc`;dke!$u9xsxqSaxV)l)NXrdZl`5 zDxM^@vOAtTEEh$+E+x~8|~|C-a%%HtnebW(ke|;7Tiikwyg~Dh|-h>?`(uo2qfId~pkfKBisY=$swfvvC& zw!;p133fsUybQZwH|zld5$J@y@Crns3%Vf&@x_>&IP>qr_i=tM(E~}4AqBlafq?=l zXrO}uCUCGI4X;85`k)_PgME;N0mwlf24O!8!7z-#0XVogml)mg+aBGt2tF-J$tfZ& zEf}?!x}42^7ar@F{U>!xEHwrZ4ZPBmBPmV%({ za9g1ovsITGoEf&RxGtlm{wFOViyEG+gxToUu|%=?yUML2N{TLxFL~8ml2wedM`KB< X`?lxLc*2!*sxwVtQZza^zF+ze^m?(u delta 1053 zcmajeUr19?90zbVP3xw$bWUxVS5x=*x^w^S?#`vD)3tPKgxEh{wt20Uy0}gef+Tv7 zQP7_YX}$H(gOWx#u$Ksoh=QUADSGZng`kM22dQsrgsbS`1Bc)F9)5?z@4TPM=s!$n z^w<1nS!y9-$bEew{J`?{-Rkq(-N6$MY?)6tR4qs!dQmB()j zUk>o)O%LPG45w%7+O$(?i%%(?Uo1)If1Z3{etP3*+VyJs&5=OZvOE>Jd&_jf^>M-I z`=YjYsd$&4uKP$D_lW3#!s5~+U0 zYSZrN(|O&2_Tcf(xrUribsKAqw`X!BiJM!tcj&Y}r%hv=tajB|trasSve9ng-~BeV zvuRUKvw<+g%@DDR6}%$vWhHIVS!K#D;t9NjT$*IYCm9{+AqR3{3*2wNM8Zu!3!VlCfV|-FUHa zyTbuaV4xmcK!61fco0AYH%Qb(aw)MzuEd}Z20_pr%S(I zrsu}AAKoob=c1LnH)acGubrPco2#EtgJrV#)wb_mpWHR=`(M64aQ*Jo-ybcUeC6h) zOMk^)?)hZs!##hhKMmbDQ5*X{jNUQ3^bbB?41es{+vEykCbc-DW*_Cfl=de3$7^oU z4n(4uWt2TAVbZU;vySi+)v}liJ|l&iFNm3;87@zi@{?1e6J;`!$d62pkvE0ksMgNR zB-5nsdJ~1Ca#=JQ!nd73B|MX-8Mg5ra)nV!Je>@0_9k>1yQP|s~GZ_sgD!|fZ$w;T7{ zJt&ctBj-BVpc-6A$QKiG2Si{KY=%c*3p@&s!Q&voR_KH$;7NE2o`z>&8$@9{?0}uH z3wFb^um`%}IoJ#PU_TIuK{p(L=OGR~&>;|42NI@M&U5L1V@$^Qe(S++pifG!KXzjIYXqC zg+eWbug2!Tj*fTD{}UbWYZ}IC@P4AMu8nciSR12Mx7NojZno`ZCNnLwy%@wSYA7pt z&D9E9L9VRZZ0Y*{RTC-j?dmDvOSxSC;Ual8=P81@uBUiHQ7fil8;sdHH7u7>MW>#n z3T|MFt!nxklx;dC8c_bU3}!e~1z_7{y delta 1053 zcmajeUr19?90zbVP3xw$bWUxVS5x=*x^wT{y?1vmP2HTPTO-7xe3|oFD|K<5A_PhF zAfuo^7jpI1Lk~(C;lN%ZFd_}a4!`q$HlzPA zlhI%EpJl1Vh#~j&h42H**LQ2rZ+~xgwp1Ud&R?wQyOZ0ox?EB4BsLQr%RIWw-CTYA zw(#W;U*7aE_RMg4t}dXRN?CkL>B3S;D*to(h56}?V=33GnKws+Vav*N*93AeVd#%mENEb7vs3Y;jaIekg>W(J| z6{}6Vr%&YtT6@|9;rWJ~Pj#DXjkjlVB#E0}v3KgU0jEu4oUC@$S*;Z_CbHRX@!$Qn zw6kf`PP2h9L}ZB2&APn;@8u+I$ysH}F5(Higj`B9lW9f=ddPuX*amr!58Gh}P_PpU zpb&P!ZZN_t4mb>*3wB3W z+49sGW2mT{B_6kj#yk*057X58f)KaJPYoGE-U*h=+CyHJvunKM7PD#?M=m=@h)3eL zI$^NDoCMMivzKP!L@Ribx8CZZAPLN>NVv)Oq^(&VTv7|D5mZpy$Iq zPp6c{<>eX6WZEvS^)!1_#d*-I!dLAz!$q{KeWP4 z^VWXz7H#P$zS~){^I3bzx#dTj`u8dW(@uF_oH>^B-RaIdU)etN^um#g4F}#vkC)QJ zZ>rk{I)?Twy0Wg~lD56Mx3uaZcc?)OwUo)zBi|pN?0fz4^r-ltZFttTCtZV$11m<0 z7uWCjc=PJ)Pd5tAT2DU@*KHDd?%&#ZeJuFhQ~0HvoOqwJdp!%X1YxXzN-!p+K$ZY3 z@rSBYv_i9(uOf^A|0|)^OwksdnZ9J4wOT#=s+7riB?v(hsH=(8)~$`k`37I4vUUT% zhnbmVs=2|xj89V|x+)fkvrLAWnr;a^2}U4@r>^0zU;qe=v*06Xvn|8;N;B1x=4&?l zL-C~5#C-l-ci#LwdvpGQ!f4(4^;>Il&-2sEe#UkT`tnr)g^M_T;y7#5 zk~Eyo-6pj0mq`Da3!W8{Ao0$A0QhE}n+OmV|H1$SB)akdoJ4!(Id4`#;JR~qsInUq zB}7~pkrj+w7=Vi1{Qx1!JzoG3)bZNvALJcSbvG11QH0+^EK^H1F_SAR3$3f*x0R{H z`MOk~kRXO3D5@mNVnSsM6kXFKjDcW7q*T|C?9iaH#xz|-C?O-spv=k0$|@uhvMf^- zA1@}RaSI^QOXdehCx+A46N!h)(tGk0Ent``F~Pa>2UZ@3U=uH(%AUl p3`}+)=bdn8;4j++h~w1XuH!P6W?HQ#GdRI{dx`UUS4Y=yKLAh^cCP>c delta 875 zcmaEJoax&UrU_>ChIV$vB}J);xm*=9!xRK%HX+|cKe;fI^ z6{MtD!K}Ac0$Xzk?tnwMU4Y^M&B>0&(gFs$24=bj#vw*VR;GqlhDMWfj1|Su1%ZKL zWni$`z@#J#=FU~~7BktK7@8;meQRK#kf*=}W*8coSQwy*0Rzv%0z=Hm)Od2wLe+X> z6HGHqjSbP%8=9I}psO=BH?uTCQ)ggcVT!KKz|g?b5>1_nfic9Lz_^Dy-o(Jf4BbEz z19MYTgyxc>#LS%3A}$*neNPvKXqyxRW6LCSqf`S!LsQdaOA||jRFgEbq~tUMOS42H qb2B?aDj3Zs7cAD2g(M!X;*!Lol8U0#G%gchS~TZURdw}u;{pKTQ3o>s diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/thai_01_lib_dotnet.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/thai_01_lib_dotnet.pdf index 68f5d7e6492ed8c5b5b61f8629f60a49e5a28e9a..c9c31de841392fcb97f12b3e944107490d9bcd7d 100644 GIT binary patch delta 1704 zcmcJOYfuwc7=|^7LR3Ui=|y2dkc5(O_LkjH2n`n%tVu+WwxY0`oUKtLu!#av3{n_F zz0{fx0$NbCYD66^$Y`-6q*JYb=zzm8k`X(!k=jvFfB2(2`{SJV+wbiA zJ#*eRtKevRJ52As%p_U77lO!qk#_B&*4lP2E*A z)_viw1M@8V&o=D1QCHHFUZOEn$M@%k8=LzS#KJN2mTVugxNJII@3?rcC!(He-{H6z zZM;g>P;F~HS2Zk+W<*L0BWUle zDu?B(g7o%)3gev4IZ1zK@2UJ^Gdrqsf4P3!7{QiJqnq6NES`RsW7?A3F7chJ^;yBK z@$%~1_bw{Un;x%i{<%X_b)?d!-cvrVv7zqps?E%VM}8ua`tcSr>ZW~0bb%hl9wRXiLY{O8Kdb(8wZk2O=c zfvB(7OuMswx&6eV3H~{6pW6BT12iIeOaGY`f$ebVvE}B;n^x*=+_kCp}2#89b0UuNL9sWm%B|}QB?5l?tLffg3cV~zC^m-wH=TKc^874gCTyd zO2#HH+q{6Oj~= za<1k>WDVqvdP7EvI0VVmaq8#o+s@y3jaT8#8nM zXltX7*t)?7wRZdXTUlQ(FI<9R5{ym+bQp$(4MVV6e0|KX(8B=m7b3%tbCj_EAVl~N zQ?S1p!wVE%1K|Y*|270X93P4gPVs>hliXH PC*%Yn3=E7_&k_Cu`et3d delta 1377 zcmdlmjp@c@rU|C?hQ@Yw#U(|liMd=AbGC-v&I>jasQDf~NB>5Je%$RKks)hqsN-&fkbeY-_W zZTb7Vb9YPJeZt-rhGnEt!36+IJ{ zHT5RnR8%?P&#-9zzK;*Y}IKKuT+>f@}fQhMw3wtu+i|KYvf zTK^ROjbAytcnYs8ulnv)Hed12cROXt+C|fH3sg5>R8g#`ZJ8l3!*RYN2h-Ka%*%}@ zZmm&gl+UVtaYflnSRpmwCS!qfy#PCdT6R;5XhN{rws(yh&a*kfKJ3)9{jMM+ogyUI z;oyw$XETIS`pz4-yJl19@tv8pD8-nGAcj>M>(p4D_jV$%Aa zBlB!lcxg*Kye*SE5 z@ImkOtvzDGh7A|y7&28|wqaROJa4wc!Ia7U^Xk{!I4p4b$p04y7Cg5!cyn%5@x8>a zVHeKjIbY;Z<6-#85bWU}qOcOE$UqmQRv|MawW379y(qu5K*29eAx6W|J-|n| zEVZaOGe0jzQ&T@Avm_@~Lv!+GmM%7bFxc$OS}P7^Pd+BIi`m@5aC5V)H{<00a+;Hm z$r(=8kXNcNNJ+B_D9TSMO-?PcRRUXcXq^JOOAg_73W`fKmADkZpdz=x${CmwOHx5T zwp9XoLf61d*VrJ$(8$Wb)CwFdRtA%cLBn1Q9aDTbJtrRn4+9jf(4=H}>f<|gLo<{BCp8=0Z2Gc+_sS7%^o zVql1-&e+(}1VhZkzz8f>kK}k`6JrY`g(XFanK`LNTsAiPo-PW}HfE+N21y1fsb)sz zDTyg*7KtWiiAibZW~mm5M#g3)26lv1#OizIrR6IaD;OvQ=?CTKmncj=-X*S&9=&P# hMGAU;t|45-C5c5P6-B9OT*f9AM&?|qs;>TSTmVa9^fUkf diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/thai_01_lib_java.pdf b/itext.tests/itext.pdfocr.tesseract4.tests/resources/itext/pdfocr/documents/thai_01_lib_java.pdf index b65d60cc72e5f8b8b11060cb10147c9a083cacc6..1b27fe1108dc9537e77819bf63b51385c302b1bd 100644 GIT binary patch delta 1701 zcmc(eeNa?Y7{>WnX;~9cQ7At43a;z|i|2mq{a9ra7T66_2v!*|Pt)=o`OJsZY--z2YbT zJU-S}9zLzRFSmAZ&R$0F@VsT5VbWZGEe&bytdi@AR&}JWOU32VM8_ zZas~CopGZMT2tHaQ7sdlEQm0z5c`z+2Nl> zq6=-JNq&vx?Z?cQ-#s%}G}wK6plz_HZ>Z17hm)DEZcMGR9E_E`CnZhU2oVLShr)9b<>gj-}Hh-VOlR2rRa4faT+Fn$0HsAYg zfASY`i&q(cXd@CRZh!UOw49#EYeCY7Ro}#BX@?6Q+?(l>Ji~P;Zo#qy_NU59>iib% z<9&Db*IO>`j+EEAh9*KwmiD5pgZ}3}jo)fpxui27l4%XJ6?VO;7FBcoJ5Ja!KD^=R zqb56TPTYSrZI$9ay>F;C`Ongu*8{|&mNId3NN-hV?2>t>GiFW=C|o=<&ou1m(?}yDB5FE*h`uJ9kB6(D zG)_6#@Wp8Op^B0gyvkCt;nXpT6>9CN!!Czb6tPMA{DAI|$*X(On8Jbz>?!6lFukTd zI&tst!`Q;c?~Cp(Jes@Av?lOOYI^;Xy(8Y;DS1;`Zw>q2LHuJrm=u*}j4SWy-2S6$ z`t-UKp~3Atp~F4MhQbI!0t&@2JOZF$0E8*#E;6%mw3U;`sS$v@=s+@WX7d=1mzxY+ zf%PDyHS-)qMu8|)nYuV8IaQxzfYRkLy5zT@e2%x6%-QLRNGOLjCTUZY2F_yPc$%?d z5E>N&qL7#OKwlyN0OgnpC?w*@#3a!Bkp*k2A?gfX07G&k9wT?tuxiO>BA!9cvVMK|L z20*D%OpW1!O*(6)Gjxnd4S?Vw4Ys|=^90K;aXi8B#0Kc(%l(FEB+&Sp&oXMO$!b3% zjpF|CJW@W_eF5xvNysrS0HAD0GF|{e1#o8uND6+A5eP1rDrGhl$DH>Fm5Oj;Fu-tU z24Dnzo?#^E)Qe((bk>PtFh0(F{v#g6R0tvjRlROgVI0a~00RVxFf7Y3B!f{1#nHHm zB2b*72^=v}1W6)@5oK7IpxI1@q!2)}49lPhg}|8(3J3(oNEi^Dk>g;RWEj@rjiOaB z<(M6*%A`3OrSVKerBY=wMiymo7Gp@xjp@K-rU|C?My7Ul#U(|liMd=AbM{X2&J!^dX!~BDyZ%(}7QOYh?D5H)FVDE&`Fwwl zU6&){B}I=ugX10!{K*F53bB_|TtnV1mwH_9VQT1<^~}pdz&kfn+5cR?lLI%DTmHEi zJP8mC=UbHVy4G>RDgM!wDH_n<3 zJN@=nwCL;&(_%h#h~tTY#7c8+FH_F-JkQeDPF{(yet4|^#>=M8g|9ko3^#DDn(Le> zW_YsenM6>RWVY+c$?Vx#7cHh)o|_bC!cjFr=yvJEwNoP8mG4!wR{3c%7JU&6`c}^o zDU!5p>N~a)c9o5q6YBD#ywc^v42EW5GYC z760-oPg~1)bMg_U?UR#OiYHey%hnqhm>HQFniv@y8)+LDs~Z@oYwG*vr?@1Rq-wZW z85tO1QxH&;pHiBfTBMN~l3G!+PQhHyP|wg%VI@$pfi6go0$4)9y(qu5K*29eAx6W| zJ-|n|EVZaOGe0jzQ&T@Avm_@~Lv!+JmM*q1-w<~n|H=1c#5NbQri&x^yO_<*jW*Ag z^=6zbF0VQHo}A%i2YIE*N94r}pjIBjZ6}JAnvI~Z7)8z}%iX<(p`r@#ef7?_(FVTc)6T9~7& zGcY$WpZupowcg0W0A0@9#M~H7%+SCX7>;Om85)|Rt1~b(F)%?>XKZX~Y>F;sVqgds z6F_pjv5B#{>EsQaQcfwUNv0M?7Dh>C#%9JQ<|)ZZX~xMWz*LcFZfTNiZfs{mNX6tc hU0Sk`XyGa@Nh~U pageText, PdfC iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pageMediaBox); canvas.SetFontProvider(fontProvider); Text text = new Text(line).SetHorizontalScaling(bboxWidthPt / lineWidth); - Paragraph paragraph = new Paragraph(text).SetMargin(0).SetMultipliedLeading(1.2f); + Paragraph paragraph = new Paragraph(text).SetMargin(0); paragraph.SetFontFamily(fontFamily).SetFontSize(fontSize); paragraph.SetWidth(bboxWidthPt * 1.5f); if (ocrPdfCreatorProperties.GetTextColor() != null) { diff --git a/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs b/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs index a25101a..839d126 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs @@ -69,6 +69,7 @@ internal static float CalculateFontSize(Document document, String line, String f float maxFontSize = bbox.GetHeight(); try { Paragraph paragraph = new Paragraph(line); + paragraph.SetMargin(0); paragraph.SetWidth(bbox.GetWidth()); paragraph.SetFontFamily(fontFamily); while (Math.Abs(fontSize - maxFontSize) > 1e-1) { diff --git a/port-hash b/port-hash index 8527349..f682e51 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -ff2b7d7c54060506265117583dc8a10bfd187b83 +e40be42cb4b0efe58ad639233b01cbb2fe5aad7f From 0638d7fca252240492728916c3dc289c323bb468 Mon Sep 17 00:00:00 2001 From: iText Software Date: Mon, 15 Jan 2024 09:04:46 +0000 Subject: [PATCH 3/8] Add missing copyright headers --- .../itext/pdfocr/tesseract4/TesseractOcrUtil.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractOcrUtil.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractOcrUtil.cs index 8bf5ae3..4969cdf 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractOcrUtil.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractOcrUtil.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV + Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. From 0c86c02f584f3d25db66d76a30a2a60a2369070a Mon Sep 17 00:00:00 2001 From: Guust Ysebie Date: Wed, 17 Jan 2024 21:55:03 +0100 Subject: [PATCH 4/8] Update copyright notice 2024 DEVSIX-7291 --- itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs | 2 +- itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs | 2 +- .../itext/pdfocr/OcrPdfCreatorEventHelperTest.cs | 2 +- .../itext/pdfocr/OcrProcessContextTest.cs | 2 +- itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfA3uTest.cs | 2 +- .../itext.pdfocr.api.tests/itext/pdfocr/PdfCreatorUtilTest.cs | 2 +- .../itext.pdfocr.api.tests/itext/pdfocr/PdfFontTest.cs | 2 +- .../itext.pdfocr.api.tests/itext/pdfocr/PdfInputImageTest.cs | 2 +- .../itext.pdfocr.api.tests/itext/pdfocr/PdfLayersTest.cs | 2 +- .../itext/pdfocr/PdfOcrMetaInfoContainerTest.cs | 2 +- .../itext.pdfocr.api.tests/itext/pdfocr/ScaleModeTest.cs | 2 +- .../itext/pdfocr/exceptions/PdfOcrExceptionTest.cs | 2 +- .../itext/pdfocr/helpers/CustomOcrEngine.cs | 2 +- .../itext/pdfocr/helpers/CustomProductAwareOcrEngine.cs | 2 +- .../itext/pdfocr/helpers/ExtractionStrategy.cs | 2 +- .../itext.pdfocr.api.tests/itext/pdfocr/helpers/PdfHelper.cs | 2 +- .../statistics/PdfOcrOutputTypeStatisticsAggregatorTest.cs | 2 +- .../pdfocr/statistics/PdfOcrOutputTypeStatisticsEventTest.cs | 2 +- .../itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs | 2 +- .../itext/pdfocr/IntegrationEventHandlingTestHelper.cs | 2 +- .../itext/pdfocr/IntegrationTestHelper.cs | 2 +- .../itext/pdfocr/TesseractExecutableIntegrationTest.cs | 2 +- .../pdfocr/actions/Tesseract4EventHandlingExecutableTest.cs | 2 +- .../itext/pdfocr/actions/Tesseract4EventHandlingLibTest.cs | 2 +- .../itext/pdfocr/actions/Tesseract4EventHandlingTest.cs | 2 +- .../pdfocr/actions/events/PdfOcrTesseract4ProductEventTest.cs | 2 +- .../itext/pdfocr/exceptions/PdfOcrTesseract4ExceptionTest.cs | 2 +- .../pdfocr/general/BasicTesseractIntegrationExecutableTest.cs | 2 +- .../itext/pdfocr/general/BasicTesseractIntegrationLibTest.cs | 2 +- .../itext/pdfocr/general/BasicTesseractIntegrationTest.cs | 2 +- .../imageformats/ImageFormatIntegrationExecutableTest.cs | 2 +- .../pdfocr/imageformats/ImageFormatIntegrationLibTest.cs | 2 +- .../itext/pdfocr/imageformats/ImageFormatIntegrationTest.cs | 2 +- .../itext/pdfocr/pdfa3u/PdfA3UIntegrationExecutableTest.cs | 2 +- .../itext/pdfocr/pdfa3u/PdfA3UIntegrationLibTest.cs | 2 +- .../itext/pdfocr/pdfa3u/PdfA3UIntegrationTest.cs | 2 +- .../pdfocr/pdflayers/PdfLayersIntegrationExecutableTest.cs | 2 +- .../itext/pdfocr/pdflayers/PdfLayersIntegrationLibTest.cs | 2 +- .../itext/pdfocr/pdflayers/PdfLayersIntegrationTest.cs | 2 +- .../pdfocr/tessdata/TessDataIntegrationExecutableTest.cs | 2 +- .../itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs | 2 +- .../itext/pdfocr/tessdata/TessDataIntegrationTest.cs | 2 +- .../itext/pdfocr/tesseract4/ApiTest.cs | 2 +- .../itext/pdfocr/tesseract4/ImageIntegrationExecutableTest.cs | 2 +- .../itext/pdfocr/tesseract4/ImageIntegrationLibTest.cs | 2 +- .../itext/pdfocr/tesseract4/ImageIntegrationTest.cs | 2 +- .../itext/pdfocr/tesseract4/ImagePreprocessingUtilTest.cs | 2 +- .../pdfocr/tesseract4/Tesseract4FileResultEventHelperTest.cs | 2 +- .../Tesseract4MetaInfoEventHandlingExecutableTest.cs | 2 +- .../tesseract4/Tesseract4MetaInfoEventHandlingLibTest.cs | 2 +- .../pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingTest.cs | 2 +- .../itext/pdfocr/tesseract4/TesseractHelperExecutableTest.cs | 2 +- .../itext/pdfocr/tesseract4/TesseractHelperLibTest.cs | 2 +- .../itext/pdfocr/tesseract4/TesseractHelperTest.cs | 2 +- .../itext/pdfocr/tesseract4/TesseractOcrUtilTest.cs | 2 +- .../itext/pdfocr/tesseract4/UserWordsExecutableTest.cs | 2 +- .../itext/pdfocr/tesseract4/UserWordsLibTest.cs | 2 +- .../itext/pdfocr/tesseract4/UserWordsTest.cs | 2 +- itext/itext.pdfocr.api/PdfOcrExtensions.cs | 2 +- itext/itext.pdfocr.api/Properties/AssemblyInfo.cs | 2 +- .../itext/pdfocr/AbstractPdfOcrEventHelper.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/IImageRotationHandler.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/IOcrEngine.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/IProductAware.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/OcrEngineProperties.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs | 2 +- .../itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorEventHelper.cs | 2 +- .../itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/PdfOcrFontProvider.cs | 2 +- .../itext.pdfocr.api/itext/pdfocr/PdfOcrMetaInfoContainer.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/ScaleMode.cs | 2 +- itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs | 2 +- .../itext/pdfocr/exceptions/PdfOcrException.cs | 2 +- .../itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs | 2 +- .../itext/pdfocr/exceptions/PdfOcrInputException.cs | 2 +- .../itext/pdfocr/logs/PdfOcrLogMessageConstant.cs | 2 +- .../itext/pdfocr/statistics/PdfOcrOutputType.cs | 2 +- .../pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregator.cs | 2 +- .../pdfocr/statistics/PdfOcrOutputTypeStatisticsEvent.cs | 2 +- itext/itext.pdfocr.api/pdfocr-api.nuspec | 4 ++-- itext/itext.pdfocr.tesseract4/PdfOcrTesseract4Extensions.cs | 2 +- itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs | 2 +- .../Properties/KernelVersionAttribute.cs | 2 +- .../itext/pdfocr/tesseract4/AbstractTesseract4OcrEngine.cs | 2 +- .../itext/pdfocr/tesseract4/ImagePreprocessingOptions.cs | 2 +- .../itext/pdfocr/tesseract4/ImagePreprocessingUtil.cs | 2 +- .../itext/pdfocr/tesseract4/LeptonicaImageRotationHandler.cs | 2 +- .../itext/pdfocr/tesseract4/OutputFormat.cs | 2 +- .../itext/pdfocr/tesseract4/Tesseract4EventHelper.cs | 2 +- .../itext/pdfocr/tesseract4/Tesseract4ExecutableOcrEngine.cs | 2 +- .../pdfocr/tesseract4/Tesseract4FileResultEventHelper.cs | 2 +- .../itext/pdfocr/tesseract4/Tesseract4LibOcrEngine.cs | 2 +- .../itext/pdfocr/tesseract4/Tesseract4MetaInfo.cs | 2 +- .../itext/pdfocr/tesseract4/Tesseract4OcrEngineProperties.cs | 2 +- .../itext/pdfocr/tesseract4/TesseractHelper.cs | 2 +- .../itext/pdfocr/tesseract4/TextPositioning.cs | 2 +- .../tesseract4/actions/data/PdfOcrTesseract4ProductData.cs | 4 ++-- .../tesseract4/actions/events/PdfOcrTesseract4ProductEvent.cs | 2 +- .../tesseract4/exceptions/PdfOcrInputTesseract4Exception.cs | 2 +- .../pdfocr/tesseract4/exceptions/PdfOcrTesseract4Exception.cs | 2 +- .../exceptions/PdfOcrTesseract4ExceptionMessageConstant.cs | 2 +- .../pdfocr/tesseract4/logs/Tesseract4LogMessageConstant.cs | 2 +- itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec | 4 ++-- 105 files changed, 108 insertions(+), 108 deletions(-) diff --git a/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs b/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs index 699188e..f3eeaa3 100644 --- a/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs +++ b/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs @@ -7,7 +7,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Apryse Group NV")] [assembly: AssemblyProduct("iText")] -[assembly: AssemblyCopyright ("Copyright (c) 1998-2023 Apryse Group NV")] +[assembly: AssemblyCopyright("Copyright (c) 1998-2024 Apryse Group NV")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs index e0bb646..5206261 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrPdfCreatorEventHelperTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrPdfCreatorEventHelperTest.cs index d5f78d1..e748594 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrPdfCreatorEventHelperTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrPdfCreatorEventHelperTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrProcessContextTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrProcessContextTest.cs index da4aa6b..a9acf93 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrProcessContextTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/OcrProcessContextTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfA3uTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfA3uTest.cs index 25fdf10..a736190 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfA3uTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfA3uTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfCreatorUtilTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfCreatorUtilTest.cs index eae0faf..564aae6 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfCreatorUtilTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfCreatorUtilTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfFontTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfFontTest.cs index 4c96e66..8fe29c6 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfFontTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfFontTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfInputImageTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfInputImageTest.cs index 4d98300..a97282d 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfInputImageTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfInputImageTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfLayersTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfLayersTest.cs index 1574f9e..c4553a3 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfLayersTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfLayersTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfOcrMetaInfoContainerTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfOcrMetaInfoContainerTest.cs index 63b6ad4..5ba8dbd 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfOcrMetaInfoContainerTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/PdfOcrMetaInfoContainerTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ScaleModeTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ScaleModeTest.cs index 1d13ec0..8cb0274 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ScaleModeTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ScaleModeTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/exceptions/PdfOcrExceptionTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/exceptions/PdfOcrExceptionTest.cs index c29dbe3..a200d29 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/exceptions/PdfOcrExceptionTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/exceptions/PdfOcrExceptionTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomOcrEngine.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomOcrEngine.cs index 06ca089..957efe6 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomOcrEngine.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomOcrEngine.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomProductAwareOcrEngine.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomProductAwareOcrEngine.cs index d1ff9f0..0dcca43 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomProductAwareOcrEngine.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/CustomProductAwareOcrEngine.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/ExtractionStrategy.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/ExtractionStrategy.cs index 2269e5e..be4fa7f 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/ExtractionStrategy.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/ExtractionStrategy.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/PdfHelper.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/PdfHelper.cs index e95a9e6..ebba8f9 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/PdfHelper.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/PdfHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregatorTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregatorTest.cs index d3e56fd..91b642e 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregatorTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregatorTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEventTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEventTest.cs index 8b941e6..db07fa1 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEventTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEventTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs b/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs index 68058e9..554a1dd 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs @@ -7,7 +7,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Apryse Group NV")] [assembly: AssemblyProduct("iText")] -[assembly: AssemblyCopyright ("Copyright (c) 1998-2023 Apryse Group NV")] +[assembly: AssemblyCopyright("Copyright (c) 1998-2024 Apryse Group NV")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationEventHandlingTestHelper.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationEventHandlingTestHelper.cs index 8aa5a2b..c7a4493 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationEventHandlingTestHelper.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationEventHandlingTestHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationTestHelper.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationTestHelper.cs index a2a67eb..59d313b 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationTestHelper.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/IntegrationTestHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/TesseractExecutableIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/TesseractExecutableIntegrationTest.cs index be21535..16f0783 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/TesseractExecutableIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/TesseractExecutableIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingExecutableTest.cs index 5a65e76..64e9280 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingLibTest.cs index 57f783f..2599336 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingTest.cs index aca97e6..a26020b 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/Tesseract4EventHandlingTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/events/PdfOcrTesseract4ProductEventTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/events/PdfOcrTesseract4ProductEventTest.cs index 1124167..5d14732 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/events/PdfOcrTesseract4ProductEventTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/actions/events/PdfOcrTesseract4ProductEventTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/exceptions/PdfOcrTesseract4ExceptionTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/exceptions/PdfOcrTesseract4ExceptionTest.cs index 74f1f41..0901e61 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/exceptions/PdfOcrTesseract4ExceptionTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/exceptions/PdfOcrTesseract4ExceptionTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationExecutableTest.cs index 9b07496..f9dce5a 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationLibTest.cs index 093f508..fcc6176 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationTest.cs index ffddb99..eb96c00 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/general/BasicTesseractIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationExecutableTest.cs index 4687576..c5f7e86 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationLibTest.cs index 9ccba2f..c970fe1 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationTest.cs index aa5d45d..d618cd9 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/imageformats/ImageFormatIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationExecutableTest.cs index 6dd553d..5f38227 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationLibTest.cs index 2f87cb5..95f9105 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationTest.cs index 6391171..e204f6f 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdfa3u/PdfA3UIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationExecutableTest.cs index cca27e0..910e64e 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationLibTest.cs index 44c86c9..f3f8297 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationTest.cs index ff03ff1..96ac6ad 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/pdflayers/PdfLayersIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationExecutableTest.cs index 0743ce5..1bc1ed3 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs index 2a7ff1b..3c58c5a 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs index 43edff8..b40c7b0 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tessdata/TessDataIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ApiTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ApiTest.cs index a9d4410..b1f5638 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ApiTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ApiTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationExecutableTest.cs index 732a7be..d39752f 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationLibTest.cs index 320f340..224a22f 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs index b4621cf..249bc6f 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImageIntegrationTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImagePreprocessingUtilTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImagePreprocessingUtilTest.cs index 9b7a83f..03efcff 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImagePreprocessingUtilTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/ImagePreprocessingUtilTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelperTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelperTest.cs index 1474511..a0022c9 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelperTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelperTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingExecutableTest.cs index 933486c..48684f7 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingLibTest.cs index 2be9fed..3e5296d 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingTest.cs index f8c848b..a2c33a3 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/Tesseract4MetaInfoEventHandlingTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperExecutableTest.cs index 7d1f7b3..3c05e98 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperLibTest.cs index 927ce80..058d2e3 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperTest.cs index f9d7f2a..8aa6101 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractHelperTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractOcrUtilTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractOcrUtilTest.cs index 7edbb95..56d42a2 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractOcrUtilTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/TesseractOcrUtilTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsExecutableTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsExecutableTest.cs index 453cd95..ddc71cb 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsExecutableTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsExecutableTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsLibTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsLibTest.cs index 3746c69..92b578e 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsLibTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsLibTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsTest.cs b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsTest.cs index 205741a..b42b87a 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsTest.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext/pdfocr/tesseract4/UserWordsTest.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/PdfOcrExtensions.cs b/itext/itext.pdfocr.api/PdfOcrExtensions.cs index b4c44f4..dad4f06 100644 --- a/itext/itext.pdfocr.api/PdfOcrExtensions.cs +++ b/itext/itext.pdfocr.api/PdfOcrExtensions.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs b/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs index c045fd9..0a34927 100644 --- a/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs +++ b/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs @@ -7,7 +7,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Apryse Group NV")] [assembly: AssemblyProduct("iText")] -[assembly: AssemblyCopyright ("Copyright (c) 1998-2023 Apryse Group NV")] +[assembly: AssemblyCopyright("Copyright (c) 1998-2024 Apryse Group NV")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] diff --git a/itext/itext.pdfocr.api/itext/pdfocr/AbstractPdfOcrEventHelper.cs b/itext/itext.pdfocr.api/itext/pdfocr/AbstractPdfOcrEventHelper.cs index b8dae29..73667ec 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/AbstractPdfOcrEventHelper.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/AbstractPdfOcrEventHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/IImageRotationHandler.cs b/itext/itext.pdfocr.api/itext/pdfocr/IImageRotationHandler.cs index 94e176b..18bac1b 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/IImageRotationHandler.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/IImageRotationHandler.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/IOcrEngine.cs b/itext/itext.pdfocr.api/itext/pdfocr/IOcrEngine.cs index 15b0f2a..dc5375f 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/IOcrEngine.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/IOcrEngine.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/IProductAware.cs b/itext/itext.pdfocr.api/itext/pdfocr/IProductAware.cs index 282723c..1becbb2 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/IProductAware.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/IProductAware.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrEngineProperties.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrEngineProperties.cs index 78544e5..939c5cb 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrEngineProperties.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrEngineProperties.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs index 890a70e..be4c270 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorEventHelper.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorEventHelper.cs index dd31095..f5dec9b 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorEventHelper.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorEventHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs index 381a0c1..d14d42a 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs index 336d23d..5671eb9 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs b/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs index 839d126..00f7448 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/PdfCreatorUtil.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrFontProvider.cs b/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrFontProvider.cs index c9f3fa1..0073ac2 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrFontProvider.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrFontProvider.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrMetaInfoContainer.cs b/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrMetaInfoContainer.cs index 8ba277d..6bdfa92 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrMetaInfoContainer.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/PdfOcrMetaInfoContainer.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/ScaleMode.cs b/itext/itext.pdfocr.api/itext/pdfocr/ScaleMode.cs index 5e93ad7..9d5a7cf 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/ScaleMode.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/ScaleMode.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs b/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs index f74bc06..9f0e07a 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrException.cs b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrException.cs index 0e7712f..b43b8d9 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrException.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrException.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs index 1f585f3..f2e2857 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrInputException.cs b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrInputException.cs index d5544b9..0ec8afe 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrInputException.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrInputException.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/logs/PdfOcrLogMessageConstant.cs b/itext/itext.pdfocr.api/itext/pdfocr/logs/PdfOcrLogMessageConstant.cs index 46a2193..ed409dc 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/logs/PdfOcrLogMessageConstant.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/logs/PdfOcrLogMessageConstant.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputType.cs b/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputType.cs index cd1f617..cd519e1 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputType.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputType.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregator.cs b/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregator.cs index 19d45bd..3b2e0dc 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregator.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsAggregator.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEvent.cs b/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEvent.cs index 6c2d176..bc5f621 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEvent.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/statistics/PdfOcrOutputTypeStatisticsEvent.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.api/pdfocr-api.nuspec b/itext/itext.pdfocr.api/pdfocr-api.nuspec index 5a5ec34..a6d90bd 100644 --- a/itext/itext.pdfocr.api/pdfocr-api.nuspec +++ b/itext/itext.pdfocr.api/pdfocr-api.nuspec @@ -12,7 +12,7 @@ true pdfOCR is an iText add-on to recognize and extract text in scanned documents and images. It can also convert them into fully ISO-compliant PDF or PDF/A-3u files that are accessible, searchable, and suitable for archiving pdfOCR is an iText add-on for C# (.NET) to recognize and extract text in scanned documents and images - Copyright (c) 1998-2023 Apryse Group NV + Copyright (c) 1998-2024 Apryse Group NV en-US OCR PDF ligatures text glyphs iText Optical Character Recognition PDF/A ISO-compliant Tesseract open-source opensource English Mandarin Chinese Hindi Spanish French Arabic Bengali Russian Portuguese Indonesian scan image extractable data searchable diacritic sdk c# .net @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/itext/itext.pdfocr.tesseract4/PdfOcrTesseract4Extensions.cs b/itext/itext.pdfocr.tesseract4/PdfOcrTesseract4Extensions.cs index 5c52b7c..a7d6f31 100644 --- a/itext/itext.pdfocr.tesseract4/PdfOcrTesseract4Extensions.cs +++ b/itext/itext.pdfocr.tesseract4/PdfOcrTesseract4Extensions.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs b/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs index 2bdec11..12e8588 100644 --- a/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs +++ b/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs @@ -7,7 +7,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Apryse Group NV")] [assembly: AssemblyProduct("iText")] -[assembly: AssemblyCopyright ("Copyright (c) 1998-2023 Apryse Group NV")] +[assembly: AssemblyCopyright("Copyright (c) 1998-2024 Apryse Group NV")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] diff --git a/itext/itext.pdfocr.tesseract4/Properties/KernelVersionAttribute.cs b/itext/itext.pdfocr.tesseract4/Properties/KernelVersionAttribute.cs index 58d560d..96767ba 100644 --- a/itext/itext.pdfocr.tesseract4/Properties/KernelVersionAttribute.cs +++ b/itext/itext.pdfocr.tesseract4/Properties/KernelVersionAttribute.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/AbstractTesseract4OcrEngine.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/AbstractTesseract4OcrEngine.cs index cc05a20..ad6ad60 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/AbstractTesseract4OcrEngine.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/AbstractTesseract4OcrEngine.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingOptions.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingOptions.cs index ed5f177..4d99864 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingOptions.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingOptions.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingUtil.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingUtil.cs index 8eddc44..1ba18d5 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingUtil.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/ImagePreprocessingUtil.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/LeptonicaImageRotationHandler.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/LeptonicaImageRotationHandler.cs index 90e8a86..c94ab5c 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/LeptonicaImageRotationHandler.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/LeptonicaImageRotationHandler.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/OutputFormat.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/OutputFormat.cs index 3cdcb90..b42e5a8 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/OutputFormat.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/OutputFormat.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4EventHelper.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4EventHelper.cs index 09b2b14..ac9a871 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4EventHelper.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4EventHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4ExecutableOcrEngine.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4ExecutableOcrEngine.cs index c34b05f..59d052f 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4ExecutableOcrEngine.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4ExecutableOcrEngine.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelper.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelper.cs index 8251f32..b15802a 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelper.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4FileResultEventHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4LibOcrEngine.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4LibOcrEngine.cs index b59df4f..0f66c02 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4LibOcrEngine.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4LibOcrEngine.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4MetaInfo.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4MetaInfo.cs index b500968..2c69b19 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4MetaInfo.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4MetaInfo.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4OcrEngineProperties.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4OcrEngineProperties.cs index d874608..b74acff 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4OcrEngineProperties.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/Tesseract4OcrEngineProperties.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractHelper.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractHelper.cs index 4870bfa..5002325 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractHelper.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TesseractHelper.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TextPositioning.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TextPositioning.cs index 44f5afe..15a12a3 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TextPositioning.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/TextPositioning.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs index 872a66d..ac074ed 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. @@ -38,7 +38,7 @@ public class PdfOcrTesseract4ProductData { private const int PDF_OCR_COPYRIGHT_SINCE = 2000; - private const int PDF_OCR_COPYRIGHT_TO = 2023; + private const int PDF_OCR_COPYRIGHT_TO = 2024; private static readonly ProductData PDF_OCR_PRODUCT_DATA = new ProductData(PDF_OCR_TESSERACT4_PUBLIC_PRODUCT_NAME , PDF_OCR_TESSERACT4_PRODUCT_NAME, PDF_OCR_VERSION, PDF_OCR_COPYRIGHT_SINCE, PDF_OCR_COPYRIGHT_TO); diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/events/PdfOcrTesseract4ProductEvent.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/events/PdfOcrTesseract4ProductEvent.cs index 6e1826a..607cdfe 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/events/PdfOcrTesseract4ProductEvent.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/events/PdfOcrTesseract4ProductEvent.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrInputTesseract4Exception.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrInputTesseract4Exception.cs index ff66562..2c8b0dc 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrInputTesseract4Exception.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrInputTesseract4Exception.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4Exception.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4Exception.cs index ccfc0e4..8f05202 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4Exception.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4Exception.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4ExceptionMessageConstant.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4ExceptionMessageConstant.cs index 760a20b..2825801 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4ExceptionMessageConstant.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/exceptions/PdfOcrTesseract4ExceptionMessageConstant.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/logs/Tesseract4LogMessageConstant.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/logs/Tesseract4LogMessageConstant.cs index 04bc1d3..61e3699 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/logs/Tesseract4LogMessageConstant.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/logs/Tesseract4LogMessageConstant.cs @@ -1,6 +1,6 @@ /* This file is part of the iText (R) project. -Copyright (c) 1998-2023 Apryse Group NV +Copyright (c) 1998-2024 Apryse Group NV Authors: Apryse Software. This program is offered under a commercial and under the AGPL license. diff --git a/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec b/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec index c75272e..8d436ad 100644 --- a/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec +++ b/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec @@ -12,7 +12,7 @@ true pdfOCR is an iText add-on to recognize and extract text in scanned documents and images. It can also convert them into fully ISO-compliant PDF or PDF/A-3u files that are accessible, searchable, and suitable for archiving pdfOCR is an iText add-on for C# (.NET) to recognize and extract text in scanned documents and images - Copyright (c) 1998-2023 Apryse Group NV + Copyright (c) 1998-2024 Apryse Group NV en-US OCR PDF ligatures text glyphs iText Optical Character Recognition PDF/A ISO-compliant Tesseract open-source opensource English Mandarin Chinese Hindi Spanish French Arabic Bengali Russian Portuguese Indonesian scan image extractable data searchable diacritic sdk c# .net @@ -38,4 +38,4 @@ - \ No newline at end of file + From 94613940fa636e5a298b90990c09e2ff4ecca1ba Mon Sep 17 00:00:00 2001 From: iText Software Date: Thu, 18 Jan 2024 12:03:51 +0000 Subject: [PATCH 5/8] Update port-hash Update copyright notice 2024 DEVSIX-7291 Autoported commit. Original commit hash: [a74397b] Manual files: pdfocr-tesseract4/src/main/java/com/itextpdf/pdfocr/tesseract4/LeptonicaWrapper.java pdfocr-tesseract4/src/main/java/com/itextpdf/pdfocr/tesseract4/TesseractOcrUtil.java --- port-hash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port-hash b/port-hash index f682e51..61f20ca 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -e40be42cb4b0efe58ad639233b01cbb2fe5aad7f +a74397b9f7e5a4e3775df9002c7cec3aaf338c2a From f32865c874a2d9224b0f0239939dc288d8195049 Mon Sep 17 00:00:00 2001 From: Vitali Prudnikovich Date: Wed, 24 Jan 2024 06:08:25 +0000 Subject: [PATCH 6/8] Add roles and hierarchy support for text items DEVSIX-8048 Autoported commit. Original commit hash: [8a36e7d] --- .../itext/pdfocr/ApiTest.cs | 32 ++ .../pdfocr/helpers/TestProcessProperties.cs | 73 +++++ .../TestStructureDetectionOcrEngine.cs | 89 +++++ .../LogicalStructureTreeItemTest.cs | 63 ++++ .../structuretree/TableTreeStructureTest.cs | 43 +++ .../itext/pdfocr/cmp_tableStructureTree.pdf | Bin 0 -> 56033 bytes .../itext/pdfocr/IOcrProcessProperties.cs | 30 ++ .../itext/pdfocr/OcrPdfCreator.cs | 307 +++++++++++++++--- .../itext/pdfocr/OcrPdfCreatorProperties.cs | 33 ++ .../itext/pdfocr/OcrProcessContext.cs | 14 + .../itext.pdfocr.api/itext/pdfocr/TextInfo.cs | 30 ++ .../PdfOcrExceptionMessageConstant.cs | 2 + .../pdfocr/structuretree/ArtifactItem.cs | 27 ++ .../structuretree/LogicalStructureTreeItem.cs | 125 +++++++ .../pdfocr/structuretree/ParagraphTreeItem.cs | 38 +++ .../pdfocr/structuretree/SpanTreeItem.cs | 38 +++ .../pdfocr/structuretree/TableCellTreeItem.cs | 38 +++ .../pdfocr/structuretree/TableRowTreeItem.cs | 50 +++ .../pdfocr/structuretree/TableTreeItem.cs | 50 +++ port-hash | 2 +- 20 files changed, 1044 insertions(+), 40 deletions(-) create mode 100644 itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestProcessProperties.cs create mode 100644 itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestStructureDetectionOcrEngine.cs create mode 100644 itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/LogicalStructureTreeItemTest.cs create mode 100644 itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/TableTreeStructureTest.cs create mode 100644 itext.tests/itext.pdfocr.api.tests/resources/itext/pdfocr/cmp_tableStructureTree.pdf create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/IOcrProcessProperties.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/LogicalStructureTreeItem.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/ParagraphTreeItem.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/SpanTreeItem.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableCellTreeItem.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableRowTreeItem.cs create mode 100644 itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableTreeItem.cs diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs index 5206261..f66ea7d 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/ApiTest.cs @@ -30,7 +30,9 @@ You should have received a copy of the GNU Affero General Public License using iText.Kernel.Font; using iText.Kernel.Geom; using iText.Kernel.Pdf; +using iText.Kernel.Utils; using iText.Pdfa; +using iText.Pdfocr.Exceptions; using iText.Pdfocr.Helpers; using iText.Pdfocr.Logs; using iText.Test; @@ -193,6 +195,36 @@ public virtual void TestImageRotationHandlerForTiff() { ; } + [NUnit.Framework.Test] + public virtual void TestTableStructureTree() { + String pdfPath = PdfHelper.GetTargetDirectory() + "tableStructureTree.pdf"; + // Image doesn't really matter here + String input = PdfHelper.GetImagesTestDirectory() + "numbers_01.jpg"; + IOcrEngine ocrEngine = new TestStructureDetectionOcrEngine(); + OcrPdfCreatorProperties creatorProperties = new OcrPdfCreatorProperties(); + creatorProperties.SetTextColor(DeviceRgb.RED); + creatorProperties.SetTagged(true); + OcrPdfCreator pdfCreator = new OcrPdfCreator(ocrEngine, creatorProperties); + TestProcessProperties processProperties = new TestProcessProperties(5, 6, 50, 15, 100, 200); + using (PdfWriter pdfWriter = PdfHelper.GetPdfWriter(pdfPath)) { + pdfCreator.CreatePdf(JavaCollectionsUtil.SingletonList(new FileInfo(input)), pdfWriter, new DocumentProperties + (), processProperties).Close(); + } + NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(pdfPath, PdfHelper.TEST_DIRECTORY + "cmp_tableStructureTree.pdf" + , PdfHelper.GetTargetDirectory(), "diff_")); + } + + [NUnit.Framework.Test] + [LogMessage(PdfOcrExceptionMessageConstant.CANNOT_CREATE_PDF_DOCUMENT, LogLevel = LogLevelConstants.ERROR)] + public virtual void TestTaggingNotSupported() { + String input = PdfHelper.GetImagesTestDirectory() + "numbers_01.jpg"; + String pdfPath = PdfHelper.GetTargetDirectory() + "taggingNotSupported.pdf"; + Exception e = NUnit.Framework.Assert.Catch(typeof(PdfOcrException), () => PdfHelper.CreatePdf(pdfPath, new + FileInfo(input), new OcrPdfCreatorProperties().SetTagged(true))); + NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfOcrExceptionMessageConstant.CANNOT_CREATE_PDF_DOCUMENT + , PdfOcrExceptionMessageConstant.TAGGING_IS_NOT_SUPPORTED), e.Message); + } + internal class NotImplementedImageRotationHandler : IImageRotationHandler { public virtual ImageData ApplyRotation(ImageData imageData) { throw new Exception("applyRotation is not implemented"); diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestProcessProperties.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestProcessProperties.cs new file mode 100644 index 0000000..9868221 --- /dev/null +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestProcessProperties.cs @@ -0,0 +1,73 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Pdfocr; + +namespace iText.Pdfocr.Helpers { + public class TestProcessProperties : IOcrProcessProperties { + private float cellWidth; + + private float cellHeight; + + private float startX; + + private float startY; + + private int rowCount; + + private int columnCount; + + public TestProcessProperties(int rowCount, int columnCount, float cellWidth, float cellHeight, float startX + , float startY) { + this.rowCount = rowCount; + this.columnCount = columnCount; + this.cellWidth = cellWidth; + this.cellHeight = cellHeight; + this.startX = startX; + this.startY = startY; + } + + public virtual int GetRowCount() { + return rowCount; + } + + public virtual int GetColumnCount() { + return columnCount; + } + + public virtual float GetCellWidth() { + return cellWidth; + } + + public virtual float GetCellHeight() { + return cellHeight; + } + + public virtual float GetStartX() { + return startX; + } + + public virtual float GetStartY() { + return startY; + } + } +} diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestStructureDetectionOcrEngine.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestStructureDetectionOcrEngine.cs new file mode 100644 index 0000000..7970f00 --- /dev/null +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/helpers/TestStructureDetectionOcrEngine.cs @@ -0,0 +1,89 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using System.Collections.Generic; +using System.IO; +using iText.Kernel.Geom; +using iText.Pdfocr; +using iText.Pdfocr.Structuretree; + +namespace iText.Pdfocr.Helpers { + public class TestStructureDetectionOcrEngine : IOcrEngine { + public TestStructureDetectionOcrEngine() { + } + + public virtual IDictionary> DoImageOcr(FileInfo input) { + return null; + } + + public virtual IDictionary> DoImageOcr(FileInfo input, OcrProcessContext ocrProcessContext + ) { + TestProcessProperties processProperties = (TestProcessProperties)ocrProcessContext.GetOcrProcessProperties + (); + IList textItems = new List(); + TableTreeItem table = new TableTreeItem(); + float cellWidth = processProperties.GetCellWidth(); + float cellHeight = processProperties.GetCellHeight(); + float startX = processProperties.GetStartX(); + float startY = processProperties.GetStartY(); + float x = startX; + float y = startY; + for (int i = 0; i < processProperties.GetRowCount(); ++i) { + TableRowTreeItem row = null; + if (i > 0) { + row = new TableRowTreeItem(); + table.AddRow(row); + } + for (int j = 0; j < processProperties.GetColumnCount(); ++j) { + TextInfo textInfo = new TextInfo(i + " " + j, new Rectangle(x, y, cellWidth, cellHeight)); + // Mark the 1st row item as artifacts + if (i == 0) { + textInfo.SetLogicalStructureTreeItem(ArtifactItem.GetInstance()); + } + else { + TableCellTreeItem cell = new TableCellTreeItem(); + row.AddCell(cell); + ParagraphTreeItem paragraph = new ParagraphTreeItem(); + cell.AddChild(paragraph); + SpanTreeItem span = new SpanTreeItem(); + paragraph.AddChild(span); + textInfo.SetLogicalStructureTreeItem(span); + } + textItems.Add(textInfo); + x += cellWidth; + } + x = startX; + y -= cellHeight; + } + IDictionary> result = new Dictionary>(); + result.Put(1, textItems); + return result; + } + + public virtual void CreateTxtFile(IList inputImages, FileInfo txtFile) { + } + + public virtual void CreateTxtFile(IList inputImages, FileInfo txtFile, OcrProcessContext ocrProcessContext + ) { + } + } +} diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/LogicalStructureTreeItemTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/LogicalStructureTreeItemTest.cs new file mode 100644 index 0000000..f2942e4 --- /dev/null +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/LogicalStructureTreeItemTest.cs @@ -0,0 +1,63 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Kernel.Pdf.Tagutils; +using iText.Test; + +namespace iText.Pdfocr.Structuretree { + [NUnit.Framework.Category("UnitTest")] + public class LogicalStructureTreeItemTest : ExtendedITextTest { + [NUnit.Framework.Test] + public virtual void AddChildTest() { + LogicalStructureTreeItem parent = new LogicalStructureTreeItem(); + LogicalStructureTreeItem child1 = new LogicalStructureTreeItem(); + LogicalStructureTreeItem child2 = new LogicalStructureTreeItem(); + child1.AddChild(child2); + parent.AddChild(child1); + parent.AddChild(child2); + NUnit.Framework.Assert.AreEqual(2, parent.GetChildren().Count); + NUnit.Framework.Assert.AreEqual(0, child1.GetChildren().Count); + NUnit.Framework.Assert.AreEqual(parent, child1.GetParent()); + NUnit.Framework.Assert.AreEqual(parent, child2.GetParent()); + } + + [NUnit.Framework.Test] + public virtual void RemoveChildTest() { + LogicalStructureTreeItem parent = new LogicalStructureTreeItem(); + LogicalStructureTreeItem child1 = new LogicalStructureTreeItem(); + LogicalStructureTreeItem child2 = new LogicalStructureTreeItem(); + child1.AddChild(child2); + parent.AddChild(child1); + parent.AddChild(child2); + NUnit.Framework.Assert.IsTrue(parent.RemoveChild(child1)); + NUnit.Framework.Assert.IsFalse(parent.RemoveChild(child1)); + NUnit.Framework.Assert.AreEqual(1, parent.GetChildren().Count); + } + + [NUnit.Framework.Test] + public virtual void AccessibilityPropertiesTest() { + LogicalStructureTreeItem item = new LogicalStructureTreeItem().SetAccessibilityProperties(new DefaultAccessibilityProperties + ("Some role")); + NUnit.Framework.Assert.AreEqual("Some role", item.GetAccessibilityProperties().GetRole()); + } + } +} diff --git a/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/TableTreeStructureTest.cs b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/TableTreeStructureTest.cs new file mode 100644 index 0000000..3e61144 --- /dev/null +++ b/itext.tests/itext.pdfocr.api.tests/itext/pdfocr/structuretree/TableTreeStructureTest.cs @@ -0,0 +1,43 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Test; + +namespace iText.Pdfocr.Structuretree { + [NUnit.Framework.Category("UnitTest")] + public class TableTreeStructureTest : ExtendedITextTest { + [NUnit.Framework.Test] + public virtual void TableTreeTest() { + TableTreeItem table = new TableTreeItem().AddRow(new TableRowTreeItem().AddCell((TableCellTreeItem)new TableCellTreeItem + ().AddChild(new ParagraphTreeItem().AddChild(new SpanTreeItem()))).AddCell((TableCellTreeItem)new TableCellTreeItem + ().AddChild(new ParagraphTreeItem().AddChild(new SpanTreeItem())))).AddRow(new TableRowTreeItem().AddCell + ((TableCellTreeItem)new TableCellTreeItem().AddChild(new ParagraphTreeItem().AddChild(new SpanTreeItem + ()))).AddCell((TableCellTreeItem)new TableCellTreeItem().AddChild(new ParagraphTreeItem().AddChild(new + SpanTreeItem())))); + NUnit.Framework.Assert.AreEqual(2, table.GetChildren().Count); + NUnit.Framework.Assert.AreEqual(2, table.GetChildren()[0].GetChildren().Count); + NUnit.Framework.Assert.AreEqual(1, table.GetChildren()[0].GetChildren()[0].GetChildren().Count); + NUnit.Framework.Assert.AreEqual(1, table.GetChildren()[0].GetChildren()[0].GetChildren()[0].GetChildren(). + Count); + } + } +} diff --git a/itext.tests/itext.pdfocr.api.tests/resources/itext/pdfocr/cmp_tableStructureTree.pdf b/itext.tests/itext.pdfocr.api.tests/resources/itext/pdfocr/cmp_tableStructureTree.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6cc8faa358cc6a455f5509ae3caa3d3fa7725e8b GIT binary patch literal 56033 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 N#!j2IBy8!}{|D7`wCw-@ literal 0 HcmV?d00001 diff --git a/itext/itext.pdfocr.api/itext/pdfocr/IOcrProcessProperties.cs b/itext/itext.pdfocr.api/itext/pdfocr/IOcrProcessProperties.cs new file mode 100644 index 0000000..8a68583 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/IOcrProcessProperties.cs @@ -0,0 +1,30 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +namespace iText.Pdfocr { + /// + /// OCR properties passed to the OCR engine as part of + /// . + /// + public interface IOcrProcessProperties { + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs index be4c270..2d2dbee 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreator.cs @@ -36,6 +36,7 @@ You should have received a copy of the GNU Affero General Public License using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas; using iText.Kernel.Pdf.Layer; +using iText.Kernel.Pdf.Tagutils; using iText.Layout; using iText.Layout.Element; using iText.Layout.Font; @@ -44,6 +45,7 @@ You should have received a copy of the GNU Affero General Public License using iText.Pdfocr.Exceptions; using iText.Pdfocr.Logs; using iText.Pdfocr.Statistics; +using iText.Pdfocr.Structuretree; namespace iText.Pdfocr { /// @@ -193,13 +195,17 @@ public void SetOcrPdfCreatorProperties(OcrPdfCreatorProperties ocrPdfCreatorProp /// /// for PDF/A-3u document /// + /// + /// extra OCR process properties passed to + /// + /// /// /// result PDF/A-3u /// /// object /// public PdfDocument CreatePdfA(IList inputImages, PdfWriter pdfWriter, DocumentProperties documentProperties - , PdfOutputIntent pdfOutputIntent) { + , PdfOutputIntent pdfOutputIntent, IOcrProcessProperties ocrProcessProperties) { LOGGER.LogInformation(MessageFormatUtil.Format(PdfOcrLogMessageConstant.START_OCR_FOR_IMAGES, inputImages. Count)); // create event helper @@ -207,6 +213,7 @@ public PdfDocument CreatePdfA(IList inputImages, PdfWriter pdfWriter, OcrPdfCreatorEventHelper ocrEventHelper = new OcrPdfCreatorEventHelper(pdfSequenceId, ocrPdfCreatorProperties .GetMetaInfo()); OcrProcessContext ocrProcessContext = new OcrProcessContext(ocrEventHelper); + ocrProcessContext.SetOcrProcessProperties(ocrProcessProperties); // map contains: // keys: image files // values: @@ -277,6 +284,113 @@ public PdfDocument CreatePdfA(IList inputImages, PdfWriter pdfWriter, return CreatePdfA(inputImages, pdfWriter, new DocumentProperties(), pdfOutputIntent); } + /// + /// Performs OCR with set parameters using provided + /// + /// and + /// creates PDF using provided + /// + /// , + /// + /// and + /// . + /// + /// + /// Performs OCR with set parameters using provided + /// + /// and + /// creates PDF using provided + /// + /// , + /// + /// and + /// + /// . PDF/A-3u document will be created if + /// provided + /// + /// is not null. + /// + /// NOTE that after executing this method you will have a product event from + /// the both itextcore and pdfOcr. Therefore, use this method only if you need to work + /// with the generated + /// + /// . If you don't need this, use the + /// + /// method. In this case, only the pdfOcr event will be dispatched. + /// + /// + /// + /// + /// of images to be OCRed + /// + /// + /// the + /// + /// object + /// to write final PDF document to + /// + /// document properties + /// + /// + /// + /// for PDF/A-3u document + /// + /// + /// result PDF/A-3u + /// + /// object + /// + public PdfDocument CreatePdfA(IList inputImages, PdfWriter pdfWriter, DocumentProperties documentProperties + , PdfOutputIntent pdfOutputIntent) { + return CreatePdfA(inputImages, pdfWriter, documentProperties, pdfOutputIntent, null); + } + + /// + /// Performs OCR with set parameters using provided + /// + /// and + /// creates PDF using provided + /// . + /// + /// + /// Performs OCR with set parameters using provided + /// + /// and + /// creates PDF using provided + /// . + /// + /// NOTE that after executing this method you will have a product event from + /// the both itextcore and pdfOcr. Therefore, use this method only if you need to work + /// with the generated + /// + /// . If you don't need this, use the + /// + /// method. In this case, only the pdfOcr event will be dispatched. + /// + /// + /// + /// + /// of images to be OCRed + /// + /// + /// the + /// + /// object + /// to write final PDF document to + /// + /// document properties + /// extra OCR process properties passed to OcrProcessContext + /// + /// result + /// + /// object + /// + public PdfDocument CreatePdf(IList inputImages, PdfWriter pdfWriter, DocumentProperties documentProperties + , IOcrProcessProperties ocrProcessProperties) { + return CreatePdfA(inputImages, pdfWriter, documentProperties, null, ocrProcessProperties); + } + /// /// Performs OCR with set parameters using provided /// @@ -318,7 +432,7 @@ public PdfDocument CreatePdfA(IList inputImages, PdfWriter pdfWriter, /// public PdfDocument CreatePdf(IList inputImages, PdfWriter pdfWriter, DocumentProperties documentProperties ) { - return CreatePdfA(inputImages, pdfWriter, documentProperties, null); + return CreatePdfA(inputImages, pdfWriter, documentProperties, null, null); } /// @@ -360,7 +474,7 @@ public PdfDocument CreatePdf(IList inputImages, PdfWriter pdfWriter, D /// object /// public PdfDocument CreatePdf(IList inputImages, PdfWriter pdfWriter) { - return CreatePdfA(inputImages, pdfWriter, new DocumentProperties(), null); + return CreatePdfA(inputImages, pdfWriter, new DocumentProperties(), null, null); } /// @@ -510,7 +624,25 @@ private void AddToCanvas(PdfDocument pdfDocument, Rectangle imageSize, IList flatLogicalTree = new Dictionary(); + if (ocrPdfCreatorProperties.IsTagged()) { + // Logical tree, a list of top items, children can be retrieved out of them + IList logicalTree = new List(); + // A map of leaf LogicalStructureTreeItem's to TextInfo's attached to these leaves + IDictionary> leavesTextInfos = new Dictionary>(); + bool taggedSupported = GetLogicalTree(pageText, logicalTree, leavesTextInfos); + if (!taggedSupported) { + throw new PdfOcrException(PdfOcrExceptionMessageConstant.TAGGING_IS_NOT_SUPPORTED); + } + pdfDocument.SetTagged(); + // Create a map of TextInfo to tag pointers meanwhile creating the required tags. + // Tag pointers are later used to put all the required info into canvas (content stream) + BuildLogicalTreeAndFlatten(logicalTree, leavesTextInfos, new TagTreePointer(pdfDocument).SetPageForTagging + (pdfPage), flatLogicalTree); + } + AddTextToCanvas(imageSize, pageText, flatLogicalTree, canvas, multiplier, pdfPage); } catch (PdfOcrException e) { LOGGER.LogError(MessageFormatUtil.Format(PdfOcrExceptionMessageConstant.CANNOT_CREATE_PDF_DOCUMENT, e.Message @@ -614,6 +746,9 @@ private void AddDataToPdfDocument(IDictionarycanvas to place the image private void AddImageToCanvas(ImageData imageData, Rectangle imageSize, PdfCanvas pdfCanvas) { if (imageData != null) { + if (ocrPdfCreatorProperties.IsTagged()) { + pdfCanvas.OpenTag(new CanvasArtifact()); + } if (ocrPdfCreatorProperties.GetPageSize() == null) { pdfCanvas.AddImageFittedIntoRectangle(imageData, imageSize, false); } @@ -624,6 +759,84 @@ private void AddImageToCanvas(ImageData imageData, Rectangle imageSize, PdfCanva .GetHeight()); pdfCanvas.AddImageFittedIntoRectangle(imageData, rect, false); } + if (ocrPdfCreatorProperties.IsTagged()) { + pdfCanvas.CloseTag(); + } + } + } + + /// + /// + /// + /// if tagging supported by the engine. + /// + [System.ObsoleteAttribute(@"In next major version we need to add boolean taggingSupported() method into IOcrEngine and throw exception in OcrPdfCreator constructor if taggingSupported() returns false but OcrPdfCreatorProperties.getTagged returns true." + )] + private static bool GetLogicalTree(IList textInfos, IList logicalStructureTreeItems + , IDictionary> leavesTextInfos) { + bool taggedSupported = false; + if (textInfos == null) { + return taggedSupported; + } + foreach (TextInfo textInfo in textInfos) { + LogicalStructureTreeItem structTreeItem = textInfo.GetLogicalStructureTreeItem(); + LogicalStructureTreeItem topParent; + if (structTreeItem is ArtifactItem) { + continue; + } + else { + if (structTreeItem != null) { + topParent = GetTopParent(structTreeItem); + taggedSupported = true; + } + else { + structTreeItem = new LogicalStructureTreeItem(); + textInfo.SetLogicalStructureTreeItem(structTreeItem); + topParent = structTreeItem; + } + } + IList textInfosPerStructItem = leavesTextInfos.Get(structTreeItem); + if (textInfosPerStructItem == null) { + textInfosPerStructItem = new List(); + textInfosPerStructItem.Add(textInfo); + leavesTextInfos.Put(structTreeItem, textInfosPerStructItem); + } + else { + textInfosPerStructItem.Add(textInfo); + } + if (!logicalStructureTreeItems.Contains(topParent)) { + logicalStructureTreeItems.Add(topParent); + } + } + return taggedSupported; + } + + private static LogicalStructureTreeItem GetTopParent(LogicalStructureTreeItem structInfo) { + if (structInfo.GetParent() != null) { + return GetTopParent(structInfo.GetParent()); + } + else { + return structInfo; + } + } + + private void BuildLogicalTreeAndFlatten(IList logicalStructureTreeItems, IDictionary + > leavesTextInfos, TagTreePointer tagPointer, IDictionary flatLogicalTree) { + foreach (LogicalStructureTreeItem structTreeItem in logicalStructureTreeItems) { + AccessibilityProperties accessibilityProperties = structTreeItem.GetAccessibilityProperties(); + if (accessibilityProperties == null) { + accessibilityProperties = new DefaultAccessibilityProperties(PdfName.Span.GetValue()); + } + tagPointer.AddTag(accessibilityProperties); + IList textItems = leavesTextInfos.Get(structTreeItem); + if (textItems != null) { + foreach (TextInfo item in textItems) { + flatLogicalTree.Put(item, new TagTreePointer(tagPointer)); + } + } + BuildLogicalTreeAndFlatten(structTreeItem.GetChildren(), leavesTextInfos, tagPointer, flatLogicalTree); + tagPointer.MoveToParent(); } } @@ -633,45 +846,61 @@ private void AddImageToCanvas(ImageData imageData, Rectangle imageSize, PdfCanva /// /// /// text that was found on this image (or on this page) + /// a map of TextInfo to a tag pointer /// canvas to place the text /// coefficient to adjust text placing on canvas - /// page parameters - private void AddTextToCanvas(Rectangle imageSize, IList pageText, PdfCanvas pdfCanvas, float multiplier - , Rectangle pageMediaBox) { - if (pageText != null && pageText.Count > 0) { - Point imageCoordinates = PdfCreatorUtil.CalculateImageCoordinates(ocrPdfCreatorProperties.GetPageSize(), imageSize - ); - foreach (TextInfo item in pageText) { - String line = item.GetText(); - float bboxWidthPt = GetWidthPt(item, multiplier); - float bboxHeightPt = GetHeightPt(item, multiplier); - FontProvider fontProvider = GetOcrPdfCreatorProperties().GetFontProvider(); - String fontFamily = GetOcrPdfCreatorProperties().GetDefaultFontFamily(); - if (LineNotEmpty(line, bboxHeightPt, bboxWidthPt)) { - Document document = new Document(pdfCanvas.GetDocument()); - document.SetFontProvider(fontProvider); - // Scale the text width to fit the OCR bbox - float fontSize = PdfCreatorUtil.CalculateFontSize(document, line, fontFamily, bboxHeightPt, bboxWidthPt); - float lineWidth = PdfCreatorUtil.GetRealLineWidth(document, line, fontFamily, fontSize); - float xOffset = GetXOffsetPt(item, multiplier); - float yOffset = GetYOffsetPt(item, multiplier, imageSize); - iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pageMediaBox); - canvas.SetFontProvider(fontProvider); - Text text = new Text(line).SetHorizontalScaling(bboxWidthPt / lineWidth); - Paragraph paragraph = new Paragraph(text).SetMargin(0); - paragraph.SetFontFamily(fontFamily).SetFontSize(fontSize); - paragraph.SetWidth(bboxWidthPt * 1.5f); - if (ocrPdfCreatorProperties.GetTextColor() != null) { - paragraph.SetFontColor(ocrPdfCreatorProperties.GetTextColor()); - } - else { - paragraph.SetTextRenderingMode(PdfCanvasConstants.TextRenderingMode.INVISIBLE); - } - canvas.ShowTextAligned(paragraph, xOffset + (float)imageCoordinates.x, yOffset + (float)imageCoordinates.y - , TextAlignment.LEFT); - canvas.Close(); + /// current page + private void AddTextToCanvas(Rectangle imageSize, IList pageText, IDictionary flatLogicalTree, PdfCanvas pdfCanvas, float multiplier, PdfPage page) { + if (pageText == null || pageText.Count == 0) { + return; + } + Rectangle pageMediaBox = page.GetMediaBox(); + Point imageCoordinates = PdfCreatorUtil.CalculateImageCoordinates(ocrPdfCreatorProperties.GetPageSize(), imageSize + ); + foreach (TextInfo item in pageText) { + float bboxWidthPt = GetWidthPt(item, multiplier); + float bboxHeightPt = GetHeightPt(item, multiplier); + FontProvider fontProvider = GetOcrPdfCreatorProperties().GetFontProvider(); + String fontFamily = GetOcrPdfCreatorProperties().GetDefaultFontFamily(); + String line = item.GetText(); + if (!LineNotEmpty(line, bboxHeightPt, bboxWidthPt)) { + continue; + } + Document document = new Document(pdfCanvas.GetDocument()); + document.SetFontProvider(fontProvider); + // Scale the text width to fit the OCR bbox + float fontSize = PdfCreatorUtil.CalculateFontSize(document, line, fontFamily, bboxHeightPt, bboxWidthPt); + float lineWidth = PdfCreatorUtil.GetRealLineWidth(document, line, fontFamily, fontSize); + float xOffset = GetXOffsetPt(item, multiplier); + float yOffset = GetYOffsetPt(item, multiplier, imageSize); + TagTreePointer tagPointer = flatLogicalTree.Get(item); + if (tagPointer != null) { + pdfCanvas.OpenTag(tagPointer.GetTagReference()); + } + else { + if (ocrPdfCreatorProperties.IsTagged()) { + pdfCanvas.OpenTag(new CanvasArtifact()); } } + iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pageMediaBox); + canvas.SetFontProvider(fontProvider); + Text text = new Text(line).SetHorizontalScaling(bboxWidthPt / lineWidth); + Paragraph paragraph = new Paragraph(text).SetMargin(0); + paragraph.SetFontFamily(fontFamily).SetFontSize(fontSize); + paragraph.SetWidth(bboxWidthPt * 1.5f); + if (ocrPdfCreatorProperties.GetTextColor() != null) { + paragraph.SetFontColor(ocrPdfCreatorProperties.GetTextColor()); + } + else { + paragraph.SetTextRenderingMode(PdfCanvasConstants.TextRenderingMode.INVISIBLE); + } + canvas.ShowTextAligned(paragraph, xOffset + (float)imageCoordinates.x, yOffset + (float)imageCoordinates.y + , TextAlignment.LEFT); + if (ocrPdfCreatorProperties.IsTagged()) { + pdfCanvas.CloseTag(); + } + canvas.Close(); } } diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs index d14d42a..75482a5 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrPdfCreatorProperties.cs @@ -116,6 +116,9 @@ public class OcrPdfCreatorProperties { private IMetaInfo metaInfo; + /// Indicates whether the created pdf is tagged or not. + private bool tagged = false; + /// /// Creates a new /// @@ -469,6 +472,36 @@ public virtual iText.Pdfocr.OcrPdfCreatorProperties SetImageRotationHandler(IIma return this; } + /// Defines whether pdf document should be tagged or not. + /// + /// + /// + /// if the result pdf is expected to be tagged, + /// + /// otherwise. + /// + /// + /// this + /// + /// instance. + /// + public virtual iText.Pdfocr.OcrPdfCreatorProperties SetTagged(bool tagged) { + this.tagged = tagged; + return this; + } + + /// Retrieve information on whether pdf document should be tagged or not. + /// + /// + /// + /// if the result pdf is expected to be tagged, + /// + /// otherwise. + /// + public virtual bool IsTagged() { + return tagged; + } + /// /// Set meta info for this /// . diff --git a/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs b/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs index 5671eb9..052fe89 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/OcrProcessContext.cs @@ -25,6 +25,8 @@ namespace iText.Pdfocr { public class OcrProcessContext { private AbstractPdfOcrEventHelper ocrEventHelper; + private IOcrProcessProperties ocrProcessProperties; + /// Creates an instance of ocr process context /// helper class for working with events public OcrProcessContext(AbstractPdfOcrEventHelper eventHelper) { @@ -45,5 +47,17 @@ public virtual AbstractPdfOcrEventHelper GetOcrEventHelper() { public virtual void SetOcrEventHelper(AbstractPdfOcrEventHelper eventHelper) { this.ocrEventHelper = eventHelper; } + + /// Set extra OCR process properties. + /// extra OCR process properties. + internal virtual void SetOcrProcessProperties(IOcrProcessProperties ocrProcessProperties) { + this.ocrProcessProperties = ocrProcessProperties; + } + + /// Get extra OCR process properties. + /// extra OCR process properties. + public virtual IOcrProcessProperties GetOcrProcessProperties() { + return ocrProcessProperties; + } } } diff --git a/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs b/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs index 9f0e07a..4f94fa6 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/TextInfo.cs @@ -22,6 +22,7 @@ You should have received a copy of the GNU Affero General Public License */ using System; using iText.Kernel.Geom; +using iText.Pdfocr.Structuretree; namespace iText.Pdfocr { /// @@ -38,6 +39,13 @@ public class TextInfo { /// private Rectangle bboxRect; + /// + /// If LogicalStructureTreeItem is set, then + /// + /// s are expected to be in logical order. + /// + private LogicalStructureTreeItem logicalStructureTreeItem; + /// /// Creates a new /// @@ -104,5 +112,27 @@ public virtual Rectangle GetBboxRect() { public virtual void SetBboxRect(Rectangle bbox) { this.bboxRect = new Rectangle(bbox); } + + /// Retrieves structure tree item for the text item. + /// structure tree item. + public virtual LogicalStructureTreeItem GetLogicalStructureTreeItem() { + return logicalStructureTreeItem; + } + + /// Sets logical structure tree parent item for the text info. + /// + /// Sets logical structure tree parent item for the text info. It allows to organize text chunks + /// into logical hierarchy, e.g. specify document paragraphs, tables, etc. + /// + /// If LogicalStructureTreeItem is set, then the list of + /// + /// s in + /// + /// return value is expected to be in logical order. + /// + /// structure tree item. + public virtual void SetLogicalStructureTreeItem(LogicalStructureTreeItem logicalStructureTreeItem) { + this.logicalStructureTreeItem = logicalStructureTreeItem; + } } } diff --git a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs index f2e2857..3ac996d 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/exceptions/PdfOcrExceptionMessageConstant.cs @@ -35,6 +35,8 @@ public class PdfOcrExceptionMessageConstant { public const String STATISTICS_EVENT_TYPE_IS_NOT_DETECTED = "Statistics event type is not detected."; + public const String TAGGING_IS_NOT_SUPPORTED = "Tagging is not supported by the OCR engine."; + private PdfOcrExceptionMessageConstant() { } //Private constructor will prevent the instantiation of this class directly diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs new file mode 100644 index 0000000..4c715a3 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs @@ -0,0 +1,27 @@ +namespace iText.Pdfocr.Structuretree { + /// This class represents artifact structure tree item. + /// + /// This class represents artifact structure tree item. Attaching such item to the text info means that + /// the text will be marked as artifact. + /// + public sealed class ArtifactItem : LogicalStructureTreeItem { + private static readonly iText.Pdfocr.Structuretree.ArtifactItem ARTIFACT_INSTANCE = new iText.Pdfocr.Structuretree.ArtifactItem + (); + + private ArtifactItem() + : base() { + } + + /// + /// Retrieve an instance of + /// . + /// + /// + /// an instance of + /// . + /// + public static iText.Pdfocr.Structuretree.ArtifactItem GetInstance() { + return ARTIFACT_INSTANCE; + } + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/LogicalStructureTreeItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/LogicalStructureTreeItem.cs new file mode 100644 index 0000000..cfd0156 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/LogicalStructureTreeItem.cs @@ -0,0 +1,125 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using System.Collections.Generic; +using iText.Kernel.Pdf.Tagutils; + +namespace iText.Pdfocr.Structuretree { + /// This class represents structure tree item of the text item put into the pdf document. + /// + /// This class represents structure tree item of the text item put into the pdf document. + /// See + /// . + /// + public class LogicalStructureTreeItem { + private AccessibilityProperties accessibilityProperties; + + private IList children = new List(); + + private iText.Pdfocr.Structuretree.LogicalStructureTreeItem parent; + + /// + /// Instantiate a new + /// + /// instance. + /// + public LogicalStructureTreeItem() + : this(null) { + } + + /// + /// Instantiate a new + /// + /// instance. + /// + /// properties to define and describe pdf structure elements. + public LogicalStructureTreeItem(AccessibilityProperties accessibilityProperties) { + this.accessibilityProperties = accessibilityProperties; + } + + /// Retrieve structure tree element's properties. + /// structure tree element's properties. + public virtual AccessibilityProperties GetAccessibilityProperties() { + return accessibilityProperties; + } + + /// Set structure tree element's properties. + /// structure tree element's properties. + /// + /// this + /// + /// instance. + /// + public virtual iText.Pdfocr.Structuretree.LogicalStructureTreeItem SetAccessibilityProperties(AccessibilityProperties + accessibilityProperties) { + this.accessibilityProperties = accessibilityProperties; + return this; + } + + /// Retrieve parent structure tree item. + /// parent structure tree item. + public virtual iText.Pdfocr.Structuretree.LogicalStructureTreeItem GetParent() { + return parent; + } + + /// Add child structure tree item. + /// child structure tree item. + /// + /// this + /// + /// instance. + /// + public virtual iText.Pdfocr.Structuretree.LogicalStructureTreeItem AddChild(iText.Pdfocr.Structuretree.LogicalStructureTreeItem + child) { + children.Add(child); + if (child.GetParent() != null) { + child.GetParent().RemoveChild(child); + } + child.parent = this; + return this; + } + + /// Remove child structure tree item. + /// child structure tree item. + /// + /// + /// + /// if the child was removed, + /// + /// otherwise. + /// + public virtual bool RemoveChild(iText.Pdfocr.Structuretree.LogicalStructureTreeItem child) { + if (children.Remove(child)) { + child.parent = null; + return true; + } + return false; + } + + /// Retrieve all child structure tree items. + /// all child structure tree items. + public virtual IList GetChildren() { + return children; + } + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ParagraphTreeItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ParagraphTreeItem.cs new file mode 100644 index 0000000..10e1b1d --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ParagraphTreeItem.cs @@ -0,0 +1,38 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Kernel.Pdf.Tagging; +using iText.Kernel.Pdf.Tagutils; + +namespace iText.Pdfocr.Structuretree { + /// A convenience class to associate certain text items with the paragraph structure item. + public class ParagraphTreeItem : LogicalStructureTreeItem { + /// + /// Instantiate a new + /// + /// instance. + /// + public ParagraphTreeItem() + : base(new DefaultAccessibilityProperties(StandardRoles.P)) { + } + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/SpanTreeItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/SpanTreeItem.cs new file mode 100644 index 0000000..6473696 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/SpanTreeItem.cs @@ -0,0 +1,38 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Kernel.Pdf.Tagging; +using iText.Kernel.Pdf.Tagutils; + +namespace iText.Pdfocr.Structuretree { + /// A convenience class to associate certain text items with the span structure item. + public class SpanTreeItem : LogicalStructureTreeItem { + /// + /// Instantiate a new + /// + /// instance. + /// + public SpanTreeItem() + : base(new DefaultAccessibilityProperties(StandardRoles.SPAN)) { + } + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableCellTreeItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableCellTreeItem.cs new file mode 100644 index 0000000..ef022a1 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableCellTreeItem.cs @@ -0,0 +1,38 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Kernel.Pdf.Tagging; +using iText.Kernel.Pdf.Tagutils; + +namespace iText.Pdfocr.Structuretree { + /// A convenience class to associate certain text items with the table cell structure item. + public class TableCellTreeItem : LogicalStructureTreeItem { + /// + /// Instantiate a new + /// + /// instance. + /// + public TableCellTreeItem() + : base(new DefaultAccessibilityProperties(StandardRoles.TD)) { + } + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableRowTreeItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableRowTreeItem.cs new file mode 100644 index 0000000..8580a83 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableRowTreeItem.cs @@ -0,0 +1,50 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Kernel.Pdf.Tagging; +using iText.Kernel.Pdf.Tagutils; + +namespace iText.Pdfocr.Structuretree { + /// A convenience class to associate certain text items with the table row structure item. + public class TableRowTreeItem : LogicalStructureTreeItem { + /// + /// Instantiate a new + /// + /// instance. + /// + public TableRowTreeItem() + : base(new DefaultAccessibilityProperties(StandardRoles.TR)) { + } + + /// Add a new table cell structure tree item to the table row. + /// table cell structure tree item to be added. + /// + /// this + /// + /// instance. + /// + public virtual iText.Pdfocr.Structuretree.TableRowTreeItem AddCell(TableCellTreeItem cellItem) { + AddChild(cellItem); + return this; + } + } +} diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableTreeItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableTreeItem.cs new file mode 100644 index 0000000..1887871 --- /dev/null +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/TableTreeItem.cs @@ -0,0 +1,50 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +using iText.Kernel.Pdf.Tagging; +using iText.Kernel.Pdf.Tagutils; + +namespace iText.Pdfocr.Structuretree { + /// A convenience class to associate certain text items with the table structure item. + public class TableTreeItem : LogicalStructureTreeItem { + /// + /// Instantiate a new + /// + /// instance. + /// + public TableTreeItem() + : base(new DefaultAccessibilityProperties(StandardRoles.TABLE)) { + } + + /// Add a new row structure tree item to the table. + /// row structure tree item to be added. + /// + /// this + /// + /// instance. + /// + public virtual iText.Pdfocr.Structuretree.TableTreeItem AddRow(TableRowTreeItem rowItem) { + AddChild(rowItem); + return this; + } + } +} diff --git a/port-hash b/port-hash index 61f20ca..1c19b15 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -a74397b9f7e5a4e3775df9002c7cec3aaf338c2a +8a36e7d56f9e498db1a4c5e51c7fb8bebb5715a4 From 0a04d04e5f9698f686097c977e6f2a74d9420512 Mon Sep 17 00:00:00 2001 From: iText Software Date: Wed, 24 Jan 2024 06:08:50 +0000 Subject: [PATCH 7/8] Add missing copyright headers Autoported commit. Original commit hash: [713f1d8] --- .../pdfocr/structuretree/ArtifactItem.cs | 22 +++++++++++++++++++ port-hash | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs index 4c715a3..e0f1b7c 100644 --- a/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs +++ b/itext/itext.pdfocr.api/itext/pdfocr/structuretree/ArtifactItem.cs @@ -1,3 +1,25 @@ +/* +This file is part of the iText (R) project. +Copyright (c) 1998-2024 Apryse Group NV +Authors: Apryse Software. + +This program is offered under a commercial and under the AGPL license. +For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below. + +AGPL licensing: +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ namespace iText.Pdfocr.Structuretree { /// This class represents artifact structure tree item. /// diff --git a/port-hash b/port-hash index 1c19b15..c0e8561 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -8a36e7d56f9e498db1a4c5e51c7fb8bebb5715a4 +713f1d81a78b8ccd722fa0a7eca82e85ce9cf373 From e6b9ac26cf8e0293213485d4952a4e919e2802b9 Mon Sep 17 00:00:00 2001 From: Apryse Software Date: Tue, 30 Jan 2024 12:39:01 +0000 Subject: [PATCH 8/8] [RELEASE] pdfOCR 3.0.2 --- doxyfile | 2 +- .../itext.pdfocr.api.tests/Properties/AssemblyInfo.cs | 2 +- .../itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj | 4 ++-- .../Properties/AssemblyInfo.cs | 2 +- .../itext.pdfocr.tesseract4.tests.csproj | 4 ++-- itext/itext.pdfocr.api/Properties/AssemblyInfo.cs | 2 +- itext/itext.pdfocr.api/itext.pdfocr.api.csproj | 2 +- itext/itext.pdfocr.api/pdfocr-api.nuspec | 6 +++--- itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs | 2 +- .../tesseract4/actions/data/PdfOcrTesseract4ProductData.cs | 2 +- itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec | 6 +++--- port-hash | 2 +- 12 files changed, 18 insertions(+), 18 deletions(-) diff --git a/doxyfile b/doxyfile index c3ee5ee..06dcdbe 100644 --- a/doxyfile +++ b/doxyfile @@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "pdfOCR VERSION_PLACEHOLDER API" +PROJECT_NAME = "pdfOCR 3.0.2 API" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version diff --git a/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs b/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs index f3eeaa3..9628aa2 100644 --- a/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs +++ b/itext.tests/itext.pdfocr.api.tests/Properties/AssemblyInfo.cs @@ -17,4 +17,4 @@ [assembly: AssemblyVersion("3.0.2.0")] [assembly: AssemblyFileVersion("3.0.2.0")] -[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] +[assembly: AssemblyInformationalVersion("3.0.2")] diff --git a/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj b/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj index 1446b4a..d4f8850 100644 --- a/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj +++ b/itext.tests/itext.pdfocr.api.tests/itext.pdfocr.api.tests.csproj @@ -25,9 +25,9 @@ - + - + diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs b/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs index 554a1dd..3e21341 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs +++ b/itext.tests/itext.pdfocr.tesseract4.tests/Properties/AssemblyInfo.cs @@ -17,4 +17,4 @@ [assembly: AssemblyVersion("3.0.2.0")] [assembly: AssemblyFileVersion("3.0.2.0")] -[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] +[assembly: AssemblyInformationalVersion("3.0.2")] diff --git a/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj b/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj index 0c21c41..831a886 100644 --- a/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj +++ b/itext.tests/itext.pdfocr.tesseract4.tests/itext.pdfocr.tesseract4.tests.csproj @@ -26,9 +26,9 @@ - + - + diff --git a/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs b/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs index 0a34927..2cd884e 100644 --- a/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs +++ b/itext/itext.pdfocr.api/Properties/AssemblyInfo.cs @@ -16,7 +16,7 @@ [assembly: AssemblyVersion("3.0.2.0")] [assembly: AssemblyFileVersion("3.0.2.0")] -[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] +[assembly: AssemblyInformationalVersion("3.0.2")] [assembly: InternalsVisibleTo("itext.pdfocr.api.tests, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001008b21ed5b3fc1c1" + "1996390981fe22bbe71a39a9e11d3c2cefddd6ee92920fa871f9666ae0fa941af0280d0653df04" + diff --git a/itext/itext.pdfocr.api/itext.pdfocr.api.csproj b/itext/itext.pdfocr.api/itext.pdfocr.api.csproj index 8ef9900..6e1943e 100644 --- a/itext/itext.pdfocr.api/itext.pdfocr.api.csproj +++ b/itext/itext.pdfocr.api/itext.pdfocr.api.csproj @@ -30,7 +30,7 @@ - + diff --git a/itext/itext.pdfocr.api/pdfocr-api.nuspec b/itext/itext.pdfocr.api/pdfocr-api.nuspec index a6d90bd..0d06e07 100644 --- a/itext/itext.pdfocr.api/pdfocr-api.nuspec +++ b/itext/itext.pdfocr.api/pdfocr-api.nuspec @@ -2,7 +2,7 @@ itext.pdfocr.api - 3.0.2-SNAPSHOT + 3.0.2 iText pdfOcr Apryse Software Apryse Software @@ -18,7 +18,7 @@ - + @@ -30,4 +30,4 @@ - + \ No newline at end of file diff --git a/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs b/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs index 12e8588..497e6c9 100644 --- a/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs +++ b/itext/itext.pdfocr.tesseract4/Properties/AssemblyInfo.cs @@ -16,7 +16,7 @@ [assembly: AssemblyVersion("3.0.2.0")] [assembly: AssemblyFileVersion("3.0.2.0")] -[assembly: AssemblyInformationalVersion("3.0.2-SNAPSHOT")] +[assembly: AssemblyInformationalVersion("3.0.2")] [assembly: InternalsVisibleTo("itext.pdfocr.tesseract4.tests, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001008b21ed5b3fc1c1" + "1996390981fe22bbe71a39a9e11d3c2cefddd6ee92920fa871f9666ae0fa941af0280d0653df04" + diff --git a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs index ac074ed..68c0304 100644 --- a/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs +++ b/itext/itext.pdfocr.tesseract4/itext/pdfocr/tesseract4/actions/data/PdfOcrTesseract4ProductData.cs @@ -34,7 +34,7 @@ public class PdfOcrTesseract4ProductData { private const String PDF_OCR_TESSERACT4_PUBLIC_PRODUCT_NAME = "pdfOCR-Tesseract4"; - private const String PDF_OCR_VERSION = "3.0.2-SNAPSHOT"; + private const String PDF_OCR_VERSION = "3.0.2"; private const int PDF_OCR_COPYRIGHT_SINCE = 2000; diff --git a/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec b/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec index 8d436ad..f9e829b 100644 --- a/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec +++ b/itext/itext.pdfocr.tesseract4/pdfocr-tesseract4.nuspec @@ -2,7 +2,7 @@ itext.pdfocr.tesseract4 - 3.0.2-SNAPSHOT + 3.0.2 iText pdfOcr Apryse Software Apryse Software @@ -18,7 +18,7 @@ - + @@ -38,4 +38,4 @@ - + \ No newline at end of file diff --git a/port-hash b/port-hash index c0e8561..9e2b362 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -713f1d81a78b8ccd722fa0a7eca82e85ce9cf373 +151cd11a394f65e278ed1cafd7d8a24a461940ad