- vừa được xem lúc

Hướng dẫn tạo file PDF từ Excel bằng thư viện miễn phí JobConverter

0 0 8

Người đăng: Nguyễn Ngọc Trung

Theo Viblo Asia

Mở đầu

Trong lập trình Java, việc tạo file PDF là một nhiệm vụ phức tạp và thường đòi hỏi sử dụng các thư viện trả phí như iText, JasperReports. Hoặc nếu không có chi phí thì thường là các thư viên như Apache PDFbox, tuy nhiên thường chất lượng đầu ra của PDF là không tốt , không giai quyết được các vấn đề như vị trí, font-size, hình ảnh... Điều này không chỉ tốn kém tiền bạc, thời gian mà còn đòi hỏi kiến thức chuyên sâu về API của các thư viện này. Để giải quyết vấn đề này, JobConverter ra đời như một công cụ miễn phí giúp bạn dễ dàng tạo file PDF bằng cách chuyển đổi từ file Excel mà không cần phải viết mã phức tạp. Bài viết này sẽ hướng dẫn bạn cách sử dụng JobConverter để chuyển đổi file Excel sang PDF một cách hiệu quả và dễ dàng.

Chi tiết

1. Sử dụng Apache POI để tạo hoặc chỉnh sửa file Excel

Trước khi chuyển đổi sang PDF, bạn cần có file Excel, Nếu như chưa có sẵn file Excel bạn có thể tạo nó bằng Apache POI (một thư viện miễn phí của Apache). Apache POI là một thư viện Java mạnh mẽ và linh hoạt, cho phép bạn thao tác với các file Excel. Để sử dụng Apache POI, bạn cần hiểu rõ các API của nó. Dưới đây là một ví dụ cơ bản:

Ví dụ tạo một file excel mới:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream;
import java.io.IOException; public class ExcelCreator { public static void main(String[] args) { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Data Sheet"); Row header = sheet.createRow(0); header.createCell(0).setCellValue("ID"); header.createCell(1).setCellValue("Name"); header.createCell(2).setCellValue("Age"); Row row1 = sheet.createRow(1); row1.createCell(0).setCellValue(1); row1.createCell(1).setCellValue("John Doe"); row1.createCell(2).setCellValue(30); try (FileOutputStream fileOut = new FileOutputStream("example.xlsx")) { workbook.write(fileOut); } catch (IOException e) { e.printStackTrace(); } }
}

Hoặc gán data cho một file excel có sẵn, chúng ta có thể hiểu file excel này như một template, việc của bạn là chỉ cần gán data từ java vào

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; public class ExcelTemplateProcessor { public static void main(String[] args) { // Đường dẫn tới file Excel String inputFilePath = "template.xlsx"; String outputFilePath = "output.xlsx"; // Dữ liệu cần thay thế Map<String, String> data = new HashMap<>(); data.put("${fullName}", "Nguyễn Văn A"); data.put("${age}", "30"); data.put("${address}", "Hà Nội, Việt Nam"); // Xử lý file Excel try { FileInputStream fis = new FileInputStream(inputFilePath); Workbook workbook = new XSSFWorkbook(fis); // Duyệt qua các sheet trong workbook for (int i = 0; i < workbook.getNumberOfSheets(); i++) { Sheet sheet = workbook.getSheetAt(i); // Duyệt qua các row trong sheet for (Row row : sheet) { // Duyệt qua các cell trong row for (Cell cell : row) { if (cell.getCellType() == CellType.STRING) { String cellValue = cell.getStringCellValue(); // Thay thế các key bằng giá trị tương ứng for (Map.Entry<String, String> entry : data.entrySet()) { if (cellValue.contains(entry.getKey())) { cellValue = cellValue.replace(entry.getKey(), entry.getValue()); } } cell.setCellValue(cellValue); } } } } // Ghi workbook ra file mới FileOutputStream fos = new FileOutputStream(outputFilePath); workbook.write(fos); // Đóng các stream fos.close(); workbook.close(); fis.close(); System.out.println("File Excel đã được xử lý thành công."); } catch (IOException e) { e.printStackTrace(); } }
}

Trên đây chỉ là 2 ví dụ để bạn có thể hình dung, vi vậy tùy vào kinh nghiệm mà bạn có thể code tối ưu và mạnh mẽ hơn.

2. Cài đặt các phần mềm Office để xử lý file xlsx

Sau khi tạo file Excel, bạn cần cài đặt các phần mềm Office có khả năng xử lý file xlsx. Các lựa chọn bao gồm:

  • Microsoft Office: Đây là phần mềm phổ biến và mạnh mẽ nhất. Tuy nhiên nó cần trả phí
  • OpenOffice: Một phần mềm mã nguồn mở miễn phí.
  • LibreOffice: Cũng là một phần mềm mã nguồn mở miễn phí và rất mạnh mẽ. ... và còn nhiều phần mếm khác nữa..

3. Sử dụng JobConverter để chuyển đổi từ Excel sang PDF

JobConverter là công cụ giúp bạn chuyển đổi file Excel sang PDF một cách đơn giản. Điều đặc biệt về JobConverter là nó sử dụng các phần mềm Office đã cài đặt để xử lý và chuyển đổi file, thay vì phải đọc và tạo lại file như các thư viện khác. Điều này giúp đảm bảo chất lượng chuyển đổi gần như tuyệt đối, không bị vỡ font hay layout.

Bạn có thể tải JobConverter và làm theo hướng dẫn sau: Thêm đoạn code sau vào file pom.xml, hoặc nếu như không có file pom.xml thì hãy download các gói jar tương ứng , tham khảo thêm tại : https://github.com/jodconverter/jodconverter

<dependencies> <dependency> <groupId>org.artofsolving.jodconverter</groupId> <artifactId>jodconverter-core</artifactId> <version>3.0-beta-4</version> </dependency>
</dependencies>

Sau đó có thể convert trực tiếp excel qua pdf thông qua cmd

java -jar jobconverter.jar -input example.xlsx -output example.pdf

Hoặc xử lý trên file java.

import java.io.File; import org.jodconverter.DocumentConverter;
import org.jodconverter.LocalConverter;
import org.jodconverter.office.LocalOfficeManager;
import org.jodconverter.office.OfficeException;
import org.jodconverter.office.OfficeManager; public class DocConverter { public static void main(String[] args) throws OfficeException { OfficeManager officeManager = LocalOfficeManager.make(); DocumentConverter converter = LocalConverter.make(officeManager); try { officeManager.start(); File inputFile = new File("/data/test.xlsx"); File outputFile = new File("/data/test.pdf"); // Convert... converter.convert(inputFile).to(outputFile).execute(); } finally { officeManager.stop(); } }
}

Lưu ý: mặc định OfficeManager sẽ tự nhận phần mêm Office (default) mà bạn đã cài, tuy nhiên trong trường hợp không nhận hoặc khi bạn cài nhiều phần mêm Office trên cùng một máy thì có thể điều hướng thông qua ".officeHome" như bên dưới:

OfficeManager officeManager = LocalOfficeManager.builder() .install() .officeHome("C:\\Program Files\\LibreOffice") .build();

4. Demo

Ví dụ mình có file excel như bên dưới

image.png

Trong file excel, mình có một keyword là ${companyName}, mình sẽ sử dụng ApachePoi để gán data vào file excel này: trong ví dụ này mình đã code toàn bộ xử lý gán data ở method setDataToTemplate, cách làm thì bạn có thể tham khảo ví dụ phía trên nhé hoặc research thêm

image.png

Kết quả sau khi convert sang PDF, bạn sẽ thấy từ layout đến hình ảnh hầu như là tuyệt đối

image.png

Kết luận

JobConverter là một giải pháp hiệu quả và tiết kiệm chi phí cho việc chuyển đổi file Excel sang PDF. Bằng cách tận dụng các phần mềm Office đã cài đặt, nó đảm bảo chất lượng chuyển đổi cao và dễ sử dụng. Hy vọng qua bài viết này, bạn đã nắm được cách sử dụng JobConverter để giải quyết vấn đề chuyển đổi file một cách dễ dàng và hiệu quả. Hãy thử nghiệm và tận hưởng sự tiện lợi mà JobConverter mang lại!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 292

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 267

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 46

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 189

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 66

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 133