From 68948a38b29a13412cbcd938e8470d014fd6a6d0 Mon Sep 17 00:00:00 2001 From: ialexjx Date: Wed, 26 Jun 2024 13:56:43 +0530 Subject: [PATCH 1/6] Generating a pdf file with text --- pom.xml | 9 ++++ .../service/AddingTextToPdfService.java | 45 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/main/java/org/example/service/AddingTextToPdfService.java diff --git a/pom.xml b/pom.xml index 669fc35..a1eaa01 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,15 @@ pdfa 7.2.2 + + + ch.qos.logback + logback-classic + 1.2.3 + + + + \ No newline at end of file diff --git a/src/main/java/org/example/service/AddingTextToPdfService.java b/src/main/java/org/example/service/AddingTextToPdfService.java new file mode 100644 index 0000000..8e64535 --- /dev/null +++ b/src/main/java/org/example/service/AddingTextToPdfService.java @@ -0,0 +1,45 @@ +package org.example.service; + +import com.itextpdf.io.font.constants.StandardFonts; +import com.itextpdf.kernel.colors.Color; +import com.itextpdf.kernel.colors.DeviceRgb; +import com.itextpdf.kernel.font.PdfFont; +import com.itextpdf.kernel.font.PdfFontFactory; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Paragraph; + +import java.io.FileOutputStream; +import java.io.IOException; + + +public class AddingTextToPdfService { + public static void main(String[] args) throws IOException { + System.out.println("Starting the pdf generation process"); + String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/PdfFileWithText.pdf"; + String paragraphText = "Go is a procedural programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language. Programs are assembled by using packages, for efficient management of dependencies. This language also supports environment adopting patterns alike to dynamic languages. For eg., type inference (y := 0 is a valid declaration of a variable y of type float).\n" + + "\n" + + "Go is a statically typed, concurrent, and garbage-collected programming language created at Google in 2009. It is designed to be simple, efficient, and easy to learn, making it a popular choice for building scalable network services, web applications, and command-line tools.\n" + + "\n" + + "Go is known for its support for concurrency, which is the ability to run multiple tasks simultaneously. Concurrency is achieved in Go through the use of Goroutines and Channels, which allow you to write code that can run multiple operations at the same time. This makes Go an ideal choice for building high-performance and scalable network services, as well as for solving complex computational problems."; + + //Initialize PdfWriter, PdfDocument, Document + PdfWriter pdfWriter = new PdfWriter(new FileOutputStream(destinationFilePath)); + PdfDocument pdfDocument = new PdfDocument(pdfWriter); + Document document = new Document(pdfDocument); + + //Set the document properties + PdfFont pdfFont = PdfFontFactory.createFont(StandardFonts.TIMES_BOLD); //Setting the font + Color backgroundColour = new DeviceRgb(204, 255, 247); //Setting the Color + Paragraph paragraph1 = new Paragraph(paragraphText); // Populate the paragraph + paragraph1.setFont(pdfFont); + paragraph1.setFontSize(12f); + paragraph1.setBackgroundColor(backgroundColour); + + document.add(paragraph1); + document.close(); + + System.out.println("PDF Generation successful"); + } +} From e01eab3c1667fd583dbc02b950be2ce439be11b7 Mon Sep 17 00:00:00 2001 From: ialexjx Date: Tue, 16 Jul 2024 20:11:18 +0530 Subject: [PATCH 2/6] Adding a common utility service class and Handling list in the PDF --- .../example/service/CommonUtilityService.java | 26 ++++++++++ .../example/service/HandlingListInPdf.java | 48 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/main/java/org/example/service/CommonUtilityService.java create mode 100644 src/main/java/org/example/service/HandlingListInPdf.java diff --git a/src/main/java/org/example/service/CommonUtilityService.java b/src/main/java/org/example/service/CommonUtilityService.java new file mode 100644 index 0000000..85c6b50 --- /dev/null +++ b/src/main/java/org/example/service/CommonUtilityService.java @@ -0,0 +1,26 @@ +package org.example.service; + +import com.itextpdf.kernel.colors.DeviceRgb; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Cell; +import com.itextpdf.layout.element.Table; +import com.itextpdf.layout.properties.UnitValue; + + +public class CommonUtilityService { + + private static CommonUtilityService INSTANCE; + + public static CommonUtilityService getInstance() { + if (INSTANCE == null){ + INSTANCE = new CommonUtilityService(); + } + return INSTANCE; + } + public void addSpacer(Document document, float height) { + Table spacerTable = new Table(UnitValue.createPercentArray(1)).useAllAvailableWidth(); + Cell spacerCell = new Cell().setHeight(height).setBackgroundColor(new DeviceRgb(204, 255, 247)); + spacerTable.addCell(spacerCell); + document.add(spacerTable); + } +} diff --git a/src/main/java/org/example/service/HandlingListInPdf.java b/src/main/java/org/example/service/HandlingListInPdf.java new file mode 100644 index 0000000..2b70a6a --- /dev/null +++ b/src/main/java/org/example/service/HandlingListInPdf.java @@ -0,0 +1,48 @@ +package org.example.service; + +import com.itextpdf.io.font.constants.StandardFonts; +import com.itextpdf.kernel.font.PdfFont; +import com.itextpdf.kernel.font.PdfFontFactory; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.List; +import com.itextpdf.layout.element.Paragraph; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +public class HandlingListInPdf { + public static void main(String[] args) throws IOException { + System.out.println("Pdf Generation Started"); + String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/HandlingListInPdf.pdf"; + + Document document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(destinationFilePath)))); + PdfFont pdfFont = PdfFontFactory.createFont(StandardFonts.TIMES_BOLD); + + List stringList = new List(); + stringList.add("Name : Akshat Jaiswal"); + stringList.add("Age : 24"); + stringList.add("Add : Rampur Karkhana, Deoria"); + stringList.add("Company : Digitap.AI"); + stringList.add("Designation : Software Engineer"); + stringList.setFont(pdfFont); + + document.add(stringList); + + //Add spacing to the pdf + CommonUtilityService.getInstance().addSpacer(document, 20f); + + String paragraph = " I'm a Software Engineer passionate about building scalable and reliable software solutions. Proven expertise in Java, Spring Boot, Spring Data JPA, Spring JDBC, RESTful Web Services, REST APIs, JUnit, Mockito, Microservices, Speedment, and AWS. Currently working at a fintech company as a software engineer, developing and maintaining innovative and cutting-edge solutions for E-Nach, Video-PD, KYC/OKYC, VKYC projects"; + + Paragraph para = new Paragraph(paragraph); + para.setFont(pdfFont).setFontSize(10); + + document.add(para); + + document.close(); + + System.out.println("Pdf generation successful"); + } +} From b03032541c19de95963c33c840b9981c3faa850c Mon Sep 17 00:00:00 2001 From: ialexjx Date: Tue, 16 Jul 2024 20:11:43 +0530 Subject: [PATCH 3/6] FIxes --- src/main/java/org/example/service/HandlingListInPdf.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/example/service/HandlingListInPdf.java b/src/main/java/org/example/service/HandlingListInPdf.java index 2b70a6a..25402e7 100644 --- a/src/main/java/org/example/service/HandlingListInPdf.java +++ b/src/main/java/org/example/service/HandlingListInPdf.java @@ -9,7 +9,6 @@ import com.itextpdf.layout.element.List; import com.itextpdf.layout.element.Paragraph; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; From 7158c4eff21816c59d7beabd82ad3f418f0b1fda Mon Sep 17 00:00:00 2001 From: ialexjx Date: Tue, 16 Jul 2024 22:31:02 +0530 Subject: [PATCH 4/6] Pushing the pdf generation changes --- .../service/AddingTextToPdfService.java | 2 +- .../example/service/PDFGenerationService.java | 71 +++++++++++++++++++ .../example/service/TestPdfGeneration.java | 21 ++++++ 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/example/service/PDFGenerationService.java create mode 100644 src/main/java/org/example/service/TestPdfGeneration.java diff --git a/src/main/java/org/example/service/AddingTextToPdfService.java b/src/main/java/org/example/service/AddingTextToPdfService.java index 8e64535..8b4084b 100644 --- a/src/main/java/org/example/service/AddingTextToPdfService.java +++ b/src/main/java/org/example/service/AddingTextToPdfService.java @@ -18,7 +18,7 @@ public class AddingTextToPdfService { public static void main(String[] args) throws IOException { System.out.println("Starting the pdf generation process"); String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/PdfFileWithText.pdf"; - String paragraphText = "Go is a procedural programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language. Programs are assembled by using packages, for efficient management of dependencies. This language also supports environment adopting patterns alike to dynamic languages. For eg., type inference (y := 0 is a valid declaration of a variable y of type float).\n" + + String paragraphText = "Hello there !!!!!!! Go is a procedural programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language. Programs are assembled by using packages, for efficient management of dependencies. This language also supports environment adopting patterns alike to dynamic languages. For eg., type inference (y := 0 is a valid declaration of a variable y of type float).\n" + "\n" + "Go is a statically typed, concurrent, and garbage-collected programming language created at Google in 2009. It is designed to be simple, efficient, and easy to learn, making it a popular choice for building scalable network services, web applications, and command-line tools.\n" + "\n" + diff --git a/src/main/java/org/example/service/PDFGenerationService.java b/src/main/java/org/example/service/PDFGenerationService.java new file mode 100644 index 0000000..6525819 --- /dev/null +++ b/src/main/java/org/example/service/PDFGenerationService.java @@ -0,0 +1,71 @@ +package org.example.service; + +import com.itextpdf.io.font.constants.StandardFonts; +import com.itextpdf.kernel.font.PdfFont; +import com.itextpdf.kernel.font.PdfFontFactory; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Image; +import com.itextpdf.layout.element.Paragraph; +import com.itextpdf.layout.element.Table; +import com.itextpdf.layout.properties.TextAlignment; + +import java.io.FileOutputStream; +import java.io.IOException; + +public class PDFGenerationService { + public static void main(String[] args) throws IOException { + String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/Test.pdf"; + + Document document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(destinationFilePath)))); + + PdfFont pdfFont = PdfFontFactory.createFont(StandardFonts.TIMES_BOLD); + Paragraph pdfHeading = new Paragraph("Personal Details"); + pdfHeading.setFontSize(16f) + .setFont(pdfFont) + .setTextAlignment(TextAlignment.CENTER) + .setBold() + .setPadding(5) + .setMarginTop(15f) + .setMarginBottom(20f); + document.add(pdfHeading); + + Table personalDetailsTable = createPersonalDetailsTable(); + personalDetailsTable.setFontSize(12f) + .setFont(pdfFont); + + document.add(personalDetailsTable); + + System.out.println("Process Ended"); + document.close(); + } + + public static Table createPersonalDetailsTable(){ + System.out.println("inside createPersonalDetailsTable"); + float columnWidth[] = {150f, 350f}; + Table personalDetailsTable = new Table(columnWidth); + personalDetailsTable.setWidth(500f); + personalDetailsTable.setAutoLayout(); + + try{ + personalDetailsTable.addCell("Name"); + personalDetailsTable.addCell("Akshat Jaiswal"); + personalDetailsTable.addCell("UserId"); + personalDetailsTable.addCell("01"); + personalDetailsTable.addCell("Mobile"); + personalDetailsTable.addCell("+91 9839783219"); + personalDetailsTable.addCell("Email"); + personalDetailsTable.addCell("akshathrx6393@gmail.com"); + personalDetailsTable.addCell("Address"); + personalDetailsTable.addCell("Main Road Rampur Karkhana, Deoria 274405"); + + } catch (Exception e){ + System.out.println("Error while creating personal details table with exception " + e); + } + System.out.println("returning from createPersonalDetailsTable"); + return personalDetailsTable; + } + + +} diff --git a/src/main/java/org/example/service/TestPdfGeneration.java b/src/main/java/org/example/service/TestPdfGeneration.java new file mode 100644 index 0000000..b79a16f --- /dev/null +++ b/src/main/java/org/example/service/TestPdfGeneration.java @@ -0,0 +1,21 @@ +package org.example.service; + +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Paragraph; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; + +public class TestPdfGeneration { + public static void main(String[] args) throws FileNotFoundException { + String pdfDestination = "/Users/alex/Workspace/CodeGeneratedFiles/TestPdfGeneration.pdf"; + Document document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(pdfDestination)))); + + Paragraph paragraph = new Paragraph("Helllo World"); + + document.add(paragraph); + document.close(); // Always close the document after the completion of the generation process otherwise it will give errors + } +} From 67ebfc6763a7f12cb5a9ccde90dd6404fd4f7c6a Mon Sep 17 00:00:00 2001 From: ialexjx Date: Thu, 18 Jul 2024 21:47:43 +0530 Subject: [PATCH 5/6] Pdf generation changes --- .../example/service/PDFGenerationService.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/example/service/PDFGenerationService.java b/src/main/java/org/example/service/PDFGenerationService.java index 6525819..ab02b93 100644 --- a/src/main/java/org/example/service/PDFGenerationService.java +++ b/src/main/java/org/example/service/PDFGenerationService.java @@ -1,6 +1,8 @@ package org.example.service; import com.itextpdf.io.font.constants.StandardFonts; +import com.itextpdf.io.image.ImageData; +import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.kernel.pdf.PdfDocument; @@ -13,10 +15,13 @@ import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; public class PDFGenerationService { public static void main(String[] args) throws IOException { - String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/Test.pdf"; + String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/PersonalDetails.pdf"; Document document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(destinationFilePath)))); @@ -37,6 +42,9 @@ public static void main(String[] args) throws IOException { document.add(personalDetailsTable); + Image image = addImage(); + document.add(image); + System.out.println("Process Ended"); document.close(); } @@ -67,5 +75,14 @@ public static Table createPersonalDetailsTable(){ return personalDetailsTable; } + public static Image addImage() throws IOException { + URL url = new URL("https://media.licdn.com/dms/image/D5603AQEQLX3LNYagEg/profile-displayphoto-shrink_800_800/0/1714743298405?e=1726704000&v=beta&t=Qp2nST99M0eOXOSqZVwIaaF9rY8KIWqV7q8klwxmluU"); + Image image = new Image(ImageDataFactory.create(url)); + image.setFixedPosition(200f, 50f) + .setHeight(300) + .setWidth(250); + return image; + } + } From 143d909595ae8045a47ec9b2b0d02909d0cca917 Mon Sep 17 00:00:00 2001 From: ialexjx Date: Sun, 21 Jul 2024 18:10:15 +0530 Subject: [PATCH 6/6] FOrmatting the code --- .../org/example/service/AddingTextToPdfService.java | 2 +- .../org/example/service/PDFGenerationService.java | 11 ++++------- .../java/org/example/service/TestPdfGeneration.java | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/example/service/AddingTextToPdfService.java b/src/main/java/org/example/service/AddingTextToPdfService.java index 8b4084b..c8ff49f 100644 --- a/src/main/java/org/example/service/AddingTextToPdfService.java +++ b/src/main/java/org/example/service/AddingTextToPdfService.java @@ -18,7 +18,7 @@ public class AddingTextToPdfService { public static void main(String[] args) throws IOException { System.out.println("Starting the pdf generation process"); String destinationFilePath = "/Users/alex/Workspace/CodeGeneratedFiles/PdfFileWithText.pdf"; - String paragraphText = "Hello there !!!!!!! Go is a procedural programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language. Programs are assembled by using packages, for efficient management of dependencies. This language also supports environment adopting patterns alike to dynamic languages. For eg., type inference (y := 0 is a valid declaration of a variable y of type float).\n" + + String paragraphText = "Hello there !!!!!!! -Go is a procedural programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language. Programs are assembled by using packages, for efficient management of dependencies. This language also supports environment adopting patterns alike to dynamic languages. For eg., type inference (y := 0 is a valid declaration of a variable y of type float).\n" + "\n" + "Go is a statically typed, concurrent, and garbage-collected programming language created at Google in 2009. It is designed to be simple, efficient, and easy to learn, making it a popular choice for building scalable network services, web applications, and command-line tools.\n" + "\n" + diff --git a/src/main/java/org/example/service/PDFGenerationService.java b/src/main/java/org/example/service/PDFGenerationService.java index ab02b93..439264b 100644 --- a/src/main/java/org/example/service/PDFGenerationService.java +++ b/src/main/java/org/example/service/PDFGenerationService.java @@ -1,7 +1,6 @@ package org.example.service; import com.itextpdf.io.font.constants.StandardFonts; -import com.itextpdf.io.image.ImageData; import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; @@ -15,8 +14,6 @@ import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; import java.net.URL; public class PDFGenerationService { @@ -26,7 +23,7 @@ public static void main(String[] args) throws IOException { Document document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(destinationFilePath)))); PdfFont pdfFont = PdfFontFactory.createFont(StandardFonts.TIMES_BOLD); - Paragraph pdfHeading = new Paragraph("Personal Details"); + Paragraph pdfHeading = new Paragraph("Personal Details"); pdfHeading.setFontSize(16f) .setFont(pdfFont) .setTextAlignment(TextAlignment.CENTER) @@ -49,14 +46,14 @@ public static void main(String[] args) throws IOException { document.close(); } - public static Table createPersonalDetailsTable(){ + public static Table createPersonalDetailsTable() { System.out.println("inside createPersonalDetailsTable"); float columnWidth[] = {150f, 350f}; Table personalDetailsTable = new Table(columnWidth); personalDetailsTable.setWidth(500f); personalDetailsTable.setAutoLayout(); - try{ + try { personalDetailsTable.addCell("Name"); personalDetailsTable.addCell("Akshat Jaiswal"); personalDetailsTable.addCell("UserId"); @@ -68,7 +65,7 @@ public static Table createPersonalDetailsTable(){ personalDetailsTable.addCell("Address"); personalDetailsTable.addCell("Main Road Rampur Karkhana, Deoria 274405"); - } catch (Exception e){ + } catch (Exception e) { System.out.println("Error while creating personal details table with exception " + e); } System.out.println("returning from createPersonalDetailsTable"); diff --git a/src/main/java/org/example/service/TestPdfGeneration.java b/src/main/java/org/example/service/TestPdfGeneration.java index b79a16f..68ca963 100644 --- a/src/main/java/org/example/service/TestPdfGeneration.java +++ b/src/main/java/org/example/service/TestPdfGeneration.java @@ -8,7 +8,7 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; -public class TestPdfGeneration { +public class TestPdfGeneration {- public static void main(String[] args) throws FileNotFoundException { String pdfDestination = "/Users/alex/Workspace/CodeGeneratedFiles/TestPdfGeneration.pdf"; Document document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(pdfDestination))));