diff --git a/pdf-2/pom.xml b/pdf-2/pom.xml
index 6a15dc7f29..1c752a9e9c 100644
--- a/pdf-2/pom.xml
+++ b/pdf-2/pom.xml
@@ -25,6 +25,16 @@
cleanup
${itextpdf.cleanup.version}
+
+ com.itextpdf
+ itextpdf
+ 5.5.13.3
+
+
+ org.apache.pdfbox
+ pdfbox
+ 3.0.0-RC1
+
diff --git a/pdf-2/src/main/java/com/baeldung/pdfinfo/PdfInfoIText.java b/pdf-2/src/main/java/com/baeldung/pdfinfo/PdfInfoIText.java
new file mode 100644
index 0000000000..30a7c76086
--- /dev/null
+++ b/pdf-2/src/main/java/com/baeldung/pdfinfo/PdfInfoIText.java
@@ -0,0 +1,31 @@
+package com.baeldung.pdfinfo;
+
+
+import com.itextpdf.text.pdf.PdfReader;
+
+import java.io.IOException;
+import java.util.Map;
+
+public class PdfInfoIText {
+
+ public static int getNumberOfPages(final String pdfFile) throws IOException {
+ PdfReader reader = new PdfReader(pdfFile);
+ int pages = reader.getNumberOfPages();
+ reader.close();
+ return pages;
+ }
+
+ public static boolean isPasswordRequired(final String pdfFile) throws IOException {
+ PdfReader reader = new PdfReader(pdfFile);
+ boolean isEncrypted = reader.isEncrypted();
+ reader.close();
+ return isEncrypted;
+ }
+
+ public static Map getInfo(final String pdfFile) throws IOException {
+ PdfReader reader = new PdfReader(pdfFile);
+ Map info = reader.getInfo();
+ reader.close();
+ return info;
+ }
+}
diff --git a/pdf-2/src/main/java/com/baeldung/pdfinfo/PdfInfoPdfBox.java b/pdf-2/src/main/java/com/baeldung/pdfinfo/PdfInfoPdfBox.java
new file mode 100644
index 0000000000..61d03bab6d
--- /dev/null
+++ b/pdf-2/src/main/java/com/baeldung/pdfinfo/PdfInfoPdfBox.java
@@ -0,0 +1,36 @@
+package com.baeldung.pdfinfo;
+
+
+import org.apache.pdfbox.Loader;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentInformation;
+
+import java.io.File;
+import java.io.IOException;
+
+public class PdfInfoPdfBox {
+
+ public static int getNumberOfPages(final String pdfFile) throws IOException {
+ File file = new File(pdfFile);
+ PDDocument document = Loader.loadPDF(file);
+ int pages = document.getNumberOfPages();
+ document.close();
+ return pages;
+ }
+
+ public static boolean isPasswordRequired(final String pdfFile) throws IOException {
+ File file = new File(pdfFile);
+ PDDocument document = Loader.loadPDF(file);
+ boolean isEncrypted = document.isEncrypted();
+ document.close();
+ return isEncrypted;
+ }
+
+ public static PDDocumentInformation getInfo(final String pdfFile) throws IOException {
+ File file = new File(pdfFile);
+ PDDocument document = Loader.loadPDF(file);
+ PDDocumentInformation info = document.getDocumentInformation();
+ document.close();
+ return info;
+ }
+}
diff --git a/pdf-2/src/test/java/com/baeldung/pdfinfo/PdfInfoITextUnitTest.java b/pdf-2/src/test/java/com/baeldung/pdfinfo/PdfInfoITextUnitTest.java
new file mode 100644
index 0000000000..422858d659
--- /dev/null
+++ b/pdf-2/src/test/java/com/baeldung/pdfinfo/PdfInfoITextUnitTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.pdfinfo;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Map;
+
+public class PdfInfoITextUnitTest {
+
+ private static final String PDF_FILE = "src/test/resources/input.pdf";
+
+ @Test
+ public void givenPdf_whenGetNumberOfPages_thenOK() throws IOException {
+ Assert.assertEquals(4, PdfInfoIText.getNumberOfPages(PDF_FILE));
+ }
+
+ @Test
+ public void givenPdf_whenIsPasswordRequired_thenOK() throws IOException {
+ Assert.assertFalse(PdfInfoIText.isPasswordRequired(PDF_FILE));
+ }
+
+ @Test
+ public void givenPdf_whenGetInfo_thenOK() throws IOException {
+ Map info = PdfInfoIText.getInfo(PDF_FILE);
+ Assert.assertEquals("LibreOffice 4.2", info.get("Producer"));
+ Assert.assertEquals("Writer", info.get("Creator"));
+ }
+}
diff --git a/pdf-2/src/test/java/com/baeldung/pdfinfo/PdfInfoPdfBoxUnitTest.java b/pdf-2/src/test/java/com/baeldung/pdfinfo/PdfInfoPdfBoxUnitTest.java
new file mode 100644
index 0000000000..0fcbc7ee3c
--- /dev/null
+++ b/pdf-2/src/test/java/com/baeldung/pdfinfo/PdfInfoPdfBoxUnitTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.pdfinfo;
+
+import org.apache.pdfbox.pdmodel.PDDocumentInformation;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+
+public class PdfInfoPdfBoxUnitTest {
+
+ private static final String PDF_FILE = "src/test/resources/input.pdf";
+
+ @Test
+ public void givenPdf_whenGetNumberOfPages_thenOK() throws IOException {
+ Assert.assertEquals(4, PdfInfoPdfBox.getNumberOfPages(PDF_FILE));
+ }
+
+ @Test
+ public void givenPdf_whenIsPasswordRequired_thenOK() throws IOException {
+ Assert.assertFalse(PdfInfoPdfBox.isPasswordRequired(PDF_FILE));
+ }
+
+ @Test
+ public void givenPdf_whenGetInfo_thenOK() throws IOException {
+ PDDocumentInformation info = PdfInfoPdfBox.getInfo(PDF_FILE);
+ Assert.assertEquals("LibreOffice 4.2", info.getProducer());
+ Assert.assertEquals("Writer", info.getCreator());
+ }
+}
diff --git a/pdf-2/src/test/resources/input.pdf b/pdf-2/src/test/resources/input.pdf
new file mode 100644
index 0000000000..94d9477974
Binary files /dev/null and b/pdf-2/src/test/resources/input.pdf differ