From 677d674a2c9b3b518071d9deb7c601cc2c6741e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 15:40:07 +0000 Subject: [PATCH 01/64] create branch for 3.0.x versions git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911654 13f79535-47bb-0310-9956-ffa450edef68 -- Gitee From 63d1fe9a8bf51387a1135639ddf8c4f521557ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:16:27 +0000 Subject: [PATCH 02/64] [maven-release-plugin] prepare release 3.0.0 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911657 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index a824268e8d..0691d06469 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index e9f257e0ab..5ac7e0525a 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index dd92396e10..431c25693f 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index b37284c900..3d0b5ac4ef 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 909b78d589..4f45bfedc9 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index f98b866139..9c1bb29769 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 1b911d4a89..182b4e2d4b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0/trunk diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 4529bdcd00..ccea2ff3df 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 6089531e5f..50708ce439 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - http://svn.apache.org/viewvc/pdfbox/trunk + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 98ed06b617..684951c908 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 0a4ab6879b..59ec2eedfd 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 054c023d48..16886e1df3 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 487c96f8d9..e635aab8d6 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml -- Gitee From 9b38811e0651684e11ae3f62cc7cfd1763a6ef4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:16:31 +0000 Subject: [PATCH 03/64] [maven-release-plugin] prepare for next development iteration git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911659 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 0691d06469..931c7e8c26 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 5ac7e0525a..7fdf24b3f0 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index 431c25693f..f5c1aeabc3 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index 3d0b5ac4ef..e03bc1ee3a 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 4f45bfedc9..282a2da9d4 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 9c1bb29769..97549912ef 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 182b4e2d4b..0179b75f3a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk + http://svn.apache.org/viewvc/pdfbox/trunk diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index ccea2ff3df..44a0d7dba7 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 50708ce439..463107cfed 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 + http://svn.apache.org/viewvc/pdfbox/trunk diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 684951c908..bd0db46472 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 59ec2eedfd..1cb2b617d6 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 16886e1df3..e6a3634a28 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index e635aab8d6..7d9b1e70a0 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml -- Gitee From 58f653bbc617b7aab19b022a239dfb8368fccf4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:33:14 +0000 Subject: [PATCH 04/64] rollback first release attempt git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911660 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 2 +- pdfbox/pom.xml | 2 +- pom.xml | 2 +- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 931c7e8c26..a824268e8d 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 7fdf24b3f0..e9f257e0ab 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index f5c1aeabc3..dd92396e10 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index e03bc1ee3a..b37284c900 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 282a2da9d4..909b78d589 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 97549912ef..f98b866139 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 0179b75f3a..1b911d4a89 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT pom PDFBox parent diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 44a0d7dba7..4529bdcd00 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 463107cfed..6089531e5f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT parent/pom.xml diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index bd0db46472..98ed06b617 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 1cb2b617d6..0a4ab6879b 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index e6a3634a28..054c023d48 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 7d9b1e70a0..487c96f8d9 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml -- Gitee From feec343f5f17f9f560799aab022f61c8fc761471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:38:43 +0000 Subject: [PATCH 05/64] [maven-release-plugin] prepare release 3.0.0 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911661 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index a824268e8d..0691d06469 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index e9f257e0ab..5ac7e0525a 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index dd92396e10..431c25693f 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index b37284c900..3d0b5ac4ef 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 909b78d589..4f45bfedc9 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index f98b866139..9c1bb29769 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 1b911d4a89..182b4e2d4b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0/trunk diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 4529bdcd00..ccea2ff3df 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 6089531e5f..50708ce439 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - http://svn.apache.org/viewvc/pdfbox/trunk + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 98ed06b617..684951c908 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 0a4ab6879b..59ec2eedfd 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 054c023d48..16886e1df3 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 487c96f8d9..e635aab8d6 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml -- Gitee From 20719ab47d7d039952669546ca24b8f011a1976a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:38:48 +0000 Subject: [PATCH 06/64] [maven-release-plugin] prepare for next development iteration git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911663 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 0691d06469..931c7e8c26 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 5ac7e0525a..7fdf24b3f0 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index 431c25693f..f5c1aeabc3 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index 3d0b5ac4ef..e03bc1ee3a 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 4f45bfedc9..282a2da9d4 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 9c1bb29769..97549912ef 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 182b4e2d4b..0179b75f3a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/trunk - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk + http://svn.apache.org/viewvc/pdfbox/trunk diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index ccea2ff3df..44a0d7dba7 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 50708ce439..463107cfed 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 + http://svn.apache.org/viewvc/pdfbox/trunk diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 684951c908..bd0db46472 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 59ec2eedfd..1cb2b617d6 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 16886e1df3..e6a3634a28 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index e635aab8d6..7d9b1e70a0 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml -- Gitee From 34fe63141bbd03e20d90be8c77de7638835e8bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:43:04 +0000 Subject: [PATCH 07/64] rollback second release attempt git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911664 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 2 +- pdfbox/pom.xml | 2 +- pom.xml | 2 +- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 931c7e8c26..a824268e8d 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 7fdf24b3f0..e9f257e0ab 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index f5c1aeabc3..dd92396e10 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index e03bc1ee3a..b37284c900 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 282a2da9d4..909b78d589 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 97549912ef..f98b866139 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 0179b75f3a..1b911d4a89 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT pom PDFBox parent diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 44a0d7dba7..4529bdcd00 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 463107cfed..6089531e5f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT parent/pom.xml diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index bd0db46472..98ed06b617 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 1cb2b617d6..0a4ab6879b 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index e6a3634a28..054c023d48 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 7d9b1e70a0..487c96f8d9 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml -- Gitee From d3a6ed0d7bc043961d37ed8ad42413fbea9008c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:48:50 +0000 Subject: [PATCH 08/64] update scm connection git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911665 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1b911d4a89..41159967af 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -554,8 +554,8 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 + https://svn.apache.org/viewvc/maven/pom/branches/3.0 -- Gitee From 1199c0d62986c7aed8d33774c2741da74ee7e7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:52:24 +0000 Subject: [PATCH 09/64] [maven-release-plugin] prepare release 3.0.0 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911666 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index a824268e8d..0691d06469 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index e9f257e0ab..5ac7e0525a 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index dd92396e10..431c25693f 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index b37284c900..3d0b5ac4ef 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 909b78d589..4f45bfedc9 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index f98b866139..9c1bb29769 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 41159967af..775e73f6e2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 - scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 - https://svn.apache.org/viewvc/maven/pom/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/3.0.0/3.0 + scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/3.0.0/3.0 + https://svn.apache.org/viewvc/maven/pom/tags/3.0.0/3.0 diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 4529bdcd00..ccea2ff3df 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 6089531e5f..50708ce439 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - http://svn.apache.org/viewvc/pdfbox/trunk + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 98ed06b617..684951c908 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 0a4ab6879b..59ec2eedfd 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 054c023d48..16886e1df3 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 487c96f8d9..e635aab8d6 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml -- Gitee From a24ba5ba544f91c18bac62e6389d04972f6f2bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 17:56:46 +0000 Subject: [PATCH 10/64] rollback htird release attempt git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911667 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 0691d06469..a824268e8d 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 5ac7e0525a..e9f257e0ab 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index 431c25693f..dd92396e10 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index 3d0b5ac4ef..b37284c900 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 4f45bfedc9..909b78d589 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 9c1bb29769..f98b866139 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 775e73f6e2..41159967af 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/3.0.0/3.0 - scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/3.0.0/3.0 - https://svn.apache.org/viewvc/maven/pom/tags/3.0.0/3.0 + scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 + https://svn.apache.org/viewvc/maven/pom/branches/3.0 diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index ccea2ff3df..4529bdcd00 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 50708ce439..6089531e5f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 + http://svn.apache.org/viewvc/pdfbox/trunk diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 684951c908..98ed06b617 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 59ec2eedfd..0a4ab6879b 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 16886e1df3..054c023d48 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index e635aab8d6..487c96f8d9 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.0-SNAPSHOT ../parent/pom.xml -- Gitee From a98cbcc7d73f4442e35d8d409f8fcc0110ceadae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:02:12 +0000 Subject: [PATCH 11/64] fix scm connection git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911669 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 41159967af..24bf6ab13c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -554,8 +554,8 @@ - scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 - scm:svn:https://svn.apache.org/repos/asf/maven/pom/branches/3.0 - https://svn.apache.org/viewvc/maven/pom/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 + https://svn.apache.org/viewvc/pdfbox/branches/3.0 -- Gitee From 2857f028246e8799dc2b7e823236f28e741f4a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:06:23 +0000 Subject: [PATCH 12/64] [maven-release-plugin] prepare release 3.0.0 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911670 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index a824268e8d..0691d06469 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index e9f257e0ab..5ac7e0525a 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index dd92396e10..431c25693f 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index b37284c900..3d0b5ac4ef 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 909b78d589..4f45bfedc9 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index f98b866139..9c1bb29769 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 24bf6ab13c..37c3c863c7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 - https://svn.apache.org/viewvc/pdfbox/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/3.0 + https://svn.apache.org/viewvc/pdfbox/tags/3.0.0/3.0 diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 4529bdcd00..ccea2ff3df 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 6089531e5f..50708ce439 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - http://svn.apache.org/viewvc/pdfbox/trunk + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 98ed06b617..684951c908 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 0a4ab6879b..59ec2eedfd 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 054c023d48..16886e1df3 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 487c96f8d9..e635aab8d6 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml -- Gitee From 967bcc4b3a575c7c7eb36fe09f41ad399cb69cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:06:27 +0000 Subject: [PATCH 13/64] [maven-release-plugin] prepare for next development iteration git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911672 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 ++++---- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 0691d06469..931c7e8c26 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 5ac7e0525a..7fdf24b3f0 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index 431c25693f..f5c1aeabc3 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index 3d0b5ac4ef..e03bc1ee3a 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 4f45bfedc9..282a2da9d4 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 9c1bb29769..97549912ef 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 37c3c863c7..367d97f1c6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT pom PDFBox parent @@ -554,8 +554,8 @@ - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/3.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0/3.0 - https://svn.apache.org/viewvc/pdfbox/tags/3.0.0/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 + https://svn.apache.org/viewvc/pdfbox/branches/3.0 diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index ccea2ff3df..44a0d7dba7 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 50708ce439..463107cfed 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT parent/pom.xml @@ -34,12 +34,12 @@ - scm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 + http://svn.apache.org/viewvc/pdfbox/trunk diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 684951c908..bd0db46472 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 59ec2eedfd..1cb2b617d6 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 16886e1df3..e6a3634a28 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index e635aab8d6..7d9b1e70a0 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml -- Gitee From 6ba62d14ad51f96ee12e8d65c6d42fca8d124fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:11:35 +0000 Subject: [PATCH 14/64] rollback forth release attempt git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911674 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 2 +- pdfbox/pom.xml | 2 +- pom.xml | 2 +- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 931c7e8c26..a824268e8d 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 7fdf24b3f0..e9f257e0ab 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index f5c1aeabc3..dd92396e10 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index e03bc1ee3a..b37284c900 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 282a2da9d4..909b78d589 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 97549912ef..f98b866139 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 367d97f1c6..24bf6ab13c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT pom PDFBox parent diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 44a0d7dba7..4529bdcd00 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 463107cfed..6089531e5f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT parent/pom.xml diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index bd0db46472..98ed06b617 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 1cb2b617d6..0a4ab6879b 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index e6a3634a28..054c023d48 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 7d9b1e70a0..487c96f8d9 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.1-SNAPSHOT + 3.0.0-SNAPSHOT ../parent/pom.xml -- Gitee From d81141cbefab812a42e2cbc233019106151d8b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:15:23 +0000 Subject: [PATCH 15/64] eliminate duplicate scm definitions git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911675 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 5 ----- pom.xml | 10 +++------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 24bf6ab13c..1a2d59e6ea 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -553,9 +553,4 @@ - - scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 - https://svn.apache.org/viewvc/pdfbox/branches/3.0 - diff --git a/pom.xml b/pom.xml index 6089531e5f..293b55b6b9 100644 --- a/pom.xml +++ b/pom.xml @@ -33,13 +33,9 @@ Apache PDFBox - - scm:svn:http://svn.apache.org/repos/asf/pdfbox/trunk - - - scm:svn:https://svn.apache.org/repos/asf/pdfbox/trunk - - http://svn.apache.org/viewvc/pdfbox/trunk + cm:svn:http://svn.apache.org/repos/asf/pdfbox/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 + http://svn.apache.org/viewvc/pdfbox/branches/3.0 -- Gitee From a1e505877bea35b4877d297a5ecc5577b05f3874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:18:50 +0000 Subject: [PATCH 16/64] [maven-release-plugin] prepare release 3.0.0 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911676 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 8 +++++++- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index a824268e8d..0691d06469 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index e9f257e0ab..5ac7e0525a 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index dd92396e10..431c25693f 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index b37284c900..3d0b5ac4ef 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 909b78d589..4f45bfedc9 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index f98b866139..9c1bb29769 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 1a2d59e6ea..21e186c835 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 pom PDFBox parent @@ -553,4 +553,10 @@ + + + scm:git:https://gitbox.apache.org/repos/asf/maven-apache-parent.git/pdfbox-parent/tags/3.0.0/pdfbox-parent + scm:git:https://gitbox.apache.org/repos/asf/maven-apache-parent.git/pdfbox-parent/tags/3.0.0/pdfbox-parent + https://github.com/apache/maven-apache-parent/tree/apache-29/pdfbox-parent/tags/3.0.0/pdfbox-parent + diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 4529bdcd00..ccea2ff3df 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 293b55b6b9..9efe273998 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 parent/pom.xml @@ -33,9 +33,9 @@ Apache PDFBox - cm:svn:http://svn.apache.org/repos/asf/pdfbox/branches/3.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 - http://svn.apache.org/viewvc/pdfbox/branches/3.0 + cm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 + http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 98ed06b617..684951c908 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 0a4ab6879b..59ec2eedfd 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 054c023d48..16886e1df3 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index 487c96f8d9..e635aab8d6 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0-SNAPSHOT + 3.0.0 ../parent/pom.xml -- Gitee From a723dc7b54f29b72d224638981bc39a123b6a1e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 14 Aug 2023 18:18:54 +0000 Subject: [PATCH 17/64] [maven-release-plugin] prepare for next development iteration git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911678 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 2 +- examples/pom.xml | 2 +- fontbox/pom.xml | 2 +- io/pom.xml | 2 +- parent/pom.xml | 9 +-------- pdfbox/pom.xml | 2 +- pom.xml | 8 ++++---- preflight-app/pom.xml | 2 +- preflight/pom.xml | 2 +- tools/pom.xml | 2 +- xmpbox/pom.xml | 2 +- 13 files changed, 16 insertions(+), 23 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 0691d06469..931c7e8c26 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 5ac7e0525a..7fdf24b3f0 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/debugger/pom.xml b/debugger/pom.xml index 431c25693f..f5c1aeabc3 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/examples/pom.xml b/examples/pom.xml index 3d0b5ac4ef..e03bc1ee3a 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/fontbox/pom.xml b/fontbox/pom.xml index 4f45bfedc9..282a2da9d4 100644 --- a/fontbox/pom.xml +++ b/fontbox/pom.xml @@ -21,7 +21,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/io/pom.xml b/io/pom.xml index 9c1bb29769..97549912ef 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index 21e186c835..36e1f2cda3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -29,7 +29,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT pom PDFBox parent @@ -552,11 +552,4 @@ - - - - scm:git:https://gitbox.apache.org/repos/asf/maven-apache-parent.git/pdfbox-parent/tags/3.0.0/pdfbox-parent - scm:git:https://gitbox.apache.org/repos/asf/maven-apache-parent.git/pdfbox-parent/tags/3.0.0/pdfbox-parent - https://github.com/apache/maven-apache-parent/tree/apache-29/pdfbox-parent/tags/3.0.0/pdfbox-parent - diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index ccea2ff3df..44a0d7dba7 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/pom.xml b/pom.xml index 9efe273998..7c528b2523 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT parent/pom.xml @@ -33,9 +33,9 @@ Apache PDFBox - cm:svn:http://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - scm:svn:https://svn.apache.org/repos/asf/pdfbox/tags/3.0.0 - http://svn.apache.org/viewvc/pdfbox/tags/3.0.0 + cm:svn:http://svn.apache.org/repos/asf/pdfbox/branches/3.0 + scm:svn:https://svn.apache.org/repos/asf/pdfbox/branches/3.0 + http://svn.apache.org/viewvc/pdfbox/branches/3.0 diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index 684951c908..bd0db46472 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/preflight/pom.xml b/preflight/pom.xml index 59ec2eedfd..1cb2b617d6 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -26,7 +26,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 16886e1df3..e6a3634a28 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -23,7 +23,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml diff --git a/xmpbox/pom.xml b/xmpbox/pom.xml index e635aab8d6..7d9b1e70a0 100644 --- a/xmpbox/pom.xml +++ b/xmpbox/pom.xml @@ -27,7 +27,7 @@ org.apache.pdfbox pdfbox-parent - 3.0.0 + 3.0.1-SNAPSHOT ../parent/pom.xml -- Gitee From 55105181070a185845f956d8a6e25dd5d04b3c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Tue, 15 Aug 2023 06:33:09 +0000 Subject: [PATCH 18/64] PDFBOX-5255: add new package io to deploy fileset git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911687 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 7c528b2523..fd4ccd5bca 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,7 @@ + -- Gitee From 64896804644f8f36cc194f6a8a44efccbb4916af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Fri, 18 Aug 2023 05:53:04 +0000 Subject: [PATCH 19/64] PDFBOX-5654: avoid NPE when processing CCF2 fonts git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911746 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdmodel/font/FileSystemFontProvider.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java index 50cc2f9547..049c12206f 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java @@ -687,18 +687,22 @@ final class FileSystemFontProvider extends FontProvider } String format; - if (ttf instanceof OpenTypeFont && ((OpenTypeFont)ttf).isPostScript()) + if (ttf instanceof OpenTypeFont && ((OpenTypeFont) ttf).isPostScript()) { format = "OTF"; - CFFFont cff = ((OpenTypeFont)ttf).getCFF().getFont(); CIDSystemInfo ros = null; - if (cff instanceof CFFCIDFont) + OpenTypeFont otf = (OpenTypeFont) ttf; + if (otf.isSupportedOTF() && otf.getCFF() != null) { - CFFCIDFont cidFont = (CFFCIDFont)cff; - String registry = cidFont.getRegistry(); - String ordering = cidFont.getOrdering(); - int supplement = cidFont.getSupplement(); - ros = new CIDSystemInfo(registry, ordering, supplement); + CFFFont cff = otf.getCFF().getFont(); + if (cff instanceof CFFCIDFont) + { + CFFCIDFont cidFont = (CFFCIDFont) cff; + String registry = cidFont.getRegistry(); + String ordering = cidFont.getOrdering(); + int supplement = cidFont.getSupplement(); + ros = new CIDSystemInfo(registry, ordering, supplement); + } } fontInfoList.add(new FSFontInfo(file, FontFormat.OTF, ttf.getName(), ros, usWeightClass, sFamilyClass, ulCodePageRange1, ulCodePageRange2, -- Gitee From 838885fcec1f18d531dfb57fba0b5aa2fdc1118d Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 19 Aug 2023 03:18:51 +0000 Subject: [PATCH 20/64] PDFBOX-5657: return opaque image for JPEG2000 with SMaskInData git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911762 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/pdfbox/cos/COSName.java | 1 + .../org/apache/pdfbox/filter/JPXFilter.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java index b66a90b1cc..79a2a665da 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java @@ -535,6 +535,7 @@ public final class COSName extends COSBase implements Comparable public static final COSName SIZE = new COSName("Size"); public static final COSName SM = new COSName("SM"); public static final COSName SMASK = new COSName("SMask"); + public static final COSName SMASK_IN_DATA = new COSName("SMaskInData"); public static final COSName SOFT_LIGHT = new COSName("SoftLight"); public static final COSName SORT = new COSName("Sort"); public static final COSName SOUND = new COSName("Sound"); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java index 9837e52718..8c9757b9f0 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java @@ -15,6 +15,9 @@ * limitations under the License. */ package org.apache.pdfbox.filter; + +import java.awt.Graphics2D; +import java.awt.Transparency; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.DataBuffer; @@ -30,6 +33,10 @@ import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.MemoryCacheImageInputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.graphics.color.PDJPXColorSpace; @@ -51,6 +58,8 @@ import org.apache.pdfbox.pdmodel.graphics.color.PDJPXColorSpace; */ public final class JPXFilter extends Filter { + private static final Log LOG = LogFactory.getLog(JPXFilter.class); + /** * {@inheritDoc} */ @@ -166,6 +175,18 @@ public final class JPXFilter extends Filter // in raster result.setColorSpace(new PDJPXColorSpace(ColorSpace.getInstance(ColorSpace.CS_GRAY))); } + else if (image.getTransparency() == Transparency.TRANSLUCENT && + parameters.getInt(COSName.SMASK_IN_DATA) > 0) + { + LOG.warn("JPEG2000 SMaskInData is not supported, returning opaque image"); + BufferedImage bim = new BufferedImage( + image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); + Graphics2D g2d = (Graphics2D) bim.getGraphics(); + g2d.drawImage(image, 0, 0, null); + g2d.dispose(); + image = bim; + result.setColorSpace(new PDJPXColorSpace(image.getColorModel().getColorSpace())); + } else { result.setColorSpace(new PDJPXColorSpace(image.getColorModel().getColorSpace())); -- Gitee From 3f980c4b3ef09cb5c9fc0839a70de4ae2df746da Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 19 Aug 2023 03:40:30 +0000 Subject: [PATCH 21/64] PDFBOX-5658: catch IllegalArgumentException that happens for huge image dimensions on jdk20 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911763 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdfbox/pdmodel/graphics/image/SampledImageReader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java index 32c51331b6..9563100f78 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java @@ -218,7 +218,7 @@ final class SampledImageReader } return fromAny(pdImage, raster, colorKey, clipped, subsampling, width, height); } - catch (NegativeArraySizeException ex) + catch (NegativeArraySizeException | IllegalArgumentException ex) { throw new IOException(ex); } @@ -261,7 +261,7 @@ final class SampledImageReader readRasterFromAny(pdImage, raster); return raster; } - catch (NegativeArraySizeException ex) + catch (NegativeArraySizeException | IllegalArgumentException ex) { throw new IOException(ex); } -- Gitee From f07a418246d01da4684d3b96b03b4ffbd9b4e69d Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 19 Aug 2023 08:58:25 +0000 Subject: [PATCH 22/64] PDFBOX-5659: Sonar fix git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911772 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdmodel/interactive/digitalsignature/PDSignature.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java index b7756181a1..4e8775ab1a 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java @@ -20,6 +20,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.Calendar; import org.apache.pdfbox.cos.COSArray; @@ -383,7 +384,7 @@ public class PDSignature implements COSObjectable } is.close(); - return COSString.parseHex(baos.toString("ISO-8859-1")).getBytes(); + return COSString.parseHex(baos.toString(StandardCharsets.ISO_8859_1)).getBytes(); } /** -- Gitee From 5d4d66625adf6ddc54a7912d09460b19b7d026f4 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 19 Aug 2023 09:49:23 +0000 Subject: [PATCH 23/64] PDFBOX-5659: partial revert because method doesn't exist in jdk8 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911773 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdmodel/interactive/digitalsignature/PDSignature.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java index 4e8775ab1a..2d0e2b217e 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java @@ -384,7 +384,7 @@ public class PDSignature implements COSObjectable } is.close(); - return COSString.parseHex(baos.toString(StandardCharsets.ISO_8859_1)).getBytes(); + return COSString.parseHex(baos.toString(StandardCharsets.ISO_8859_1.name())).getBytes(); } /** -- Gitee From 21c42742d6069e50196f94ede16a8fe90cbdf052 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 20 Aug 2023 03:59:53 +0000 Subject: [PATCH 24/64] PDFBOX-5662: ignore encoding name for ZapfDingbats and use ZapfDingbats encoding git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911795 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdfbox/pdmodel/font/PDSimpleFont.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java index 68294e4cd4..edbb27f822 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java @@ -35,6 +35,7 @@ import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; import org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding; import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.ZapfDingbatsEncoding; /** * A simple font. Simple fonts use a PostScript encoding vector. @@ -88,11 +89,21 @@ public abstract class PDSimpleFont extends PDFont if (encodingBase instanceof COSName) { COSName encodingName = (COSName) encodingBase; - this.encoding = Encoding.getInstance(encodingName); - if (this.encoding == null) + if (FontName.ZAPF_DINGBATS.getName().equals(getName()) && !isEmbedded()) { - LOG.warn("Unknown encoding: " + encodingName.getName()); - this.encoding = readEncodingFromFont(); // fallback + // PDFBOX- and PDF.js issue 16464: ignore other encodings + // this segment will work only if readEncoding() is called after the data + // for getName() and isEmbedded() is available + this.encoding = ZapfDingbatsEncoding.INSTANCE; + } + else + { + this.encoding = Encoding.getInstance(encodingName); + if (this.encoding == null) + { + LOG.warn("Unknown encoding: " + encodingName.getName()); + this.encoding = readEncodingFromFont(); // fallback + } } } else if (encodingBase instanceof COSDictionary) -- Gitee From eeac4e2bb4107e622010ca88f956fb84ba5b3dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sun, 20 Aug 2023 15:17:26 +0000 Subject: [PATCH 25/64] PDFBOX-5660: update plugins/dependencies git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911811 13f79535-47bb-0310-9956-ffa450edef68 --- examples/pom.xml | 2 +- parent/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index e03bc1ee3a..b57ee93712 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -77,7 +77,7 @@ org.apache.ant ant - 1.10.13 + 1.10.14 org.junit.jupiter diff --git a/parent/pom.xml b/parent/pom.xml index 36e1f2cda3..d142ae30cf 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -211,7 +211,7 @@ org.owasp dependency-check-maven - 8.3.1 + 8.4.0 true diff --git a/pom.xml b/pom.xml index fd4ccd5bca..4839182ca4 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ maven-antrun-plugin - 1.8 + 3.1.0 -- Gitee From 26cf434275eab31bf4a4e91a3fbe3ba07aaf711f Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 22 Aug 2023 03:17:40 +0000 Subject: [PATCH 26/64] PDFBOX-2941: improve positioning of text extraction window git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911836 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/pdfbox/debugger/pagepane/PagePane.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java index 9234a56e99..80b1a0cd0a 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java @@ -39,11 +39,11 @@ import javax.swing.event.AncestorListener; import java.awt.Component; import java.awt.Cursor; import java.awt.Desktop; -import java.awt.DisplayMode; +import java.awt.Dimension; import java.awt.Font; -import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Point; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; @@ -277,10 +277,9 @@ public class PagePane implements ActionListener, AncestorListener, MouseMotionLi private void startExtracting() { - GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); - DisplayMode dm = gd.getDisplayMode(); - int screenWidth = dm.getWidth(); - int screenHeight = dm.getHeight(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + int screenWidth = (int) screenSize.getWidth(); + int screenHeight = (int) screenSize.getHeight(); TextDialog textDialog = TextDialog.instance(); textDialog.setSize(screenWidth / 3, screenHeight / 3); @@ -290,6 +289,8 @@ public class PagePane implements ActionListener, AncestorListener, MouseMotionLi Point locationOnScreen = getPanel().getLocationOnScreen(); int x = Math.min(locationOnScreen.x + getPanel().getWidth() / 2, screenWidth * 3 / 4); int y = Math.min(locationOnScreen.y + getPanel().getHeight() / 2, screenHeight * 3 / 4); + x = Math.max(0, x); + y = Math.max(0, y); textDialog.setLocation(x, y); try -- Gitee From b5970c7687cd8f559f34df643cad1c2725d0e96d Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Wed, 23 Aug 2023 17:20:06 +0000 Subject: [PATCH 27/64] PDFBOX-5660: update enforcer git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911871 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index d142ae30cf..8a84b5fc7c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -352,7 +352,7 @@ maven-enforcer-plugin - 3.3.0 + 3.4.0 -- Gitee From a5c7f53073485a03bd57a1f9eb1638c0fd5928eb Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Wed, 23 Aug 2023 18:57:53 +0000 Subject: [PATCH 28/64] PDFBOX-5660: update jmh git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911872 13f79535-47bb-0310-9956-ffa450edef68 --- benchmark/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/pom.xml b/benchmark/pom.xml index 66e06833dc..8689ed82f6 100644 --- a/benchmark/pom.xml +++ b/benchmark/pom.xml @@ -58,7 +58,7 @@ UTF-8 - 1.36 + 1.37 benchmarks -- Gitee From ccf8368dc1d79e50032f06db6785a40f330c4465 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 02:21:20 +0000 Subject: [PATCH 29/64] PDFBOX-5660: update picocli git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911973 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8a84b5fc7c..1acf578edf 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -119,7 +119,7 @@ info.picocli picocli - 4.7.4 + 4.7.5 -- Gitee From 34da27185b97b4f81a6d2f543f4064339e3cf50c Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 06:32:07 +0000 Subject: [PATCH 30/64] PDFBOX-5649: add namespace only if it isn't already known git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911976 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/xmpbox/xml/DomXmpParser.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java b/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java index 324d05b129..707ea75cb6 100644 --- a/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java +++ b/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java @@ -227,12 +227,14 @@ public class DomXmpParser } else if (XMLConstants.XMLNS_ATTRIBUTE.equals(attr.getPrefix())) { - if (!strictParsing) + String namespace = attr.getValue(); + if (!strictParsing && !tm.isStructuredTypeNamespace(namespace)) { - // Add the schema on the fly if it can't be found + // PDFBOX-5128: Add the schema on the fly if it can't be found + // PDFBOX-5649: But only if the namespace isn't already known + // because this adds a namespace without property descriptions String prefix = attr.getLocalName(); - String namespace = attr.getValue(); - + XMPSchema schema = xmp.getSchema(namespace); if (schema == null && tm.getSchemaFactory(namespace) == null) { -- Gitee From 8e16d0d49f10f733be00dcc46731a0fd31d91621 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 17:32:39 +0000 Subject: [PATCH 31/64] PDFBOX-5665: percent isn't part of an operator git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911992 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java index 340e88725d..c6660b43de 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java @@ -406,6 +406,7 @@ public class PDFStreamParser extends BaseParser nextChar != '<' && nextChar != '(' && nextChar != '/' && + nextChar != '%' && (nextChar < '0' || nextChar > '9' ) ) { -- Gitee From 8cff9009b054b04481f39a6eeba954499f23ecbf Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 17:38:14 +0000 Subject: [PATCH 32/64] PDFBOX-5649: add test git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911994 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/xmpbox/xml/DomXmpParserTest.java | 48 +++++++++++++++++++ .../org/apache/xmpbox/xml/PDFBOX-5649.xml | 37 ++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java create mode 100644 xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml diff --git a/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java b/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java new file mode 100644 index 0000000000..dde365b66f --- /dev/null +++ b/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java @@ -0,0 +1,48 @@ +/***************************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +package org.apache.xmpbox.xml; + +import java.io.IOException; +import java.io.InputStream; +import org.junit.jupiter.api.Test; + +/** + * + * @author Tilman Hausherr + */ +public class DomXmpParserTest +{ + public DomXmpParserTest() + { + } + + @Test + void testPDFBox5649() throws IOException, XmpParsingException + { + try (InputStream fis = DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/xml/PDFBOX-5649.xml")) + { + DomXmpParser dxp = new DomXmpParser(); + dxp.setStrictParsing(false); + dxp.parse(fis); + } + } +} diff --git a/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml b/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml new file mode 100644 index 0000000000..bb737f1822 --- /dev/null +++ b/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml @@ -0,0 +1,37 @@ + + + + + + application/x-indesign + + + Test Document + + + 2020-09-20T21:07:44+01:00 + 2019-11-20T21:37:24Z + 2020-09-20T21:07:44+01:00 + Adobe InDesign CC 14.0 (Windows) + xmp.iid:a3bd370c-e037-426e-bc9e-47b6f3605337 + xmp.did:a3bd370c-e037-426e-bc9e-47b6f3605337 + + + + created + xmp.iid:a3bd370c-e037-426e-bc9e-47b6f3605337 + 2019-11-20T21:37:24Z + Adobe InDesign 15.0 (Macintosh) + + + + xmp.did:226be94e-f935-4543-9173-94bb89ded271 + default + + + + \ No newline at end of file -- Gitee From 0587397e56f6932be14f1a651216db1322639fda Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 17:57:08 +0000 Subject: [PATCH 33/64] PDFBOX-5649: add license header git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911996 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/xmpbox/xml/PDFBOX-5649.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml b/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml index bb737f1822..3908952156 100644 --- a/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml +++ b/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-5649.xml @@ -1,4 +1,22 @@ + -- Gitee From 3377a6382fcd64cc74310dc019c746e3873f5054 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 18:53:11 +0000 Subject: [PATCH 34/64] PDFBOX-5668: pass correct parameter to constructor, remove unused field git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1911998 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/xmpbox/schema/XMPSchemaFactory.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xmpbox/src/main/java/org/apache/xmpbox/schema/XMPSchemaFactory.java b/xmpbox/src/main/java/org/apache/xmpbox/schema/XMPSchemaFactory.java index 8843e393fa..9773cf6c0f 100644 --- a/xmpbox/src/main/java/org/apache/xmpbox/schema/XMPSchemaFactory.java +++ b/xmpbox/src/main/java/org/apache/xmpbox/schema/XMPSchemaFactory.java @@ -41,8 +41,6 @@ public class XMPSchemaFactory private final PropertiesDescription propDef; - private String nsName; - /** * Factory Constructor for basic known schemas * @@ -102,7 +100,7 @@ public class XMPSchemaFactory if (schemaClass == XMPSchema.class) { argsClass = new Class[] { XMPMetadata.class, String.class, String.class }; - schemaArgs = new Object[] { metadata, namespace, nsName }; + schemaArgs = new Object[] { metadata, namespace, prefix }; } else if (prefix != null && !"".equals(prefix)) { -- Gitee From 9d0dff775d3130435e95cbe54c402b6cb188edcd Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Tue, 29 Aug 2023 19:17:21 +0000 Subject: [PATCH 35/64] PDFBOX-5649: Sonar fix git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912000 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/xmpbox/xml/DomXmpParserTest.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java b/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java index dde365b66f..b34b4960e2 100644 --- a/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java +++ b/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java @@ -23,13 +23,17 @@ package org.apache.xmpbox.xml; import java.io.IOException; import java.io.InputStream; + +import org.apache.xmpbox.XMPMetadata; + +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * * @author Tilman Hausherr */ -public class DomXmpParserTest +class DomXmpParserTest { public DomXmpParserTest() { @@ -42,7 +46,8 @@ public class DomXmpParserTest { DomXmpParser dxp = new DomXmpParser(); dxp.setStrictParsing(false); - dxp.parse(fis); + XMPMetadata xmp = dxp.parse(fis); + Assertions.assertNotNull(xmp); } } } -- Gitee From bc92539adc00bd3e4dd48e51b06c543f3863cf3b Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 2 Sep 2023 03:48:25 +0000 Subject: [PATCH 36/64] PDFBOX-2941: show whether font is embedded git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912046 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java | 1 + .../org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java index d6bccc7317..edb88c3d65 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java @@ -55,6 +55,7 @@ class SimpleFont extends FontPane attributes.put("Encoding", getEncodingName(font)); attributes.put("Glyphs", Integer.toString(totalAvailableGlyph)); attributes.put("Standard 14", Boolean.toString(font.isStandard14())); + attributes.put("Embedded", Boolean.toString(font.isEmbedded())); view = new FontEncodingView(tableData, attributes, new String[] {"Code", "Glyph Name", "Unicode Character", "Glyph"}, yBounds); diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java index 9e7ada2cde..cd941416cc 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java @@ -57,6 +57,7 @@ class Type0Font extends FontPane Map attributes = new LinkedHashMap<>(); attributes.put("Font", descendantFont.getName()); attributes.put("CIDs", Integer.toString(cidtogid.length)); + attributes.put("Embedded", Boolean.toString(descendantFont.isEmbedded())); view = new FontEncodingView(cidtogid, attributes, new String[]{"CID", "GID", "Unicode Character", "Glyph"}, getYBounds(cidtogid, 3)); @@ -69,6 +70,7 @@ class Type0Font extends FontPane attributes.put("CIDs", Integer.toString(tab.length)); attributes.put("Glyphs", Integer.toString(totalAvailableGlyph)); attributes.put("Standard 14", Boolean.toString(parentFont.isStandard14())); + attributes.put("Embedded", Boolean.toString(descendantFont.isEmbedded())); view = new FontEncodingView(tab, attributes, new String[]{"Code", "CID", "GID", "Unicode Character", "Glyph"}, getYBounds(tab, 4)); -- Gitee From 74c4efeebcb16eb07d6322805084f8609025b517 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 3 Sep 2023 03:41:36 +0000 Subject: [PATCH 37/64] PDFBOX-5660: Sonar fix git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912066 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/pdfbox/pdmodel/encryption/SecurityHandler.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java index 9d4a02068c..6e1acdb9bd 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java @@ -564,7 +564,11 @@ public abstract class SecurityHandler { return; } - byte[] rawData = IOUtils.toByteArray(stream.createRawInputStream()); + byte[] rawData; + try (InputStream is = stream.createRawInputStream()) + { + rawData = IOUtils.toByteArray(is); + } ByteArrayInputStream encryptedStream = new ByteArrayInputStream(rawData); try (OutputStream output = stream.createRawOutputStream()) { -- Gitee From cbbea7e429f2b9604fadd6e47a52e5caeaed0bc7 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Mon, 11 Sep 2023 06:26:32 +0000 Subject: [PATCH 38/64] PDFBOX-5660: update maven-enforcer-plugin git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912235 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1acf578edf..d7d4f5d86f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -352,7 +352,7 @@ maven-enforcer-plugin - 3.4.0 + 3.4.1 -- Gitee From 11b432ee00c15b8759ef2c1a1063e3520eadd3db Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 16 Sep 2023 02:48:29 +0000 Subject: [PATCH 39/64] PDFBOX-5592: don't throw exception for unknown subst format git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912335 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java index 33c2996c15..1ac3fd00a6 100644 --- a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java @@ -369,7 +369,8 @@ public class GlyphSubstitutionTable extends TTFTable return new LookupTypeSingleSubstFormat2(substFormat, coverageTable, substituteGlyphIDs); } default: - throw new IOException("Unknown substFormat: " + substFormat); + LOG.warn("Unknown substFormat: " + substFormat); + return null; } } -- Gitee From 1661e8317a5e8886873f18f78a9426d95db85d44 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 16 Sep 2023 10:12:17 +0000 Subject: [PATCH 40/64] PDFBOX-5672: simplify code and avoid string search, as suggested by Axel Howind git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912342 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/pdfbox/tools/PDFToImage.java | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java index 58482a7cad..d2f1de5470 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java @@ -22,7 +22,10 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.PrintStream; +import java.util.Arrays; +import java.util.List; import java.util.concurrent.Callable; +import java.util.stream.Collectors; import javax.imageio.ImageIO; @@ -113,9 +116,12 @@ public final class PDFToImage implements Callable outputPrefix = FilenameUtils.removeExtension(infile.getAbsolutePath()); } - if (getImageFormats().indexOf(imageFormat) == -1) + List writerFormatNames = Arrays.asList(ImageIO.getWriterFormatNames()); + if (!writerFormatNames.contains(imageFormat)) { - SYSERR.println( "Error: Invalid image format " + imageFormat + " - supported are: " + getImageFormats()); + String wfn = writerFormatNames.stream().collect(Collectors.joining(", ")); + SYSERR.println("Error: Invalid image format " + imageFormat + " - supported formats: " + + wfn); return 2; } @@ -187,24 +193,6 @@ public final class PDFToImage implements Callable return 0; } - private static String getImageFormats() - { - StringBuilder retval = new StringBuilder(); - String[] formats = ImageIO.getWriterFormatNames(); - for( int i = 0; i < formats.length; i++ ) - { - if (formats[i].equalsIgnoreCase(formats[i])) - { - retval.append( formats[i] ); - if( i + 1 < formats.length ) - { - retval.append( ", " ); - } - } - } - return retval.toString(); - } - private static void changeCropBox(PDDocument document, float a, float b, float c, float d) { for (PDPage page : document.getPages()) -- Gitee From 6d076aafdf6c21a3380789342a8c16ff98d68973 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 16 Sep 2023 12:24:19 +0000 Subject: [PATCH 41/64] PDFBOX-5673: refactor stream operations, as suggested by Axel Howind git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912346 13f79535-47bb-0310-9956-ffa450edef68 --- pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java | 2 +- .../src/main/java/org/apache/pdfbox/rendering/PageDrawer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java index df9dd605a4..2fa9ffdcb9 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java @@ -617,7 +617,7 @@ public class COSArray extends COSBase implements Iterable, COSUpdateInf */ public List toCOSNameStringList() { - return StreamSupport.stream(objects.spliterator(), false) // + return objects.stream() // .map(o -> ((COSName) o).getName()) // .collect(Collectors.toList()); } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java index 636312a275..492e50acef 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java @@ -2033,7 +2033,7 @@ public class PageDrawer extends PDFGraphicsStreamEngine // visible if any of the entries in OCGs are OFF if (COSName.ANY_OFF.equals(visibilityPolicy)) { - return visibles.stream().noneMatch(v -> !v); + return visibles.stream().allMatch(v -> v); } // visible only if all of the entries in OCGs are ON -- Gitee From 8e656fdea29424ade3aa844301653e8ab78d6c46 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 16 Sep 2023 12:26:17 +0000 Subject: [PATCH 42/64] PDFBOX-5673: refactor stream operations, as suggested by Axel Howind git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912347 13f79535-47bb-0310-9956-ffa450edef68 --- pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java index 2fa9ffdcb9..4a93d78161 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java @@ -629,7 +629,7 @@ public class COSArray extends COSBase implements Iterable, COSUpdateInf */ public List toCOSStringStringList() { - return StreamSupport.stream(objects.spliterator(), false) // + return objects.stream() // .map(o -> ((COSString) o).getString()) // .collect(Collectors.toList()); } -- Gitee From 5a7faf8731fccc2635529f1ff4556b8d047f0f14 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 16 Sep 2023 13:05:50 +0000 Subject: [PATCH 43/64] PDFBOX-5673: refactor collection operations, as suggested by Axel Howind git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912350 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/pdfbox/debugger/ui/RecentFiles.java | 5 +---- .../main/java/org/apache/fontbox/cff/Type2CharString.java | 2 +- .../src/main/java/org/apache/pdfbox/cos/COSInputStream.java | 2 +- .../java/org/apache/pdfbox/multipdf/PDFMergerUtility.java | 4 ++-- .../org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java | 6 ++---- 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java index 52c5cc9e24..a3a59b4f5a 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java @@ -97,10 +97,7 @@ public class RecentFiles */ public void removeFile(String path) { - if (filePaths.contains(path)) - { - filePaths.remove(path); - } + filePaths.remove(path); } /** diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java b/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java index 99e725a26b..c31e30aa6e 100644 --- a/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java +++ b/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java @@ -269,7 +269,7 @@ public class Type2CharString extends Type1CharString : null; if (command != null && command.getType1KeyWord() != Type1KeyWord.CLOSEPATH) { - addCommand(Collections. emptyList(), CharStringCommand.COMMAND_CLOSEPATH); + addCommand(Collections.emptyList(), CharStringCommand.COMMAND_CLOSEPATH); } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java index 06840b28aa..0b13034763 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java @@ -67,7 +67,7 @@ public final class COSInputStream extends FilterInputStream { if (filters.isEmpty()) { - return new COSInputStream(in, Collections.emptyList()); + return new COSInputStream(in, Collections.emptyList()); } List results = new ArrayList<>(filters.size()); RandomAccessRead decoded = Filter.decode(in, filters, parameters, options, results); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java index a90773ac74..f382d5b1bf 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java @@ -525,7 +525,7 @@ public class PDFMergerUtility PDDocumentInformation destInfo = destination.getDocumentInformation(); PDDocumentInformation srcInfo = source.getDocumentInformation(); - mergeInto(srcInfo.getCOSObject(), destInfo.getCOSObject(), Collections.emptySet()); + mergeInto(srcInfo.getCOSObject(), destInfo.getCOSObject(), Collections.emptySet()); // use the highest version number for the resulting pdf float destVersion = destination.getVersion(); @@ -910,7 +910,7 @@ public class PDFMergerUtility destCatalog.setViewerPreferences(destViewerPreferences); } mergeInto(srcViewerPreferences.getCOSObject(), destViewerPreferences.getCOSObject(), - Collections.emptySet()); + Collections.emptySet()); // check the booleans - set to true if one is set and true if (srcViewerPreferences.hideToolbar() || destViewerPreferences.hideToolbar()) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java index e6c6899b1b..998d1db1cb 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java @@ -24,6 +24,7 @@ import java.awt.image.DataBuffer; import java.awt.image.Raster; import java.awt.image.WritableRaster; import java.io.IOException; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -100,10 +101,7 @@ public class PDDeviceN extends PDSpecialColorSpace // set initial color space int n = getNumberOfComponents(); float[] initial = new float[n]; - for (int i = 0; i < n; i++) - { - initial[i] = 1; - } + Arrays.fill(initial, 1); initialColor = new PDColor(initial, this); } -- Gitee From 32a4713929a772669303805496d4f246907923fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sat, 16 Sep 2023 14:16:39 +0000 Subject: [PATCH 44/64] PDFBOX-5666: transfer object key git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912352 13f79535-47bb-0310-9956-ffa450edef68 --- pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java index af039eb852..283f4cd3ff 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java @@ -195,6 +195,7 @@ public class COSDocument extends COSBase implements Closeable COSStream stream = new COSStream(streamCache, parser.createRandomAccessReadView(startPosition, streamLength)); dictionary.forEach(stream::setItem); + stream.setKey(dictionary.getKey()); return stream; } -- Gitee From a05a98f22d7b8d3bc0c2adc96c4102332a8a15bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sat, 16 Sep 2023 17:35:01 +0000 Subject: [PATCH 45/64] PDFBOX-5681: avoid ConcurrentModificationException git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912356 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/pdfbox/cos/COSDocument.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java index 283f4cd3ff..402c979c7f 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java @@ -250,13 +250,28 @@ public class COSDocument extends COSBase implements Closeable * @return This will return all objects with the specified type(s). */ public List getObjectsByType(COSName type1, COSName type2) + { + List originKeys = new ArrayList(xrefTable.keySet()); + List retval = getObjectsByType(originKeys, type1, type2); + // there might be some additional objects if the brute force parser was triggered + // due to a broken cross reference table/stream + if (originKeys.size() < xrefTable.size()) + { + List additionalKeys = new ArrayList(xrefTable.keySet()); + additionalKeys.removeAll(originKeys); + retval.addAll(getObjectsByType(additionalKeys, type1, type2)); + } + return retval; + } + + private List getObjectsByType(List keys, COSName type1, COSName type2) { List retval = new ArrayList<>(); - for (COSObjectKey objectKey : xrefTable.keySet()) + for (COSObjectKey objectKey : keys) { COSObject objectFromPool = getObjectFromPool(objectKey); COSBase realObject = objectFromPool.getObject(); - if( realObject instanceof COSDictionary ) + if (realObject instanceof COSDictionary) { COSName dictType = ((COSDictionary) realObject).getCOSName(COSName.TYPE); if (type1.equals(dictType) || (type2 != null && type2.equals(dictType))) -- Gitee From cca2dcc79fe64c466140e9185f1ac169a8138de2 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 17 Sep 2023 12:57:53 +0000 Subject: [PATCH 46/64] PDFBOX-5663: add about dialog inspired from tika git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912362 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/pdfbox/debugger/PDFDebugger.java | 97 +++++++++++++++++- .../org/apache/pdfbox/debugger/about.html | 30 ++++++ .../apache/pdfbox/debugger/pdfbox-logo.png | Bin 0 -> 66393 bytes 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 debugger/src/main/resources/org/apache/pdfbox/debugger/about.html create mode 100644 debugger/src/main/resources/org/apache/pdfbox/debugger/pdfbox-logo.png diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java index 680c729e5e..9ff130b012 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java @@ -17,11 +17,13 @@ package org.apache.pdfbox.debugger; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FileDialog; import java.awt.Frame; +import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; @@ -32,6 +34,7 @@ import java.awt.event.KeyEvent; import java.awt.event.WindowEvent; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -40,6 +43,8 @@ import java.io.PrintStream; import java.lang.reflect.Method; import java.net.URI; import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -55,7 +60,10 @@ import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.Sides; import javax.swing.AbstractAction; import javax.swing.Action; +import javax.swing.Box; import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; @@ -69,6 +77,8 @@ import javax.swing.KeyStroke; import javax.swing.TransferHandler; import javax.swing.UIManager; import javax.swing.border.BevelBorder; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; @@ -153,7 +163,7 @@ import picocli.CommandLine.Model.CommandSpec; */ @SuppressWarnings({ "serial", "squid:MaximumInheritanceDepth", "squid:S1948" }) @Command(name = "pdfdebugger", description = "Analyzes and inspects the internal structure of a PDF document") -public class PDFDebugger extends JFrame implements Callable +public class PDFDebugger extends JFrame implements Callable, HyperlinkListener { private static Log LOG; // needs late initialization @@ -438,6 +448,18 @@ public class PDFDebugger extends JFrame implements Callable menuBar.add(viewMenu.getMenu()); setJMenuBar(menuBar); + menuBar.add(Box.createHorizontalGlue()); + JMenu help = new JMenu("Help"); + help.setMnemonic(KeyEvent.VK_H); + + JMenuItem item = new JMenuItem("About PDFBox", KeyEvent.VK_A); + item.setActionCommand("about"); + item.addActionListener(actionEvent -> + textDialog("About Apache PDFBox", PDFDebugger.class.getResource("about.html"))); + help.add(item); + + menuBar.add(help); + setExtendedState(windowPrefs.getExtendedState()); setBounds(windowPrefs.getBounds()); @@ -1593,4 +1615,77 @@ public class PDFDebugger extends JFrame implements Callable } return null; } + + private void textDialog(String title, URL resource) + { + try + { + JDialog dialog = new JDialog(this, title, true); + JEditorPane editor = new JEditorPane(resource); + editor.setContentType("text/html"); + editor.setEditable(false); + editor.setBackground(Color.WHITE); + editor.setPreferredSize(new Dimension(400, 250)); + + // put it in the middle of the parent, but not outside of the screen + // GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice() + // doesn't work give the numbers we need + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + double screenWidth = screenSize.getWidth(); + double screenHeight = screenSize.getHeight(); + Rectangle parentBounds = this.getBounds(); + editor.addHyperlinkListener(this); + dialog.add(editor); + dialog.pack(); + + int x = (int) (parentBounds.getX() + (parentBounds.getWidth() - editor.getWidth()) / 2); + int y = (int) (parentBounds.getY() + (parentBounds.getHeight() - editor.getHeight()) / 2); + x = (int) Math.min(x, screenWidth * 3 / 4); + y = (int) Math.min(y, screenHeight * 3 / 4); + x = Math.max(0, x); + y = Math.max(0, y); + dialog.setLocation(x, y); + + dialog.setVisible(true); + } + catch (IOException ex) + { + new ErrorDialog(ex).setVisible(true); + } + } + + @Override + public void hyperlinkUpdate(HyperlinkEvent he) + { + if (he.getEventType() == HyperlinkEvent.EventType.ACTIVATED) + { + try + { + URL url = he.getURL(); + try (InputStream stream = url.openStream()) + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + IOUtils.copy(stream,baos); + JEditorPane editor + = new JEditorPane("text/plain", baos.toString(StandardCharsets.UTF_8.name())); + editor.setEditable(false); + editor.setBackground(Color.WHITE); + editor.setCaretPosition(0); + editor.setPreferredSize(new Dimension(600, 400)); + + String name = url.toString(); + name = name.substring(name.lastIndexOf('/') + 1); + + JDialog dialog = new JDialog(this, "Apache PDFBox: " + name, true); + dialog.add(new JScrollPane(editor)); + dialog.pack(); + dialog.setVisible(true); + } + } + catch (IOException ex) + { + new ErrorDialog(ex).setVisible(true); + } + } + } } diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/about.html b/debugger/src/main/resources/org/apache/pdfbox/debugger/about.html new file mode 100644 index 0000000000..e63b2b8704 --- /dev/null +++ b/debugger/src/main/resources/org/apache/pdfbox/debugger/about.html @@ -0,0 +1,30 @@ + + + +
+

The PDFBox logo showing a toolbox.

+ +

Apache PDFBox® ${project.version} is an open source Java library to create, render, print, split, merge, modify, inspect and extract text and meta-data of PDF files.

+ +

Copyright notice + - License terms

+
+ + diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/pdfbox-logo.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/pdfbox-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..76abf9fcdc201cffde4dd537cba46dfd8f6f4821 GIT binary patch literal 66393 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 Date: Sun, 17 Sep 2023 14:26:34 +0000 Subject: [PATCH 47/64] PDFBOX-5685: adapt the thread safe buffer cache from RandomAccessReadBufferedFile to reduce the memory footprint git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912363 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdfbox/io/RandomAccessReadBuffer.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java b/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java index 64d7d73022..e87c027689 100644 --- a/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java +++ b/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java @@ -21,6 +21,8 @@ import java.io.InputStream; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; /** * An implementation of the RandomAccessRead interface to store data in memory. The data will be stored in chunks @@ -47,6 +49,9 @@ public class RandomAccessReadBuffer implements RandomAccessRead // maximum chunk list index private int bufferListMaxIndex = 0; + // map holding all copies of the current buffer + private final ConcurrentMap rarbCopies = new ConcurrentHashMap<>(); + /** * Default constructor. */ @@ -145,6 +150,8 @@ public class RandomAccessReadBuffer implements RandomAccessRead @Override public void close() throws IOException { + rarbCopies.values().forEach(IOUtils::closeQuietly); + rarbCopies.clear(); currentBuffer = null; bufferList.clear(); } @@ -362,8 +369,14 @@ public class RandomAccessReadBuffer implements RandomAccessRead @Override public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException { - return new RandomAccessReadView(new RandomAccessReadBuffer(this), startPosition, - streamLength, true); + Long currentThreadID = Thread.currentThread().getId(); + RandomAccessReadBuffer randomAccessReadBuffer = rarbCopies.get(currentThreadID); + if (randomAccessReadBuffer == null || randomAccessReadBuffer.isClosed()) + { + randomAccessReadBuffer = new RandomAccessReadBuffer(this); + rarbCopies.put(currentThreadID, randomAccessReadBuffer); + } + return new RandomAccessReadView(randomAccessReadBuffer, startPosition, streamLength); } /** -- Gitee From 5beafdc445c39200654d464d2127aba4678b7e1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 18 Sep 2023 16:48:53 +0000 Subject: [PATCH 48/64] PDFBOX-5682: don't use hashCode as key to avoid collisions git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912400 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/pdfbox/cos/COSObjectKey.java | 10 ++++++++++ .../java/org/apache/pdfbox/pdfparser/BaseParser.java | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java index 33a26ea615..8c09d91409 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java @@ -86,6 +86,16 @@ public final class COSObjectKey implements Comparable return num << NUMBER_OFFSET | (gen & GENERATION_MASK); } + /** + * Return the internal hash value which is based on the number and the generation. + * + * @return the internal hash value + */ + public long getInternalHash() + { + return numberAndGeneration; + } + /** * {@inheritDoc} */ diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java index d81e6cdc2f..c1f565a28c 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java @@ -57,7 +57,7 @@ public abstract class BaseParser private final CharsetDecoder utf8Decoder = StandardCharsets.UTF_8.newDecoder(); - private final Map keyCache = new HashMap<>(); + private final Map keyCache = new HashMap<>(); /** * Log instance. @@ -166,11 +166,11 @@ public abstract class BaseParser { for (COSObjectKey key : xrefTable.keySet()) { - keyCache.putIfAbsent(key.hashCode(), key); + keyCache.putIfAbsent(key.getInternalHash(), key); } } - int hashCode = Long.hashCode(COSObjectKey.computeInternalHash(num, gen)); - COSObjectKey foundKey = keyCache.get(hashCode); + long internalHashCode = COSObjectKey.computeInternalHash(num, gen); + COSObjectKey foundKey = keyCache.get(internalHashCode); return foundKey != null ? foundKey : new COSObjectKey(num, gen); } -- Gitee From f788b16b8c1fa328a69e7193b641d55b73944927 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 24 Sep 2023 08:56:45 +0000 Subject: [PATCH 49/64] PDFBOX-5684: add hash and lastModified to cache file to avoid parsing bad fonts twice unless they have changed git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912512 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdmodel/font/FileSystemFontProvider.java | 134 ++++++++++++++---- 1 file changed, 105 insertions(+), 29 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java index 049c12206f..877c650810 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java @@ -26,11 +26,15 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.security.AccessControlException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.fontbox.FontBoxFont; @@ -45,7 +49,9 @@ import org.apache.fontbox.ttf.TrueTypeCollection; import org.apache.fontbox.ttf.TrueTypeFont; import org.apache.fontbox.type1.Type1Font; import org.apache.fontbox.util.autodetect.FontFileFinder; +import org.apache.pdfbox.io.IOUtils; import org.apache.pdfbox.io.RandomAccessReadBufferedFile; +import org.apache.pdfbox.util.Hex; /** * A FontProvider which searches for fonts on the local filesystem. @@ -72,11 +78,13 @@ final class FileSystemFontProvider extends FontProvider private final PDPanoseClassification panose; private final File file; private final FileSystemFontProvider parent; + private final String hash; + private final long lastModified; private FSFontInfo(File file, FontFormat format, String postScriptName, CIDSystemInfo cidSystemInfo, int usWeightClass, int sFamilyClass, int ulCodePageRange1, int ulCodePageRange2, int macStyle, byte[] panose, - FileSystemFontProvider parent) + FileSystemFontProvider parent, String hash, long lastModified) { this.file = file; this.format = format; @@ -90,6 +98,8 @@ final class FileSystemFontProvider extends FontProvider this.panose = panose != null && panose.length >= PDPanoseClassification.LENGTH ? new PDPanoseClassification(panose) : null; this.parent = parent; + this.hash = hash; + this.lastModified = lastModified; } @Override @@ -183,7 +193,7 @@ final class FileSystemFontProvider extends FontProvider @Override public String toString() { - return super.toString() + " " + file; + return super.toString() + " " + file + " " + hash + " " + lastModified; } private TrueTypeFont getTrueTypeFont(String postScriptName, File file) @@ -302,15 +312,18 @@ final class FileSystemFontProvider extends FontProvider } } - /** - * Represents ignored fonts (i.e. bitmap fonts). - */ - private static final class FSIgnored extends FSFontInfo + private FSFontInfo createFSIgnored(File file, FontFormat format, String postScriptName) { - private FSIgnored(File file, FontFormat format, String postScriptName) + String hash; + try { - super(file, format, postScriptName, null, 0, 0, 0, 0, 0, null, null); + hash = computeHash(Files.readAllBytes(file.toPath())); } + catch (IOException ex) + { + hash = ""; + } + return new FSFontInfo(file, format, postScriptName, null, 0, 0, 0, 0, 0, null, null, hash, file.lastModified()); } /** @@ -451,8 +464,8 @@ final class FileSystemFontProvider extends FontProvider if (fontInfo.cidSystemInfo != null) { writer.write(fontInfo.cidSystemInfo.getRegistry() + '-' + - fontInfo.cidSystemInfo.getOrdering() + '-' + - fontInfo.cidSystemInfo.getSupplement()); + fontInfo.cidSystemInfo.getOrdering() + '-' + + fontInfo.cidSystemInfo.getSupplement()); } writer.write("|"); if (fontInfo.usWeightClass > -1) @@ -489,6 +502,10 @@ final class FileSystemFontProvider extends FontProvider } writer.write("|"); writer.write(fontInfo.file.getAbsolutePath()); + writer.write("|"); + writer.write(fontInfo.hash); + writer.write("|"); + writer.write(Long.toString(fontInfo.file.lastModified())); writer.newLine(); } @@ -506,12 +523,12 @@ final class FileSystemFontProvider extends FontProvider List results = new ArrayList<>(); // Get the disk cache - File file = null; + File diskCacheFile = null; boolean fileExists = false; try { - file = getDiskCacheFile(); - fileExists = file.exists(); + diskCacheFile = getDiskCacheFile(); + fileExists = diskCacheFile.exists(); } catch (SecurityException e) { @@ -520,12 +537,12 @@ final class FileSystemFontProvider extends FontProvider if (fileExists) { - try (BufferedReader reader = new BufferedReader(new FileReader(file))) + try (BufferedReader reader = new BufferedReader(new FileReader(diskCacheFile))) { String line; while ((line = reader.readLine()) != null) { - String[] parts = line.split("\\|", 10); + String[] parts = line.split("\\|", 12); if (parts.length < 10) { LOG.warn("Incorrect line '" + line + "' in font disk cache is skipped"); @@ -542,6 +559,8 @@ final class FileSystemFontProvider extends FontProvider int macStyle = -1; byte[] panose = null; File fontFile; + String hash = ""; + long lastModified = 0; postScriptName = parts[0]; format = FontFormat.valueOf(parts[1]); @@ -575,12 +594,42 @@ final class FileSystemFontProvider extends FontProvider } } fontFile = new File(parts[9]); + if (parts.length >= 12 && !parts[10].isEmpty() && !parts[11].isEmpty()) + { + hash = parts[10]; + lastModified = Long.parseLong(parts[11]); + } if (fontFile.exists()) { - FSFontInfo info = new FSFontInfo(fontFile, format, postScriptName, - cidSystemInfo, usWeightClass, sFamilyClass, ulCodePageRange1, - ulCodePageRange2, macStyle, panose, this); - results.add(info); + boolean keep = false; + // if the file exists, find out whether it's the same file. + // first check whether time is different and if yes, whether hash is different + if (fontFile.lastModified() != lastModified) + { + String newHash = computeHash(Files.readAllBytes(fontFile.toPath())); + if (newHash.equals(hash)) + { + keep = true; + lastModified = fontFile.lastModified(); + hash = newHash; + } + } + else + { + keep = true; + } + if (keep) + { + FSFontInfo info = new FSFontInfo(fontFile, format, postScriptName, + cidSystemInfo, usWeightClass, sFamilyClass, ulCodePageRange1, + ulCodePageRange2, macStyle, panose, this, hash, lastModified); + results.add(info); + } + else + { + LOG.debug("Font file " + fontFile.getAbsolutePath() + " is different"); + continue; // don't remove from "pending" + } } else { @@ -599,7 +648,7 @@ final class FileSystemFontProvider extends FontProvider if (!pending.isEmpty()) { // re-build the entire cache if we encounter un-cached fonts (could be optimised) - LOG.warn("New fonts found, font cache will be re-built"); + LOG.warn(pending.size() + " new fonts found, font cache will be re-built"); return null; } @@ -626,16 +675,19 @@ final class FileSystemFontProvider extends FontProvider */ private void addTrueTypeFont(File ttfFile) throws IOException { + FontFormat fontFormat = null; try { if (ttfFile.getPath().toLowerCase().endsWith(".otf")) { + fontFormat = FontFormat.OTF; OTFParser parser = new OTFParser(false); OpenTypeFont otf = parser.parse(new RandomAccessReadBufferedFile(ttfFile)); addTrueTypeFontImpl(otf, ttfFile); } else { + fontFormat = FontFormat.TTF; TTFParser parser = new TTFParser(false); TrueTypeFont ttf = parser.parse(new RandomAccessReadBufferedFile(ttfFile)); addTrueTypeFontImpl(ttf, ttfFile); @@ -644,6 +696,7 @@ final class FileSystemFontProvider extends FontProvider catch (IOException e) { LOG.warn("Could not load font file: " + ttfFile, e); + fontInfoList.add(createFSIgnored(ttfFile, fontFormat, "*skipexception*")); } } @@ -657,7 +710,7 @@ final class FileSystemFontProvider extends FontProvider // read PostScript name, if any if (ttf.getName() != null && ttf.getName().contains("|")) { - fontInfoList.add(new FSIgnored(file, FontFormat.TTF, "*skippipeinname*")); + fontInfoList.add(createFSIgnored(file, FontFormat.TTF, "*skippipeinname*")); LOG.warn("Skipping font with '|' in name " + ttf.getName() + " in file " + file); } else if (ttf.getName() != null) @@ -665,7 +718,7 @@ final class FileSystemFontProvider extends FontProvider // ignore bitmap fonts if (ttf.getHeader() == null) { - fontInfoList.add(new FSIgnored(file, FontFormat.TTF, ttf.getName())); + fontInfoList.add(createFSIgnored(file, FontFormat.TTF, ttf.getName())); return; } int macStyle = ttf.getHeader().getMacStyle(); @@ -686,6 +739,12 @@ final class FileSystemFontProvider extends FontProvider panose = os2WindowsMetricsTable.getPanose(); } + byte[] ba; + try (InputStream is = ttf.getOriginalData()) + { + ba = IOUtils.toByteArray(is); + } + String hash = computeHash(ba); String format; if (ttf instanceof OpenTypeFont && ((OpenTypeFont) ttf).isPostScript()) { @@ -706,7 +765,7 @@ final class FileSystemFontProvider extends FontProvider } fontInfoList.add(new FSFontInfo(file, FontFormat.OTF, ttf.getName(), ros, usWeightClass, sFamilyClass, ulCodePageRange1, ulCodePageRange2, - macStyle, panose, this)); + macStyle, panose, this, hash, file.lastModified())); } else { @@ -726,7 +785,7 @@ final class FileSystemFontProvider extends FontProvider format = "TTF"; fontInfoList.add(new FSFontInfo(file, FontFormat.TTF, ttf.getName(), ros, usWeightClass, sFamilyClass, ulCodePageRange1, ulCodePageRange2, - macStyle, panose, this)); + macStyle, panose, this, hash, file.lastModified())); } if (LOG.isTraceEnabled()) @@ -742,13 +801,13 @@ final class FileSystemFontProvider extends FontProvider } else { - fontInfoList.add(new FSIgnored(file, FontFormat.TTF, "*skipnoname*")); + fontInfoList.add(createFSIgnored(file, FontFormat.TTF, "*skipnoname*")); LOG.warn("Missing 'name' entry for PostScript name in font " + file); } } catch (IOException e) { - fontInfoList.add(new FSIgnored(file, FontFormat.TTF, "*skipexception*")); + fontInfoList.add(createFSIgnored(file, FontFormat.TTF, "*skipexception*")); LOG.warn("Could not load font file: " + file, e); } finally @@ -767,18 +826,19 @@ final class FileSystemFontProvider extends FontProvider Type1Font type1 = Type1Font.createWithPFB(input); if (type1.getName() == null) { - fontInfoList.add(new FSIgnored(pfbFile, FontFormat.PFB, "*skipnoname*")); + fontInfoList.add(createFSIgnored(pfbFile, FontFormat.PFB, "*skipnoname*")); LOG.warn("Missing 'name' entry for PostScript name in font " + pfbFile); return; } if (type1.getName().contains("|")) { - fontInfoList.add(new FSIgnored(pfbFile, FontFormat.PFB, "*skippipeinname*")); + fontInfoList.add(createFSIgnored(pfbFile, FontFormat.PFB, "*skippipeinname*")); LOG.warn("Skipping font with '|' in name " + type1.getName() + " in file " + pfbFile); return; } + String hash = computeHash(Files.readAllBytes(pfbFile.toPath())); fontInfoList.add(new FSFontInfo(pfbFile, FontFormat.PFB, type1.getName(), - null, -1, -1, 0, 0, -1, null, this)); + null, -1, -1, 0, 0, -1, null, this, hash, pfbFile.lastModified())); if (LOG.isTraceEnabled()) { @@ -813,4 +873,20 @@ final class FileSystemFontProvider extends FontProvider { return fontInfoList; } + + private static String computeHash(byte[] ba) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("SHA512"); + byte[] md5 = md.digest(ba); + return Hex.getString(md5); + } + catch (NoSuchAlgorithmException ex) + { + // never happens + return ""; + } + } } -- Gitee From 65a0f6773d41a9f57953b4f56401e49f0b86508c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Mon, 25 Sep 2023 05:47:52 +0000 Subject: [PATCH 50/64] PDFBOX-5660: use constants to make it easier to understand the complex code git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912536 13f79535-47bb-0310-9956-ffa450edef68 --- .../encryption/StandardSecurityHandler.java | 204 +++++++++++------- 1 file changed, 124 insertions(+), 80 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java index 8e37eb34e2..4b849c8403 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java @@ -53,6 +53,12 @@ public final class StandardSecurityHandler extends SecurityHandler= 4) { + if (encryption.getVersion() >= REVISION_4) { setStreamFilterName(encryption.getStreamFilterName()); setStringFilterName(encryption.getStringFilterName()); } @@ -164,7 +170,7 @@ public final class StandardSecurityHandler extends SecurityHandler=0; i-- ) + byte[] iterationKey = new byte[rc4Key.length]; + byte[] otemp = new byte[owner.length]; + System.arraycopy(owner, 0, otemp, 0, owner.length); + + for (int i = 19; i >= 0; i--) { - System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length ); - for( int j=0; j< iterationKey.length; j++ ) + System.arraycopy(rc4Key, 0, iterationKey, 0, rc4Key.length); + for (int j = 0; j < iterationKey.length; j++) { - iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i); + iterationKey[j] = (byte) (iterationKey[j] ^ (byte) i); } result.reset(); encryptDataRC4(iterationKey, otemp, result); @@ -687,7 +725,7 @@ public final class StandardSecurityHandler extends SecurityHandler Date: Sat, 30 Sep 2023 10:49:43 +0000 Subject: [PATCH 51/64] PDFBOX-5660: update commons-io git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912623 13f79535-47bb-0310-9956-ffa450edef68 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index d7d4f5d86f..d9ac4f9f7b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -75,7 +75,7 @@ commons-io commons-io - 2.13.0 + 2.14.0 test -- Gitee From 395da7d17c7c55aa956a89e4523b7162de2bacf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sat, 30 Sep 2023 15:27:32 +0000 Subject: [PATCH 52/64] PDFBOX-5687: remove obsolete KCMS option git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912629 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdmodel/graphics/color/PDICCBased.java | 32 +-------- .../apache/pdfbox/rendering/PDFRenderer.java | 66 ------------------- 2 files changed, 3 insertions(+), 95 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java index f8228ceac2..5ec3985b22 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java @@ -67,27 +67,6 @@ public final class PDICCBased extends PDCIEBasedColorSpace // reasons with LittleCMS (LCMS), see PDFBOX-4309 // WARNING: do not activate this in a conforming reader private boolean useOnlyAlternateColorSpace = false; - private static final boolean IS_KCMS; - - static - { - String cmmProperty = System.getProperty("sun.java2d.cmm"); - boolean result = false; - if ("sun.java2d.cmm.kcms.KcmsServiceProvider".equals(cmmProperty)) - { - try - { - Class.forName("sun.java2d.cmm.kcms.KcmsServiceProvider"); - result = true; - } - catch (ClassNotFoundException e) - { - // KCMS not available - } - } - // else maybe KCMS was available, but not wished - IS_KCMS = result; - } /** * Creates a new ICC color space with an empty stream. @@ -229,17 +208,12 @@ public final class PDICCBased extends PDCIEBasedColorSpace // do things that trigger a ProfileDataException // or CMMException due to invalid profiles, see PDFBOX-1295 and PDFBOX-1740 (ü-file) // or ArrayIndexOutOfBoundsException, see PDFBOX-3610 - // also triggers a ProfileDataException for PDFBOX-3549 with KCMS - /// also triggers a ProfileDataException for PDFBOX-3549 with KCMS // also triggers "CMMException: LCMS error 13" for PDFBOX-5563 with LCMS, but // calling "new ComponentColorModel" doesn't awtColorSpace.toRGB(new float[numOfComponents]); - if (!IS_KCMS) - { - // PDFBOX-4015: this one triggers "CMMException: LCMS error 13" with LCMS - new ComponentColorModel(awtColorSpace, false, false, - Transparency.OPAQUE, DataBuffer.TYPE_BYTE); - } + // PDFBOX-4015: this one triggers "CMMException: LCMS error 13" with LCMS + new ComponentColorModel(awtColorSpace, false, false, Transparency.OPAQUE, + DataBuffer.TYPE_BYTE); } } catch (ProfileDataException | CMMException | IllegalArgumentException | diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java index 1c05f89b56..0baf678e88 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java @@ -24,10 +24,6 @@ import java.awt.GraphicsDevice; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; @@ -48,8 +44,6 @@ import org.apache.pdfbox.pdmodel.interactive.annotation.AnnotationFilter; */ public class PDFRenderer { - private static final Log LOG = LogFactory.getLog(PDFRenderer.class); - protected final PDDocument document; // TODO keep rendering state such as caches here @@ -66,8 +60,6 @@ public class PDFRenderer private BufferedImage pageImage; - private static boolean kcmsLogged = false; - private float imageDownscalingOptimizationThreshold = 0.5f; private final PDPageTree pageTree; @@ -80,12 +72,6 @@ public class PDFRenderer { this.document = document; this.pageTree = document.getPages(); - - if (!kcmsLogged) - { - suggestKCMS(); - kcmsLogged = true; - } } /** @@ -579,56 +565,4 @@ public class PDFRenderer return pageImage; } - private static void suggestKCMS() - { - String cmmProperty = System.getProperty("sun.java2d.cmm"); - if (!"sun.java2d.cmm.kcms.KcmsServiceProvider".equals(cmmProperty)) - { - try - { - // Make sure that class exists - Class.forName("sun.java2d.cmm.kcms.KcmsServiceProvider"); - - String version = System.getProperty("java.version"); - if (version == null || - isGoodVersion(version, "1.8.0_(\\d+)", 191) || - isGoodVersion(version, "9.0.(\\d+)", 4)) - { - return; - } - LOG.info("Your current java version is: " + version); - LOG.info("To get higher rendering speed on old java 1.8 or 9 versions,"); - LOG.info(" update to the latest 1.8 or 9 version (>= 1.8.0_191 or >= 9.0.4),"); - LOG.info(" or"); - LOG.info(" use the option -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider"); - LOG.info(" or call System.setProperty(\"sun.java2d.cmm\", \"sun.java2d.cmm.kcms.KcmsServiceProvider\")"); - } - catch (ClassNotFoundException e) - { - // KCMS not available - } - } - } - - private static boolean isGoodVersion(String version, String regex, int min) - { - Matcher matcher = Pattern.compile(regex).matcher(version); - if (matcher.matches() && matcher.groupCount() >= 1) - { - try - { - int v = Integer.parseInt(matcher.group(1)); - if (v >= min) - { - // LCMS no longer bad - return true; - } - } - catch (NumberFormatException ex) - { - return true; - } - } - return false; - } } -- Gitee From bf25ded70020bd728ac2f152ffd4c48055ccea60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sat, 30 Sep 2023 16:00:27 +0000 Subject: [PATCH 53/64] PDFBOX-5667: don't hold System.out/System.err as static reference to avoid issues when testing the command line tools git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912631 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java | 2 +- .../java/org/apache/pdfbox/tools/DecompressObjectstreams.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java | 2 +- .../src/main/java/org/apache/pdfbox/tools/ExtractImages.java | 4 ++-- tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java | 4 ++-- tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java | 4 ++-- tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java | 4 ++-- tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java | 2 +- tools/src/main/java/org/apache/pdfbox/tools/Version.java | 2 +- .../main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java | 2 +- 20 files changed, 24 insertions(+), 24 deletions(-) diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java index 9ff130b012..f0c6c86452 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java @@ -209,7 +209,7 @@ public class PDFDebugger extends JFrame implements Callable, HyperlinkL // cli options // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = { "-h", "--help" }, usageHelp = true, description = "display this help message") boolean usageHelpRequested; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java b/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java index 3fb316bfd3..1c14c3bf6c 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java @@ -41,7 +41,7 @@ public final class DecompressObjectstreams implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = {"-h", "--help"}, usageHelp = true, description = "display this help message") boolean usageHelpRequested; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java b/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java index ae74b39380..2bab6fde56 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java @@ -48,7 +48,7 @@ public final class Decrypt implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-alias", description = "the alias to the certificate in the keystore.") private String alias; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java b/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java index 2330d5e150..ed16d9fba6 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java @@ -59,7 +59,7 @@ public final class Encrypt implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-O", description = "set the owner password (ignored if certFile is set)", arity = "0..1", interactive = true) private String ownerPassword; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java index d1e406e1bb..f93c239292 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java @@ -41,7 +41,7 @@ public final class ExportFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = {"-i", "--input"}, description = "the PDF file to export", required = true) private File infile; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java index 6468deb6ef..342409d33e 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java @@ -42,7 +42,7 @@ public final class ExportXFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = {"-i", "--input"}, description = "the PDF file to export", required = true) private File infile; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java b/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java index 02e16287c2..30a90eccdf 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java @@ -72,9 +72,9 @@ public final class ExtractImages implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT = System.out; @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; private static final List JPEG = Arrays.asList( COSName.DCT_DECODE.getName(), diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java b/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java index cfddbee348..e047ebf65a 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java @@ -67,9 +67,9 @@ public final class ExtractText implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT = System.out; @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-alwaysNext", description = "Process next page (if applicable) despite IOException " + "(ignored when -html)") diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java b/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java index 168e23a0c3..f2d3e01a9b 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java @@ -41,9 +41,9 @@ public class ExtractXMP implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT = System.out; @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @CommandLine.Option(names = "-page", description = "extract the XMP information from a specific page (1 based)") private int page = 0; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java index 1e9a880282..354d7c3cfd 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java @@ -41,7 +41,7 @@ public final class ImageToPDF implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-autoOrientation", description = "set orientation depending of image proportion") private boolean autoOrientation = false; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java index fc250b6857..44c0ac49b0 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java @@ -42,7 +42,7 @@ public class ImportFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = {"-i", "--input"}, description = "the PDF file to import to", required = true) private File infile; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java index a537a354d6..4a10f519a4 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java @@ -43,7 +43,7 @@ public class ImportXFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = {"-i", "--input"}, description = "the PDF file to import to", required = true) private File infile; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java index 69b3b3581a..6652686eb6 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java @@ -43,7 +43,7 @@ public final class OverlayPDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-odd", description = "overlay file used for odd pages") private File oddPageOverlay; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java index bf84129c35..79c3180f6c 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java @@ -39,7 +39,7 @@ public final class PDFMerger implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = {"-i", "--input"}, description = "the PDF files to merge.", paramLabel = "", required = true) private File[] infiles; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java index 0fe27f6011..31a4adf867 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java @@ -43,7 +43,7 @@ public final class PDFSplit implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-password", description = "the password to decrypt the document.", arity = "0..1", interactive = true) private String password; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java index d2f1de5470..b8a0569190 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java @@ -53,7 +53,7 @@ public final class PDFToImage implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-password", description = "the password to decrypt the document", arity = "0..1", interactive = true) private String password; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java index 05f391255e..9389ce4801 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java @@ -85,7 +85,7 @@ public final class PrintPDF implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-password", description = "the password to decrypt the document.", arity = "0..1", interactive = true) private String password; @@ -312,7 +312,7 @@ public final class PrintPDF implements Callable } @Command(name = "listPrinters", description = "list available printers", helpCommand = true) - private static void showAvailablePrinters() + private void showAvailablePrinters() { SYSERR.println("Available printer names:"); PrintService[] printServices = PrinterJob.lookupPrintServices(); diff --git a/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java index 6d5f2a189d..bed15c1af4 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java @@ -70,7 +70,7 @@ public class TextToPDF implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-fontSize", description = "the size of the font to use (default: ${DEFAULT-VALUE}") private int fontSize = DEFAULT_FONT_SIZE; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/Version.java b/tools/src/main/java/org/apache/pdfbox/tools/Version.java index 9b5fa849b9..20f9b2a186 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/Version.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/Version.java @@ -35,7 +35,7 @@ final class Version implements Callable, IVersionProvider { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT = System.out; @Spec CommandSpec spec; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java b/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java index 2598a114d1..91cad79656 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java @@ -47,7 +47,7 @@ public class WriteDecodedDoc implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private static final PrintStream SYSERR = System.err; + private final PrintStream SYSERR = System.err; @Option(names = "-password", description = "the password to decrypt the document", arity = "0..1", interactive = true) private String password; -- Gitee From 97143ce69522bc012ae9fa9181d678cb96938b15 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sat, 30 Sep 2023 19:11:59 +0000 Subject: [PATCH 54/64] PDFBOX-5689: move annoying warning to debug log level git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912634 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java index 20569b51fc..bb59427db9 100644 --- a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java @@ -303,7 +303,7 @@ public class GlyphSubstitutionDataExtractor { String message = "For the newGlyph: " + newGlyph + ", newValue: " + glyphsToBeSubstituted + " is trying to override the oldValue: " + oldValue; - LOG.warn(message); + LOG.debug(message); } } -- Gitee From 9840844dc481209add26f91064666d52c7bb7462 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 1 Oct 2023 10:15:23 +0000 Subject: [PATCH 55/64] PDFBOX-5660: update shade plugin git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912648 13f79535-47bb-0310-9956-ffa450edef68 --- benchmark/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/pom.xml b/benchmark/pom.xml index 8689ed82f6..83c867c5b3 100644 --- a/benchmark/pom.xml +++ b/benchmark/pom.xml @@ -67,7 +67,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.0 + 3.5.1 package -- Gitee From 38633a72bd94b18f020c13687a76332a2b365d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Thu, 5 Oct 2023 06:27:27 +0000 Subject: [PATCH 56/64] PDFBOX-5693: remove unused bcmail dependency, replace Class.forName call git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912742 13f79535-47bb-0310-9956-ffa450edef68 --- app/pom.xml | 2 +- debugger-app/pom.xml | 2 +- debugger/pom.xml | 5 ----- examples/pom.xml | 7 +++++-- parent/pom.xml | 5 ----- pdfbox/pom.xml | 6 ++++-- .../pdmodel/encryption/SecurityProvider.java | 16 +++------------ preflight-app/pom.xml | 2 +- preflight/pom.xml | 20 +++++-------------- tools/pom.xml | 5 ----- 10 files changed, 20 insertions(+), 50 deletions(-) diff --git a/app/pom.xml b/app/pom.xml index 931c7e8c26..dd1eaf7cca 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -41,7 +41,7 @@ org.bouncycastle - bcmail-jdk18on + bcpkix-jdk18on provided diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml index 7fdf24b3f0..289b63e01c 100644 --- a/debugger-app/pom.xml +++ b/debugger-app/pom.xml @@ -41,7 +41,7 @@ org.bouncycastle - bcmail-jdk18on + bcpkix-jdk18on provided diff --git a/debugger/pom.xml b/debugger/pom.xml index f5c1aeabc3..3c09791a4a 100644 --- a/debugger/pom.xml +++ b/debugger/pom.xml @@ -38,11 +38,6 @@ 2002 - - org.bouncycastle - bcmail-jdk18on - true - ${project.groupId} pdfbox diff --git a/examples/pom.xml b/examples/pom.xml index b57ee93712..4cbe0ae874 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -45,8 +45,11 @@ org.bouncycastle - bcmail-jdk18on - true + bcprov-jdk18on + + + org.bouncycastle + bcpkix-jdk18on ${project.groupId} diff --git a/parent/pom.xml b/parent/pom.xml index d9ac4f9f7b..8058387761 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -83,11 +83,6 @@ bcprov-jdk18on ${bouncycastle.version} - - org.bouncycastle - bcmail-jdk18on - ${bouncycastle.version} - org.bouncycastle bcpkix-jdk18on diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml index 44a0d7dba7..79c8e687cf 100644 --- a/pdfbox/pom.xml +++ b/pdfbox/pom.xml @@ -57,12 +57,14 @@ org.bouncycastle - bcmail-jdk18on + bcprov-jdk18on + compile true org.bouncycastle - bcprov-jdk18on + bcpkix-jdk18on + compile true diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java index 8492c08461..6478570b4c 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java @@ -17,9 +17,10 @@ package org.apache.pdfbox.pdmodel.encryption; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.security.Provider; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + /** * Singleton which provides a security provider. * @@ -44,18 +45,7 @@ public class SecurityProvider // TODO synchronize access if (provider == null) { - try - { - Class providerClass = (Class) Class - .forName("org.bouncycastle.jce.provider.BouncyCastleProvider"); - provider = providerClass.getDeclaredConstructor().newInstance(); - } - catch (ClassNotFoundException | InstantiationException | IllegalAccessException | - NoSuchMethodException | SecurityException | IllegalArgumentException | - InvocationTargetException ex) - { - throw new IOException(ex); - } + provider = new BouncyCastleProvider(); } return provider; } diff --git a/preflight-app/pom.xml b/preflight-app/pom.xml index bd0db46472..c9f4958b58 100644 --- a/preflight-app/pom.xml +++ b/preflight-app/pom.xml @@ -53,7 +53,7 @@ org.bouncycastle - bcmail-jdk18on + bcpkix-jdk18on provided diff --git a/preflight/pom.xml b/preflight/pom.xml index 1cb2b617d6..aba4550b18 100644 --- a/preflight/pom.xml +++ b/preflight/pom.xml @@ -164,21 +164,11 @@ - - org.bouncycastle - bcmail-jdk18on - true - - - org.bouncycastle - bcprov-jdk18on - true - - - org.apache.pdfbox - jbig2-imageio - test - + + org.apache.pdfbox + jbig2-imageio + test + diff --git a/tools/pom.xml b/tools/pom.xml index e6a3634a28..d05b1db0ae 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -38,11 +38,6 @@ 2002 - - org.bouncycastle - bcmail-jdk18on - true - ${project.groupId} pdfbox-debugger -- Gitee From 6ae18d4d255e50e4cec819b960fed25206c1477c Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Fri, 6 Oct 2023 15:28:49 +0000 Subject: [PATCH 57/64] PDFBOX-5694: improve log message git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912775 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/pdfbox/rendering/TilingPaint.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java index 1003a793f9..fbb7780e7b 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java @@ -227,12 +227,13 @@ class TilingPaint implements Paint if (Math.abs(width * height) > MAXEDGE * MAXEDGE) { // PDFBOX-3653: prevent huge sizes - LOG.info("Pattern surface is too large, will be clipped"); - LOG.info("width: " + width + ", height: " + height); - LOG.info("XStep: " + xStep + ", YStep: " + yStep); - LOG.info("bbox: " + bbox); - LOG.info("pattern matrix: " + pattern.getMatrix()); - LOG.info("concatenated matrix: " + patternMatrix); + LOG.warn("Pattern surface larger than " + MAXEDGE + " x " + MAXEDGE + ", will be clipped"); + LOG.warn("width: " + width + ", height: " + height); + LOG.warn("XStep: " + xStep + ", YStep: " + yStep); + LOG.warn("bbox: " + bbox); + LOG.warn("pattern matrix: " + pattern.getMatrix()); + LOG.warn("concatenated matrix: " + patternMatrix); + LOG.warn("increase the property 'pdfbox.rendering.tilingpaint.maxedge'"); width = Math.min(MAXEDGE, Math.abs(width)) * Math.signum(width); height = Math.min(MAXEDGE, Math.abs(height)) * Math.signum(height); //TODO better solution needed -- Gitee From 27dfaf707330c774618c2487ec9666a64f68626d Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 8 Oct 2023 07:33:34 +0000 Subject: [PATCH 58/64] PDFBOX-5660: update commons-net git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912807 13f79535-47bb-0310-9956-ffa450edef68 --- examples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pom.xml b/examples/pom.xml index 4cbe0ae874..19c46020c4 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -101,7 +101,7 @@ commons-net commons-net - 3.9.0 + 3.10.0 test -- Gitee From d96a47a4e30e1889bdfa698732544baab2cd10a3 Mon Sep 17 00:00:00 2001 From: Tilman Hausherr Date: Sun, 8 Oct 2023 10:22:15 +0000 Subject: [PATCH 59/64] PDFBOX-5350: disable strict mode, as suggested by John Mayfield; add test file git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912810 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/pdfbox/pdmodel/font/CMapManager.java | 3 +-- ...7O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf | Bin 0 -> 48143 bytes ...FZABPULQGTW4OXPCWA-p1-reduced.pdf-sorted.txt | 1 + ...5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf.txt | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf create mode 100644 pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf-sorted.txt create mode 100644 pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf.txt diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java index aed9806069..4c43dcb80d 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java @@ -69,8 +69,7 @@ final class CMapManager CMap targetCmap = null; if (randomAccessRead != null) { - // parse CMap using strict mode - targetCmap = new CMapParser(true).parse(randomAccessRead); + targetCmap = new CMapParser().parse(randomAccessRead); } return targetCmap; } diff --git a/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf b/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6622c4de4958aab13030c33861187a3d57fbe99d GIT binary patch literal 48143 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­M$+7l2F^7-{!Z~ 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 Zd%%4>Z0*QN`T0f2N!i(-Xeg4C{x2B>qND%- literal 0 HcmV?d00001 diff --git a/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf-sorted.txt b/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf-sorted.txt new file mode 100644 index 0000000000..093a892dde --- /dev/null +++ b/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf-sorted.txt @@ -0,0 +1 @@ +사회복지법인 diff --git a/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf.txt b/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf.txt new file mode 100644 index 0000000000..093a892dde --- /dev/null +++ b/pdfbox/src/test/resources/input/PDFBOX-5350-JX57O5E5YG6XM4FZABPULQGTW4OXPCWA-p1-reduced.pdf.txt @@ -0,0 +1 @@ +사회복지법인 -- Gitee From 8bb211d6d722b49cf8e40cfc724e5878ce8790f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sun, 8 Oct 2023 10:43:49 +0000 Subject: [PATCH 60/64] PDFBOX-5683: be more lenient and skip issues with the header as proposed by Patrick Dalla Bernardina git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912814 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/pdfbox/pdfparser/PDFParser.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java index 1c855e64bb..ba87efe844 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java @@ -176,7 +176,14 @@ public class PDFParser extends COSParser // PDFBOX-1922 read the version header and rewind if (!parsePDFHeader() && !parseFDFHeader()) { - throw new IOException( "Error: Header doesn't contain versioninfo" ); + if (lenient) + { + LOG.warn("Error: Header doesn't contain versioninfo"); + } + else + { + throw new IOException("Error: Header doesn't contain versioninfo"); + } } if (!initialParseDone) -- Gitee From 1d8560f894c7ef1d248a852230d15cfbbb6b93ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sun, 8 Oct 2023 10:45:57 +0000 Subject: [PATCH 61/64] PDFBOX-5683: replace missing pages with an empty one git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912817 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/pdfbox/pdmodel/PDPageTree.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java index 522cb6cb40..86396a5223 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java @@ -155,8 +155,18 @@ public class PDPageTree implements COSObjectable, Iterable } else { - LOG.warn("COSDictionary expected, but got " + - (base == null ? "null" : base.getClass().getSimpleName())); + if (base == null) + { + LOG.warn("replaced null entry with an empty page"); + COSDictionary emptyPage = new COSDictionary(); + emptyPage.setItem(COSName.TYPE, COSName.PAGE); + kids.set(i, emptyPage); + result.add(emptyPage); + } + else + { + LOG.warn("COSDictionary expected, but got " + base.getClass().getSimpleName()); + } } } -- Gitee From d7688beeea5f0b0dc0f16f06d36cfe1dc477207f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Sun, 8 Oct 2023 14:35:50 +0000 Subject: [PATCH 62/64] PDFBOX-5667: sonar fix, fixed some copy&paste bugs git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912824 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/pdfbox/debugger/PDFDebugger.java | 4 +++- .../pdfbox/tools/DecompressObjectstreams.java | 7 ++++--- .../java/org/apache/pdfbox/tools/Decrypt.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/Encrypt.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/ExportFDF.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/ExportXFDF.java | 10 +++++++++- .../org/apache/pdfbox/tools/ExtractImages.java | 13 +++++++++++-- .../java/org/apache/pdfbox/tools/ExtractText.java | 13 +++++++++++-- .../java/org/apache/pdfbox/tools/ExtractXMP.java | 15 ++++++++++++--- .../java/org/apache/pdfbox/tools/ImageToPDF.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/ImportFDF.java | 13 ++++++++++--- .../java/org/apache/pdfbox/tools/ImportXFDF.java | 15 +++++++++++---- .../java/org/apache/pdfbox/tools/OverlayPDF.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/PDFMerger.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/PDFSplit.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/PDFToImage.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/PrintPDF.java | 10 +++++++++- .../java/org/apache/pdfbox/tools/TextToPDF.java | 13 ++++++++++--- .../java/org/apache/pdfbox/tools/Version.java | 10 +++++++++- .../org/apache/pdfbox/tools/WriteDecodedDoc.java | 4 ++-- 20 files changed, 173 insertions(+), 34 deletions(-) diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java index f0c6c86452..37569ed947 100644 --- a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java @@ -209,7 +209,7 @@ public class PDFDebugger extends JFrame implements Callable, HyperlinkL // cli options // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = { "-h", "--help" }, usageHelp = true, description = "display this help message") boolean usageHelpRequested; @@ -233,6 +233,7 @@ public class PDFDebugger extends JFrame implements Callable, HyperlinkL */ public PDFDebugger() { + SYSERR = System.err; if (viewstructure) { currentTreeViewMode = TreeViewMenu.VIEW_STRUCTURE; @@ -247,6 +248,7 @@ public class PDFDebugger extends JFrame implements Callable, HyperlinkL */ public PDFDebugger(String initialViewMode) { + SYSERR = System.err; if (TreeViewMenu.isValidViewMode(initialViewMode)) { currentTreeViewMode = initialViewMode; diff --git a/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java b/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java index 1c14c3bf6c..f1c9fdd8ca 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/DecompressObjectstreams.java @@ -41,7 +41,7 @@ public final class DecompressObjectstreams implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = {"-h", "--help"}, usageHelp = true, description = "display this help message") boolean usageHelpRequested; @@ -53,10 +53,11 @@ public final class DecompressObjectstreams implements Callable private File outfile; /** - * private constructor. + * Constructor. */ - private DecompressObjectstreams() + public DecompressObjectstreams() { + SYSERR = System.err; } /** diff --git a/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java b/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java index 2bab6fde56..2be636496f 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/Decrypt.java @@ -48,7 +48,7 @@ public final class Decrypt implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-alias", description = "the alias to the certificate in the keystore.") private String alias; @@ -66,6 +66,14 @@ public final class Decrypt implements Callable @Option(names = {"-o", "--output"}, description = "the decrypted PDF file. If omitted the original file is overwritten.") private File outfile; + /** + * Constructor. + */ + public Decrypt() + { + SYSERR = System.err; + } + /** * This is the entry point for the application. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java b/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java index ed16d9fba6..9aff766315 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/Encrypt.java @@ -59,7 +59,7 @@ public final class Encrypt implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-O", description = "set the owner password (ignored if certFile is set)", arity = "0..1", interactive = true) private String ownerPassword; @@ -103,6 +103,14 @@ public final class Encrypt implements Callable @Option(names = {"-o", "--output"}, description = "the encrypted PDF file. If omitted the original file is overwritten.") private File outfile; + /** + * Constructor. + */ + public Encrypt() + { + SYSERR = System.err; + } + /** * This is the entry point for the application. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java index f93c239292..2e953d52ca 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExportFDF.java @@ -41,7 +41,7 @@ public final class ExportFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = {"-i", "--input"}, description = "the PDF file to export", required = true) private File infile; @@ -49,6 +49,14 @@ public final class ExportFDF implements Callable @Option(names = {"-o", "--output"}, description = "the FDF data file", required = true) private File outfile; + /** + * Constructor. + */ + public ExportFDF() + { + SYSERR = System.err; + } + /** * This is the entry point for the application. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java index 342409d33e..fff7328f47 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExportXFDF.java @@ -42,7 +42,7 @@ public final class ExportXFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = {"-i", "--input"}, description = "the PDF file to export", required = true) private File infile; @@ -50,6 +50,14 @@ public final class ExportXFDF implements Callable @Option(names = {"-o", "--output"}, description = "the XFDF data file", required = true) private File outfile; + /** + * Constructor. + */ + public ExportXFDF() + { + SYSERR = System.err; + } + /** * This is the entry point for the application. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java b/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java index 30a90eccdf..376511a53a 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java @@ -72,9 +72,9 @@ public final class ExtractImages implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT; @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; private static final List JPEG = Arrays.asList( COSName.DCT_DECODE.getName(), @@ -100,6 +100,15 @@ public final class ExtractImages implements Callable private final Set seen = new HashSet<>(); private int imageCounter = 1; + /** + * Constructor. + */ + public ExtractImages() + { + SYSOUT = System.out; + SYSERR = System.err; + } + /** * Entry point for the application. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java b/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java index e047ebf65a..37b927a476 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExtractText.java @@ -67,9 +67,9 @@ public final class ExtractText implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT; @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-alwaysNext", description = "Process next page (if applicable) despite IOException " + "(ignored when -html)") @@ -112,6 +112,15 @@ public final class ExtractText implements Callable @Option(names = {"-o", "--output"}, description = "the exported text file") private File outfile; + /** + * Constructor. + */ + public ExtractText() + { + SYSOUT = System.out; + SYSERR = System.err; + } + /** * Infamous main method. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java b/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java index f2d3e01a9b..acdb4d2133 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ExtractXMP.java @@ -41,9 +41,9 @@ public class ExtractXMP implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT; @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @CommandLine.Option(names = "-page", description = "extract the XMP information from a specific page (1 based)") private int page = 0; @@ -60,6 +60,15 @@ public class ExtractXMP implements Callable @CommandLine.Option(names = {"-o", "--output"}, description = "the exported text file") private File outfile; + /** + * Constructor. + */ + private ExtractXMP() + { + SYSOUT = System.out; + SYSERR = System.err; + } + /** * Infamous main method. * @@ -70,7 +79,7 @@ public class ExtractXMP implements Callable // suppress the Dock icon on OS X System.setProperty("apple.awt.UIElement", "true"); - int exitCode = new CommandLine(new ExtractText()).execute(args); + int exitCode = new CommandLine(new ExtractXMP()).execute(args); System.exit(exitCode); } diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java index 354d7c3cfd..c65a012a98 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ImageToPDF.java @@ -41,7 +41,7 @@ public final class ImageToPDF implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-autoOrientation", description = "set orientation depending of image proportion") private boolean autoOrientation = false; @@ -61,6 +61,14 @@ public final class ImageToPDF implements Callable @Option(names = {"-o", "--output"}, description = "the generated PDF file", required = true) private File outfile; + /** + * Constructor. + */ + public ImageToPDF() + { + SYSERR = System.err; + } + public static void main(String[] args) { // suppress the Dock icon on OS X diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java index 44c0ac49b0..d807ae69eb 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ImportFDF.java @@ -42,7 +42,7 @@ public class ImportFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = {"-i", "--input"}, description = "the PDF file to import to", required = true) private File infile; @@ -77,8 +77,15 @@ public class ImportFDF implements Callable } /** - * This will import an fdf document and write out another pdf. - *
+ * Constructor. + */ + public ImportFDF() + { + SYSERR = System.err; + } + + /** + * This will import an fdf document and write out another pdf.
* see usage() for commandline * * @param args command line arguments diff --git a/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java b/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java index 4a10f519a4..0d1f3fd967 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/ImportXFDF.java @@ -43,7 +43,7 @@ public class ImportXFDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = {"-i", "--input"}, description = "the PDF file to import to", required = true) private File infile; @@ -72,8 +72,15 @@ public class ImportXFDF implements Callable } /** - * This will import an fdf document and write out another pdf. - *
+ * Constructor. + */ + public ImportXFDF() + { + SYSERR = System.err; + } + + /** + * This will import an fdf document and write out another pdf.
* see usage() for commandline * * @param args command line arguments @@ -89,7 +96,7 @@ public class ImportXFDF implements Callable public Integer call() { - ImportFDF importer = new ImportFDF(); + ImportXFDF importer = new ImportXFDF(); try (PDDocument pdf = Loader.loadPDF(infile); FDFDocument fdf = Loader.loadXFDF(xfdffile)) { diff --git a/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java index 6652686eb6..50eddfaf26 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java @@ -43,7 +43,7 @@ public final class OverlayPDF implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-odd", description = "overlay file used for odd pages") private File oddPageOverlay; @@ -75,6 +75,14 @@ public final class OverlayPDF implements Callable @Option(names = {"-o", "--output"}, description = "the PDF output file", required = true) private File outfile; + /** + * Constructor. + */ + public OverlayPDF() + { + SYSERR = System.err; + } + /** * This will overlay a document and write out the results. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java index 79c3180f6c..53ac7beeea 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFMerger.java @@ -39,7 +39,7 @@ public final class PDFMerger implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = {"-i", "--input"}, description = "the PDF files to merge.", paramLabel = "", required = true) private File[] infiles; @@ -47,6 +47,14 @@ public final class PDFMerger implements Callable @Option(names = {"-o", "--output"}, description = "the merged PDF file.", required = true) private File outfile; + /** + * Constructor. + */ + public PDFMerger() + { + SYSERR = System.err; + } + /** * Infamous main method. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java index 31a4adf867..424805bd0d 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java @@ -43,7 +43,7 @@ public final class PDFSplit implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-password", description = "the password to decrypt the document.", arity = "0..1", interactive = true) private String password; @@ -63,6 +63,14 @@ public final class PDFSplit implements Callable @Option(names = {"-i", "--input"}, description = "the PDF file to split", required = true) private File infile; + /** + * Constructor. + */ + public PDFSplit() + { + SYSERR = System.err; + } + /** * Infamous main method. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java b/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java index b8a0569190..bf4a626ee6 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java @@ -53,7 +53,7 @@ public final class PDFToImage implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-password", description = "the password to decrypt the document", arity = "0..1", interactive = true) private String password; @@ -95,6 +95,14 @@ public final class PDFToImage implements Callable @Option(names = {"-i", "--input"}, description = "the PDF files to convert.", required = true) private File infile; + /** + * Constructor. + */ + public PDFToImage() + { + SYSERR = System.err; + } + /** * Infamous main method. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java index 9389ce4801..b323fcaba5 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java @@ -85,7 +85,7 @@ public final class PrintPDF implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-password", description = "the password to decrypt the document.", arity = "0..1", interactive = true) private String password; @@ -120,6 +120,14 @@ public final class PrintPDF implements Callable @Option(names = {"-i", "--input"}, description = "the PDF files to print.", required = true) private File infile; + /** + * Constructor. + */ + public PrintPDF() + { + SYSERR = System.err; + } + /** * Infamous main method. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java b/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java index bed15c1af4..d166d6d848 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java @@ -70,7 +70,7 @@ public class TextToPDF implements Callable // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-fontSize", description = "the size of the font to use (default: ${DEFAULT-VALUE}") private int fontSize = DEFAULT_FONT_SIZE; @@ -124,8 +124,15 @@ public class TextToPDF implements Callable } /** - * This will create a PDF document with some text in it. - *
+ * Constructor. + */ + public TextToPDF() + { + SYSERR = System.err; + } + + /** + * This will create a PDF document with some text in it.
* see usage() for commandline * * @param args Command line arguments. diff --git a/tools/src/main/java/org/apache/pdfbox/tools/Version.java b/tools/src/main/java/org/apache/pdfbox/tools/Version.java index 20f9b2a186..2deb0fea8d 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/Version.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/Version.java @@ -35,7 +35,7 @@ final class Version implements Callable, IVersionProvider { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSOUT = System.out; + private final PrintStream SYSOUT; @Spec CommandSpec spec; @@ -57,6 +57,14 @@ final class Version implements Callable, IVersionProvider } } + /** + * Constructor. + */ + public Version() + { + SYSOUT = System.out; + } + /** * This will print out the version of PDF to System.out. * diff --git a/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java b/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java index 91cad79656..3264fc6be7 100644 --- a/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java +++ b/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java @@ -47,7 +47,7 @@ public class WriteDecodedDoc implements Callable { // Expected for CLI app to write to System.out/System.err @SuppressWarnings("squid:S106") - private final PrintStream SYSERR = System.err; + private final PrintStream SYSERR; @Option(names = "-password", description = "the password to decrypt the document", arity = "0..1", interactive = true) private String password; @@ -66,7 +66,7 @@ public class WriteDecodedDoc implements Callable */ public WriteDecodedDoc() { - super(); + SYSERR = System.err; } /** -- Gitee From a8ce0705f9109a3d18f327048993a4d358e3ef93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Wed, 11 Oct 2023 06:01:55 +0000 Subject: [PATCH 63/64] PDFBOX-5696: update highest object number when saving a pdf git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912886 13f79535-47bb-0310-9956-ffa450edef68 --- pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java index 601fa3078b..077b7dca5b 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java @@ -1566,6 +1566,7 @@ public class COSWriter implements ICOSVisitor trailer.setItem(COSName.ID, idArray); } cosDoc.accept(this); + cosDoc.setHighestXRefObjectNumber(number); } /** -- Gitee From 879c4071f3e00b9a07cb9eabc1146bd6b7d10c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lehmk=C3=BChler?= Date: Wed, 11 Oct 2023 17:29:41 +0000 Subject: [PATCH 64/64] PDFBOX-5696: don't update highest object number for incremental updates git-svn-id: https://svn.apache.org/repos/asf/pdfbox/branches/3.0@1912906 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java index 077b7dca5b..9b8aa2e1a7 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java @@ -1566,7 +1566,10 @@ public class COSWriter implements ICOSVisitor trailer.setItem(COSName.ID, idArray); } cosDoc.accept(this); - cosDoc.setHighestXRefObjectNumber(number); + if (!incrementalUpdate) + { + cosDoc.setHighestXRefObjectNumber(number); + } } /** -- Gitee