You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2017/11/02 12:08:40 UTC

[camel] branch master updated: CAMEL-11976: Align pdfbox versions to 2.0.6

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 7a43e60  CAMEL-11976: Align pdfbox versions to 2.0.6
7a43e60 is described below

commit 7a43e60e5add11b85e23daadca671aed8ef23adc
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Wed Nov 1 15:53:00 2017 +0100

    CAMEL-11976: Align pdfbox versions to 2.0.6
---
 components/camel-fop/pom.xml                       | 19 +++++--
 .../camel/component/fop/FopComponentTest.java      |  7 +--
 .../camel/component/fop/FopEndpointTest.java       |  9 ++--
 .../org/apache/camel/component/fop/FopHelper.java  | 19 +------
 .../camel/component/pdf/PdfConfiguration.java      | 20 ++++----
 .../apache/camel/component/pdf/PdfProducer.java    | 35 ++-----------
 .../camel/component/pdf/Standard14Fonts.java       | 59 ++++++++++++++++++++++
 .../component/pdf/text/DefaultWriteStrategy.java   |  2 +-
 .../apache/camel/component/pdf/text/PdfUtils.java  |  4 +-
 .../apache/camel/component/pdf/PdfAppendTest.java  | 13 ++---
 .../camel/component/pdf/PdfCreationTest.java       |  5 +-
 .../camel/component/pdf/PdfTextExtractionTest.java |  9 ++--
 parent/pom.xml                                     | 31 +++++++++++-
 .../karaf/features/src/main/resources/features.xml |  5 +-
 .../camel-spring-boot-dependencies/pom.xml         | 25 +++++++++
 15 files changed, 175 insertions(+), 87 deletions(-)

diff --git a/components/camel-fop/pom.xml b/components/camel-fop/pom.xml
index b328937..e463551 100644
--- a/components/camel-fop/pom.xml
+++ b/components/camel-fop/pom.xml
@@ -72,7 +72,7 @@
             <artifactId>avalon-framework-impl</artifactId>
             <version>${avalon-version}</version>
         </dependency>
-        
+
         <!-- for testing -->
         <dependency>
             <groupId>org.apache.camel</groupId>
@@ -82,10 +82,21 @@
         <dependency>
             <groupId>org.apache.pdfbox</groupId>
             <artifactId>pdfbox</artifactId>
-            <version>${pdfbox-version}</version>
             <scope>test</scope>
         </dependency>
-        
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>${bouncycastle-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcmail-jdk15on</artifactId>
+            <version>${bouncycastle-version}</version>
+            <scope>test</scope>
+        </dependency>
+
         <!-- Xalan Serializer dependencies are not  -->
         <!-- correctly imported from batik for tests  -->
         <!-- and as such they will fail. Must add to  -->
@@ -96,7 +107,7 @@
             <version>${xalan-version}</version>
             <scope>test</scope>
         </dependency>
-           
+
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-api</artifactId>
diff --git a/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java b/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java
index 7111ac3..249e111 100644
--- a/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java
+++ b/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.fop;
 
+import java.io.File;
 import java.io.FileInputStream;
 
 import org.apache.camel.EndpointInject;
@@ -36,7 +37,7 @@ public class FopComponentTest extends CamelTestSupport {
 
     @Produce(uri = "direct:start")
     protected ProducerTemplate template;
-    
+
     @Override
     @Before
     public void setUp() throws Exception {
@@ -53,7 +54,7 @@ public class FopComponentTest extends CamelTestSupport {
         template.sendBody(inputStream);
         resultEndpoint.assertIsSatisfied();
 
-        PDDocument document = PDDocument.load("target/data/result.pdf");
+        PDDocument document = PDDocument.load(new File("target/data/result.pdf"));
         String pdfText = FopHelper.extractTextFrom(document);
         assertTrue(pdfText.contains("Project"));    //from xsl template
         assertTrue(pdfText.contains("John Doe"));   //from data xml
@@ -62,7 +63,7 @@ public class FopComponentTest extends CamelTestSupport {
         Exchange exchange = resultEndpoint.getReceivedExchanges().get(0);
         assertEquals("Header value is lost!", "bar", exchange.getIn().getHeader("foo"));
     }
-    
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java b/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java
index 884300b..9805fcc 100644
--- a/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java
+++ b/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java
@@ -80,12 +80,15 @@ public class FopEndpointTest extends CamelTestSupport {
         Endpoint endpoint = context().getEndpoint("fop:pdf");
         Producer producer = endpoint.createProducer();
         Exchange exchange = new DefaultExchange(context);
-        exchange.getIn().setHeader("CamelFop.Encrypt.userPassword", "secret");
+        final String password = "secret";
+        exchange.getIn().setHeader("CamelFop.Encrypt.userPassword", password);
         exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test Content"));
 
         producer.process(exchange);
-        PDDocument document = getDocumentFrom(exchange);
-        assertTrue(document.isEncrypted());
+        try (InputStream inputStream = exchange.getOut().getBody(InputStream.class)) {
+            PDDocument document = PDDocument.load(inputStream, password);
+            assertTrue(document.isEncrypted());
+        }
     }
 
     @Test
diff --git a/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java b/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java
index fee920c..b016ec1 100644
--- a/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java
+++ b/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java
@@ -21,29 +21,14 @@ import java.io.StringWriter;
 import java.io.Writer;
 
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.exceptions.CryptographyException;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDDocumentInformation;
-import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException;
-import org.apache.pdfbox.pdmodel.encryption.DecryptionMaterial;
-import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
-import org.apache.pdfbox.util.PDFTextStripper;
+import org.apache.pdfbox.text.PDFTextStripper;
 
 public final class FopHelper {
     private FopHelper() {
     }
 
-    //decryption requires additional libraries
-    public static void decryptPDFN(PDDocument document, String password) throws
-            IOException, CryptographyException, BadSecurityHandlerException {
-        if (document.isEncrypted()) {
-            DecryptionMaterial decryptionMaterial = new StandardDecryptionMaterial(password);
-            document.openProtection(decryptionMaterial);
-        } else {
-            throw new RuntimeException("Document not encrypted");
-        }
-    }
-
     public static String extractTextFrom(PDDocument document) throws IOException {
         Writer output = new StringWriter();
         PDFTextStripper stripper = new PDFTextStripper();
@@ -53,7 +38,7 @@ public final class FopHelper {
 
     public static String getDocumentMetadataValue(PDDocument document, COSName name) {
         PDDocumentInformation info = document.getDocumentInformation();
-        return info.getDictionary().getString(name);
+        return info.getCOSObject().getString(name);
     }
 
     public static String decorateTextWithXSLFO(String text) {
diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfConfiguration.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfConfiguration.java
index 066d801..a836540 100644
--- a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfConfiguration.java
+++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfConfiguration.java
@@ -45,14 +45,14 @@ public class PdfConfiguration {
     private static final Map<String, PDRectangle> PAGE_MAP = new HashMap<String, PDRectangle>();
 
     static {
-        PAGE_MAP.put(PAGE_SIZE_A0, PDPage.PAGE_SIZE_A0);
-        PAGE_MAP.put(PAGE_SIZE_A1, PDPage.PAGE_SIZE_A1);
-        PAGE_MAP.put(PAGE_SIZE_A2, PDPage.PAGE_SIZE_A2);
-        PAGE_MAP.put(PAGE_SIZE_A3, PDPage.PAGE_SIZE_A3);
-        PAGE_MAP.put(PAGE_SIZE_A4, PDPage.PAGE_SIZE_A4);
-        PAGE_MAP.put(PAGE_SIZE_A5, PDPage.PAGE_SIZE_A5);
-        PAGE_MAP.put(PAGE_SIZE_A6, PDPage.PAGE_SIZE_A6);
-        PAGE_MAP.put(PAGE_SIZE_LETTER, PDPage.PAGE_SIZE_LETTER);
+        PAGE_MAP.put(PAGE_SIZE_A0, PDRectangle.A0);
+        PAGE_MAP.put(PAGE_SIZE_A1, PDRectangle.A1);
+        PAGE_MAP.put(PAGE_SIZE_A2, PDRectangle.A2);
+        PAGE_MAP.put(PAGE_SIZE_A3, PDRectangle.A3);
+        PAGE_MAP.put(PAGE_SIZE_A4, PDRectangle.A4);
+        PAGE_MAP.put(PAGE_SIZE_A5, PDRectangle.A5);
+        PAGE_MAP.put(PAGE_SIZE_A6, PDRectangle.A6);
+        PAGE_MAP.put(PAGE_SIZE_LETTER, PDRectangle.LETTER);
     }
 
     @UriPath(description = "Operation type")
@@ -69,7 +69,7 @@ public class PdfConfiguration {
     @UriParam(defaultValue = "14")
     private float fontSize = 14;
     @UriParam(defaultValue = "PAGE_SIZE_A4", enums = "PAGE_SIZE_A0,PAGE_SIZE_A1,PAGE_SIZE_A2,PAGE_SIZE_A3,PAGE_SIZE_A4,PAGE_SIZE_A5,PAGE_SIZE_A6,PAGE_SIZE_LETTER")
-    private PDRectangle pageSize = PDPage.PAGE_SIZE_A4;
+    private PDRectangle pageSize = PDRectangle.A4;
     @UriParam(defaultValue = "Helvetica")
     private PDFont font = PDType1Font.HELVETICA;
     @UriParam(defaultValue = "lineTermination")
@@ -169,7 +169,7 @@ public class PdfConfiguration {
     }
 
     public void setFont(String font) {
-        setFont(PDType1Font.getStandardFont(font));
+        setFont(Standard14Fonts.getByName(font));
     }
 
     public TextProcessingFactory getTextProcessingFactory() {
diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java
index be60aff..11b7313 100644
--- a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java
+++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java
@@ -29,15 +29,11 @@ import org.apache.camel.component.pdf.text.SplitStrategy;
 import org.apache.camel.component.pdf.text.TextProcessingAbstractFactory;
 import org.apache.camel.component.pdf.text.WriteStrategy;
 import org.apache.camel.impl.DefaultProducer;
-import org.apache.pdfbox.exceptions.COSVisitorException;
-import org.apache.pdfbox.exceptions.CryptographyException;
-import org.apache.pdfbox.exceptions.InvalidPasswordException;
 import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException;
 import org.apache.pdfbox.pdmodel.encryption.DecryptionMaterial;
 import org.apache.pdfbox.pdmodel.encryption.ProtectionPolicy;
 import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
-import org.apache.pdfbox.util.PDFTextStripper;
+import org.apache.pdfbox.text.PDFTextStripper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,7 +79,7 @@ public class PdfProducer extends DefaultProducer {
         exchange.getOut().setBody(result);
     }
 
-    private Object doAppend(Exchange exchange) throws IOException, BadSecurityHandlerException, CryptographyException, InvalidPasswordException, COSVisitorException {
+    private Object doAppend(Exchange exchange) throws IOException {
         LOG.debug("Got {} operation, going to append text to provided pdf.", pdfConfiguration.getOperation());
         String body = exchange.getIn().getBody(String.class);
         PDDocument document = exchange.getIn().getHeader(PDF_DOCUMENT_HEADER_NAME, PDDocument.class);
@@ -93,16 +89,6 @@ public class PdfProducer extends DefaultProducer {
         }
 
         if (document.isEncrypted()) {
-            DecryptionMaterial decryptionMaterial = exchange.getIn().getHeader(DECRYPTION_MATERIAL_HEADER_NAME,
-                    DecryptionMaterial.class);
-            if (decryptionMaterial == null) {
-                throw new IllegalArgumentException(String.format("%s header is expected for %s operation "
-                                + "on encrypted document",
-                        DECRYPTION_MATERIAL_HEADER_NAME,
-                        pdfConfiguration.getOperation()));
-            }
-
-            document.openProtection(decryptionMaterial);
             document.setAllSecurityToBeRemoved(true);
         }
 
@@ -115,27 +101,16 @@ public class PdfProducer extends DefaultProducer {
         return byteArrayOutputStream;
     }
 
-    private String doExtractText(Exchange exchange) throws IOException, CryptographyException, InvalidPasswordException, BadSecurityHandlerException {
+    private String doExtractText(Exchange exchange) throws IOException {
         LOG.debug("Got {} operation, going to extract text from provided pdf.", pdfConfiguration.getOperation());
         PDDocument document = exchange.getIn().getBody(PDDocument.class);
 
-        if (document.isEncrypted()) {
-            DecryptionMaterial decryptionMaterial = exchange.getIn().getHeader(DECRYPTION_MATERIAL_HEADER_NAME,
-                    DecryptionMaterial.class);
-            if (decryptionMaterial == null) {
-                throw new IllegalArgumentException(String.format("%s header is expected for %s operation "
-                                + "on encrypted document",
-                        DECRYPTION_MATERIAL_HEADER_NAME,
-                        pdfConfiguration.getOperation()));
-            }
-            document.openProtection(decryptionMaterial);
-        }
 
         PDFTextStripper pdfTextStripper = new PDFTextStripper();
         return pdfTextStripper.getText(document);
     }
 
-    private OutputStream doCreate(Exchange exchange) throws IOException, BadSecurityHandlerException, COSVisitorException {
+    private OutputStream doCreate(Exchange exchange) throws IOException {
         LOG.debug("Got {} operation, going to create and write provided string to pdf document.",
                 pdfConfiguration.getOperation());
         String body = exchange.getIn().getBody(String.class);
@@ -148,7 +123,7 @@ public class PdfProducer extends DefaultProducer {
         return byteArrayOutputStream;
     }
 
-    private void appendToPdfDocument(String text, PDDocument document, ProtectionPolicy protectionPolicy) throws IOException, BadSecurityHandlerException {
+    private void appendToPdfDocument(String text, PDDocument document, ProtectionPolicy protectionPolicy) throws IOException {
         Collection<String> words = splitStrategy.split(text);
         Collection<String> lines = lineBuilderStrategy.buildLines(words);
         writeStrategy.write(lines, document);
diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/Standard14Fonts.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/Standard14Fonts.java
new file mode 100644
index 0000000..06c2f37
--- /dev/null
+++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/Standard14Fonts.java
@@ -0,0 +1,59 @@
+/**
+ * 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.camel.component.pdf;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.pdfbox.pdmodel.font.PDType1Font;
+
+/**
+ * The 14 standard fonts by name. Created here because there is no way to get a standard font by name in {@code pdfbox} 2.0
+ *
+ * @author <a href="https://github.com/ppalaga">Peter Palaga</a>
+ */
+public class Standard14Fonts {
+    private static final Map<String, PDType1Font> FONTS_BY_NAME = new HashMap<>();
+    static
+    {
+        FONTS_BY_NAME.put(PDType1Font.TIMES_ROMAN.getBaseFont(), PDType1Font.TIMES_ROMAN);
+        FONTS_BY_NAME.put(PDType1Font.TIMES_BOLD.getBaseFont(), PDType1Font.TIMES_BOLD);
+        FONTS_BY_NAME.put(PDType1Font.TIMES_ITALIC.getBaseFont(), PDType1Font.TIMES_ITALIC);
+        FONTS_BY_NAME.put(PDType1Font.TIMES_BOLD_ITALIC.getBaseFont(), PDType1Font.TIMES_BOLD_ITALIC);
+        FONTS_BY_NAME.put(PDType1Font.HELVETICA.getBaseFont(), PDType1Font.HELVETICA);
+        FONTS_BY_NAME.put(PDType1Font.HELVETICA_BOLD.getBaseFont(), PDType1Font.HELVETICA_BOLD);
+        FONTS_BY_NAME.put(PDType1Font.HELVETICA_OBLIQUE.getBaseFont(), PDType1Font.HELVETICA_OBLIQUE);
+        FONTS_BY_NAME.put(PDType1Font.HELVETICA_BOLD_OBLIQUE.getBaseFont(), PDType1Font.HELVETICA_BOLD_OBLIQUE);
+        FONTS_BY_NAME.put(PDType1Font.COURIER.getBaseFont(), PDType1Font.COURIER);
+        FONTS_BY_NAME.put(PDType1Font.COURIER_BOLD.getBaseFont(), PDType1Font.COURIER_BOLD);
+        FONTS_BY_NAME.put(PDType1Font.COURIER_OBLIQUE.getBaseFont(), PDType1Font.COURIER_OBLIQUE);
+        FONTS_BY_NAME.put(PDType1Font.COURIER_BOLD_OBLIQUE.getBaseFont(), PDType1Font.COURIER_BOLD_OBLIQUE);
+        FONTS_BY_NAME.put(PDType1Font.SYMBOL.getBaseFont(), PDType1Font.SYMBOL);
+        FONTS_BY_NAME.put(PDType1Font.ZAPF_DINGBATS.getBaseFont(), PDType1Font.ZAPF_DINGBATS);
+    }
+
+    /**
+     * Get one of the 14 standard fonts by base font name.
+     *
+     * @param fontName the base font name, such as {@code "Helvetica"} or {@code "Helvetica-Bold"}
+     * @return the {@link PDType1Font} or null, of the {@code fontName} is not mapped to any font
+     */
+    public static PDType1Font getByName(String fontName) {
+        return FONTS_BY_NAME.get(fontName);
+    }
+
+}
diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultWriteStrategy.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultWriteStrategy.java
index 188d846..e5f3f7b 100644
--- a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultWriteStrategy.java
+++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/DefaultWriteStrategy.java
@@ -22,7 +22,7 @@ import java.util.Collection;
 import org.apache.camel.component.pdf.PdfConfiguration;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
 
 /**
  * Writes given lines to PDF document. If document already contains some text then new text will be appended
diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/PdfUtils.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/PdfUtils.java
index cc910f4..2574f5d 100644
--- a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/PdfUtils.java
+++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/text/PdfUtils.java
@@ -26,11 +26,11 @@ public final class PdfUtils {
     private PdfUtils() { }
 
     public static float getAverageFontHeight(PDFont font, float fontSize) throws IOException {
-        return font.getFontHeight("A".getBytes(), 0, 1) / PDF_PIXEL_SIZE * fontSize;
+        return font.getBoundingBox().getHeight() / PDF_PIXEL_SIZE * fontSize;
     }
 
     public static float getFontHeightForString(String str, PDFont font, float fontSize) throws IOException {
-        return font.getFontHeight(str.getBytes(), 0, 1) / PDF_PIXEL_SIZE * fontSize;
+        return font.getBoundingBox().getHeight() / PDF_PIXEL_SIZE * fontSize;
     }
 
     public static float getFontWidth(String str, PDFont font, float fontSize) throws IOException {
diff --git a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfAppendTest.java b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfAppendTest.java
index 8269f96..4ca5c0c 100644
--- a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfAppendTest.java
+++ b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfAppendTest.java
@@ -30,12 +30,13 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
 import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
 import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
 import org.apache.pdfbox.pdmodel.font.PDType1Font;
-import org.apache.pdfbox.util.PDFTextStripper;
+import org.apache.pdfbox.text.PDFTextStripper;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -58,7 +59,7 @@ public class PdfAppendTest extends CamelTestSupport {
         final String originalText = "Test";
         final String textToAppend = "Append";
         PDDocument document = new PDDocument();
-        PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
+        PDPage page = new PDPage(PDRectangle.A4);
         document.addPage(page);
         PDPageContentStream contentStream = new PDPageContentStream(document, page);
         contentStream.setFont(PDType1Font.HELVETICA, 12);
@@ -98,7 +99,7 @@ public class PdfAppendTest extends CamelTestSupport {
         final String originalText = "Test";
         final String textToAppend = "Append";
         PDDocument document = new PDDocument();
-        PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
+        PDPage page = new PDPage(PDRectangle.A4);
         document.addPage(page);
         PDPageContentStream contentStream = new PDPageContentStream(document, page);
         contentStream.setFont(PDType1Font.HELVETICA, 12);
@@ -121,7 +122,7 @@ public class PdfAppendTest extends CamelTestSupport {
         document.save(output);
 
         // Encryption happens after saving.
-        PDDocument encryptedDocument = PDDocument.load(new ByteArrayInputStream(output.toByteArray()));
+        PDDocument encryptedDocument = PDDocument.load(new ByteArrayInputStream(output.toByteArray()), userPass);
 
         Map<String, Object> headers = new HashMap<String, Object>();
         headers.put(PdfHeaderConstants.PDF_DOCUMENT_HEADER_NAME, encryptedDocument);
@@ -136,7 +137,7 @@ public class PdfAppendTest extends CamelTestSupport {
                 Object body = exchange.getIn().getBody();
                 assertThat(body, instanceOf(ByteArrayOutputStream.class));
                 try {
-                    PDDocument doc = PDDocument.load(new ByteArrayInputStream(((ByteArrayOutputStream) body).toByteArray()));
+                    PDDocument doc = PDDocument.load(new ByteArrayInputStream(((ByteArrayOutputStream) body).toByteArray()), userPass);
                     PDFTextStripper pdfTextStripper = new PDFTextStripper();
                     String text = pdfTextStripper.getText(doc);
                     assertEquals(2, doc.getNumberOfPages());
diff --git a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java
index c74e1fb..07093f5 100644
--- a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java
+++ b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java
@@ -29,7 +29,7 @@ import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
 import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
-import org.apache.pdfbox.util.PDFTextStripper;
+import org.apache.pdfbox.text.PDFTextStripper;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -93,9 +93,8 @@ public class PdfCreationTest extends CamelTestSupport {
                 Object body = exchange.getIn().getBody();
                 assertThat(body, instanceOf(ByteArrayOutputStream.class));
                 try {
-                    PDDocument doc = PDDocument.load(new ByteArrayInputStream(((ByteArrayOutputStream) body).toByteArray()));
+                    PDDocument doc = PDDocument.load(new ByteArrayInputStream(((ByteArrayOutputStream) body).toByteArray()), userPass);
                     assertTrue("Expected encrypted document", doc.isEncrypted());
-                    doc.decrypt(userPass);
                     assertFalse("Printing should not be permitted", doc.getCurrentAccessPermission().canPrint());
                     PDFTextStripper pdfTextStripper = new PDFTextStripper();
                     String text = pdfTextStripper.getText(doc);
diff --git a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfTextExtractionTest.java b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfTextExtractionTest.java
index 6d93d8a..9cc7019 100644
--- a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfTextExtractionTest.java
+++ b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfTextExtractionTest.java
@@ -27,7 +27,8 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
 import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
 import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
@@ -46,7 +47,7 @@ public class PdfTextExtractionTest extends CamelTestSupport {
     public void testExtractText() throws Exception {
         final String expectedText = "Test string";
         PDDocument document = new PDDocument();
-        PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
+        PDPage page = new PDPage(PDRectangle.A4);
         document.addPage(page);
         PDPageContentStream contentStream = new PDPageContentStream(document, page);
         contentStream.setFont(PDType1Font.HELVETICA, 12);
@@ -82,7 +83,7 @@ public class PdfTextExtractionTest extends CamelTestSupport {
         PDDocument document = new PDDocument();
 
         final String expectedText = "Test string";
-        PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
+        PDPage page = new PDPage(PDRectangle.A4);
         document.addPage(page);
         PDPageContentStream contentStream = new PDPageContentStream(document, page);
         contentStream.setFont(PDType1Font.HELVETICA, 12);
@@ -98,7 +99,7 @@ public class PdfTextExtractionTest extends CamelTestSupport {
         document.save(output);
 
         // Encryption happens after saving.
-        PDDocument encryptedDocument = PDDocument.load(new ByteArrayInputStream(output.toByteArray()));
+        PDDocument encryptedDocument = PDDocument.load(new ByteArrayInputStream(output.toByteArray()), userPass);
 
         template.sendBodyAndHeader("direct:start",
                 encryptedDocument,
diff --git a/parent/pom.xml b/parent/pom.xml
index 7c5878b..61b5de8 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -558,7 +558,8 @@
     <pax-exam-version>4.9.2</pax-exam-version>
     <pax-tiny-bundle-version>1.3.2</pax-tiny-bundle-version>
     <pax-logging-version>1.8.6</pax-logging-version>
-    <pdfbox-version>1.8.13</pdfbox-version>
+    <pdfbox18-version>1.8.13</pdfbox18-version>
+    <pdfbox-version>2.0.6</pdfbox-version>
     <pgjdbc-ng-driver-version>0.7.1</pgjdbc-ng-driver-version>
     <protobuf-version>3.3.0</protobuf-version>
     <protobuf-guava-version>20.0</protobuf-guava-version>
@@ -4717,6 +4718,34 @@
         <version>${maven-archetype-packaging-version}</version>
       </dependency>
 
+
+      <!-- pdfbox -->
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>jempbox</artifactId>
+        <version>${pdfbox18-version}</version><!-- because of Tika -->
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>fontbox</artifactId>
+        <version>${pdfbox-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>pdfbox</artifactId>
+        <version>${pdfbox-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>pdfbox-tools</artifactId>
+        <version>${pdfbox-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>pdfbox-debugger</artifactId>
+        <version>${pdfbox-version}</version>
+      </dependency>
+
     </dependencies>
   </dependencyManagement>
 
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 6cbdbba6..b14d60e 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -351,7 +351,7 @@
     <bundle dependency='true'>mvn:net.openhft/chronicle-map/${chronicle-map-version}</bundle>
     <bundle dependency='true'>mvn:net.openhft/chronicle-queue/${chronicle-queue-version}</bundle>
     <bundle dependency='true'>mvn:net.openhft/chronicle-engine/${chronicle-engine-version}</bundle>
-    <bundle dependency='true'>mvn:net.openhft/compiler/${openhft-compiler-version}</bundle>    
+    <bundle dependency='true'>mvn:net.openhft/compiler/${openhft-compiler-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-chronicle/${project.version}</bundle>
   </feature>
   <feature name='camel-chunk' version='${project.version}' resolver='(obr)' start-level='50'>
@@ -837,7 +837,7 @@
     <bundle dependency='true'>wrap:mvn:com.auth0/java-jwt/${grpc-java-jwt-version}</bundle>
     <bundle dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${grpc-google-auth-library-version}</bundle>
     <bundle dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${grpc-google-auth-library-version}</bundle>
-    <bundle>mvn:org.apache.camel/camel-grpc/${project.version}</bundle>    
+    <bundle>mvn:org.apache.camel/camel-grpc/${project.version}</bundle>
   </feature>
   <feature name='camel-gson' version='${project.version}' resolver='(obr)' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
@@ -1707,7 +1707,6 @@
     <bundle dependency='true'>mvn:org.bouncycastle/bcpkix-jdk15on/${bouncycastle-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.pdfbox/pdfbox/${pdfbox-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.pdfbox/fontbox/${pdfbox-version}</bundle>
-    <bundle dependency='true'>mvn:org.apache.pdfbox/jempbox/${pdfbox-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-pdf/${project.version}</bundle>
   </feature>
   <feature name='camel-pgevent' version='${project.version}' resolver='(obr)' start-level='50'>
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index dca4625..8cac9af 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -3180,6 +3180,31 @@
         <version>2.4.2</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>fontbox</artifactId>
+        <version>2.0.6</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>jempbox</artifactId>
+        <version>1.8.13</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>pdfbox</artifactId>
+        <version>2.0.6</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>pdfbox-debugger</artifactId>
+        <version>2.0.6</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.pdfbox</groupId>
+        <artifactId>pdfbox-tools</artifactId>
+        <version>2.0.6</version>
+      </dependency>
+      <dependency>
         <groupId>org.apache.ws.commons.axiom</groupId>
         <artifactId>axiom-api</artifactId>
         <version>1.2.14</version>

-- 
To stop receiving notification emails like this one, please contact
['"commits@camel.apache.org" <co...@camel.apache.org>'].