Convert JSON เป็น PDF ง่ายนิดเดียวโดยใช้ iText library

Rungruk Maitriboriruk
SCB Engineer
Published in
3 min readAug 27, 2021

สวัสดีครับทุกคน👋🏻 ผมเชื่อว่าเกือบทุกคนน่าจะรู้จักกับ PDF แต่ทุกคนเคยสงสัยกันไหมครับว่าเราจะแปลงโปรแกรมที่เราเขียนออกมาให้อยู่ในรูปแบบไฟล์ PDF ได้ยังไง😲😲😲

วันนี้ผมเลยมานำเสนอวิธีสำหรับสาวก Java Spring Boot มาแปลง JSON ให้ออกมาในรูปแบบไฟล์ PDF ง่ายนิดเดียวเพียงแค่คุณรู้จักกับ iText library 😙😙😙

Step 1 : Dependency

🔑 เพิ่ม dependency ของตัว itextpdf เพื่อให้สามารถใช้งาน library ของ itextpdf ได้

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.x.x</version>
</dependency>

Step 2: JSON

🔑 หน้าตาของ JSON ที่เราจะทำการเปลี่ยนให้เป็น PDF

JsonArray

ใน Json ประกอบไปด้วย 5 องค์ประกอบ คือ 👇🏻

  • alignment คือ การจัดตำแหน่งของตัวอักษรหลักๆที่ใช้มีอยู่ 3 รูปแบบคือ ALIGN_LEFT (0) , ALIGN_CENTER (1) , ALIGN_RIGHT (2)
  • data คือ ตัวอักษรที่เราจะวางลงไปบน PDF
  • fontSize คือ ขนาดความใหญ่ของ Font ที่เรากำหนด
  • positionX คือ ตำแหน่งแกน X ที่เราจะทำการวาง Data ลงไปบน PDF
  • positionY คือ ตำแหน่งแกน Y ที่เราจะทำการวาง Data ลงไปบน PDF

STEP 3 : สร้าง Class ใหม่เพื่อเตรียม Map JsonArray ให้เป็น List ของ Object

🔑 สร้าง Class JsonDetails และใช้ @JsonProperty ของ fasterxml.jackson ช่วยในการ Map JsonArray ให้เป็น List ของ Object ซึ่งตัว library ของ fasterxml.jackson ต่างๆจะถูกเพิ่มอัตโนมัติจาก Spring Boot

JsonDetails

STEP 4 : สร้าง Pdf Generator

🔑 เป็น Function ที่เอาไว้แปลง JSON ใน Step 2 ให้ออกมาเป็น PDF

pdfGenerator

🔑 ส่วนประกอบหลักๆของ Function pdfGenerator จะประกอบไปด้วย

  • ObjectMapper
    ที่ใช้ในการช่วย Map JsonArray ให้เป็น List ของ Object ที่เราสร้างไว้ในที่นี้คือจะทำการ Map JsonArray ให้ออกมาในรูปแบบ List<JsonDetails> โดยจะทำงานคู่กับ @JsonProperty ของ Class JsonDetails
  • Document
    เป็น library ของ iText ไว้กำหนดขนาดของ PDF ว่าเป็นขนาดแบบใด เช่น A0 , A1 , A4
  • PdfWriter
    เป็น library ของ iText ใช้เป็น Doc Writer ของ PDF ซึ่งจะออกมาในรูปแบบ ByteArrayOutputStream
  • iTextPdfService
    เป็น Function ที่สร้างขึ้นมาเพื่อนำข้อมูลจาก list ของ jsonDetails มาเขียนลงบน pdfWriter ตามตำแหน่งและข้อมูลที่เรากำหนดไว้ใน JSON Step ที่ 2
itextPdfService
  • byteArrayToPdf
    เป็น Function ที่สร้างขึ้นมาโดยการนำ ByteArrayOutputStream ที่ได้จาก iTextPdfService มาแปลงเป็น ByteArray เพื่อมาเขียนเป็นไฟล์ PDF
byteArrayToPdf

STEP 5 : Main Class

🔑 สร้าง Main Class เพื่อ run pdfGenerator ที่เราสร้างขึ้นมา

Main Class

Result

หน้าตาของ PDF ที่เราได้ออกมาจากการใช้ iText library เป็นตามที่เราต้องการเลยเยี่ยมสุดๆๆๆๆๆๆ🎉🎉🎉🎉🎉

Result

💡💡 ในโอกาสหน้า ผมจะมาเล่าให้ฟังเกี่ยวกับสิ่งที่เพิ่มขึ้นใน iText version 7 ซึ่งเป็น version ล่าสุดของ iText รวมถึง feature ใหม่ๆที่น่าสนใจครับ อย่าลืมรอติดตามกันนะะะะ🧸🧸

--

--