Cách Thêm Mã Vạch vào PDF trong Java
Giới thiệu
Bạn đã bao giờ cần tự động theo dõi hoá đơn, xác thực tính hợp pháp của hợp đồng, hoặc quản lý tài liệu tồn kho ở quy mô lớn? Học cách thêm mã vạch vào các tệp PDF một cách lập trình sẽ giải quyết những vấn đề này—và nếu bạn đang làm việc với Java, bạn có một lựa chọn vững chắc, đã được kiểm chứng.
Thêm mã vạch thủ công không thể mở rộng. Dù bạn đang xử lý mười hoá đơn hay mười nghìn, bạn cần một cách đáng tin cậy để thêm mã vạch vào PDF. Đó là lúc một thư viện mã vạch PDF cho Java tốt trở nên hữu ích.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thêm mã vạch vào các tệp PDF Java bằng GroupDocs.Signature—một thư viện xử lý phần nặng trong khi cho phép bạn kiểm soát chi tiết vị trí, kích thước và loại mã vạch. Khi đọc xong, bạn sẽ biết cách ký PDF bằng mã vạch Java, xử lý các trường hợp đặc biệt, và tránh những bẫy thường gặp khiến các nhà phát triển gặp rắc rối.
Bạn sẽ học được:
- Tại sao mã vạch trong PDF lại quan trọng đối với quy trình làm việc của bạn
- Cài đặt GroupDocs.Signature cho Java (đúng cách)
- Tạo và định vị chữ ký mã vạch một cách chính xác
- Xử lý lỗi và tối ưu hiệu năng
- Ứng dụng thực tế trong các ngành công nghiệp khác nhau
Câu trả lời nhanh
- Thư viện nào nên dùng? GroupDocs.Signature cho Java
- Làm sao tạo mã vạch ký PDF? Sử dụng
BarcodeSignOptionsvớiSignature.sign() - Loại mã vạch nào là tốt nhất cho hầu hết các trường hợp? Code128
- Có thể thêm nhiều mã vạch vào một PDF không? Có, gọi
sign()nhiều lần hoặc truyền danh sách - Cần giấy phép cho môi trường production không? Có, giấy phép GroupDocs hợp lệ sẽ loại bỏ watermark
Tại sao cần thêm mã vạch vào PDF?
Trước khi chúng ta đi vào code, hãy nói về lý do tại sao điều này lại quan trọng. Mã vạch trong PDF không chỉ để trông chuyên nghiệp—chúng giải quyết các vấn đề kinh doanh thực tế:
Xác thực tài liệu – Mã vạch có thể mã hoá các định danh duy nhất khiến việc giả mạo gần như không thể. Khi ai đó quét mã vạch, hệ thống của bạn có thể ngay lập tức xác minh tài liệu có hợp lệ hay không.
Tự động hoá quy trình – Thay vì nhập tay ID tài liệu hoặc số theo dõi, nhân viên (hoặc khách hàng) của bạn có thể quét mã vạch. Điều này giảm lỗi con người khoảng 95 % so với nhập liệu thủ công.
Tích hợp với hệ thống hiện có – Hầu hết các hệ thống ERP, quản lý tồn kho và quản lý tài liệu đã “nói” được mã vạch. Thêm chúng vào PDF nghĩa là tích hợp liền mạch mà không cần xây dựng API tùy chỉnh.
Yêu cầu tuân thủ – Nhiều ngành (y tế, logistics, pháp lý) yêu cầu khả năng truy xuất tài liệu. Mã vạch cung cấp chuỗi audit đáp ứng các yêu cầu quy định.
Lợi thế chính của việc thêm mã vạch một cách lập trình? Tính nhất quán và quy mô. Bạn định nghĩa quy tắc một lần, và mọi tài liệu đều nhận cùng một xử lý—dù bạn xử lý năm tệp hay năm nghìn.
Điều kiện tiên quyết
Trước khi bắt đầu viết code, hãy chắc chắn bạn đã chuẩn bị những điều cơ bản sau:
Phần mềm và thư viện cần thiết
- JDK 8 trở lên đã được cài trên máy (khuyến nghị JDK 11+ để hiệu năng tốt hơn)
- Một IDE như IntelliJ IDEA, Eclipse, hoặc VS Code với các extension Java
- GroupDocs.Signature cho Java phiên bản 23.12 (chúng tôi sẽ hướng dẫn cách thêm nó bên dưới)
Yêu cầu kiến thức cơ bản
- Thành thạo các khái niệm nền tảng Java (lớp, đối tượng, xử lý tệp)
- Hiểu cấu trúc tài liệu PDF (có ích nhưng không bắt buộc)
- Quen thuộc với quản lý phụ thuộc (Maven hoặc Gradle)
Mẹo chuyên nghiệp: Nếu bạn mới với GroupDocs, hãy lấy bản dùng thử miễn phí trước. Bạn sẽ có 30 ngày để thử nghiệm mà không cần mua giấy phép—rất phù hợp cho proof‑of‑concept.
Cài đặt GroupDocs.Signature cho Java
Đưa GroupDocs.Signature vào dự án của bạn rất đơn giản. Chọn hệ thống quản lý phụ thuộc phù hợp với môi trường của bạn:
Cấu hình Maven
Thêm đoạn này vào tệp pom.xml của bạn:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Cấu hình Gradle
Đối với người dùng Gradle, thêm dòng này vào build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Tùy chọn tải trực tiếp
Không muốn dùng công cụ xây dựng? Tải JAR trực tiếp từ trang phát hành GroupDocs.Signature cho Java và thêm vào classpath của dự án thủ công.
Cấu hình giấy phép
Đây là lộ trình cấp phép thực tế mà hầu hết các nhà phát triển theo:
- Bắt đầu với bản dùng thử – Không cần thẻ tín dụng, không ràng buộc. Hoàn hảo để thử nghiệm.
- Lấy giấy phép tạm thời – Nếu 30 ngày không đủ, yêu cầu giấy phép tạm thời để kéo dài thời gian phát triển.
- Mua giấy phép cho production – Khi bạn sẵn sàng triển khai, mua giấy phép phù hợp với mức sử dụng của mình.
Lưu ý quan trọng: Bản dùng thử sẽ thêm watermark vào tài liệu đầu ra. Đối với công việc hướng khách hàng, bạn cần ít nhất một giấy phép tạm thời.
Code khởi tạo ban đầu
Khi các phụ thuộc đã sẵn sàng, khởi tạo đối tượng Signature như sau:
import com.groupdocs.signature.Signature;
// Initialize Signature object with your document path
Signature signature = new Signature("YOUR_DOCUMENT_DIRECTORY/sample.pdf");
Giải thích: Lớp Signature là điểm vào chính. Bạn truyền vào đường dẫn tệp, và nó sẽ tải PDF vào bộ nhớ để xử lý. Đơn giản, đúng không?
Sai lầm thường gặp: Đừng quên đóng đối tượng Signature khi hoàn thành (hoặc dùng try‑with‑resources). Để mở lâu có thể gây rò rỉ bộ nhớ trong các ứng dụng chạy lâu.
Lựa chọn loại mã vạch phù hợp
Không phải mọi loại mã vạch đều giống nhau. Loại bạn chọn phụ thuộc vào dữ liệu cần mã hoá và nơi sẽ quét mã vạch.
Các loại mã vạch phổ biến được hỗ trợ
- Code128 – Thích hợp cho dữ liệu alphanumeric; thường dùng trong nhãn vận chuyển.
- QR Codes – Hoàn hảo khi cần lưu trữ nhiều dữ liệu (URL, JSON, tới 4 000 ký tự).
- Code39 – Đơn giản hơn Code128 nhưng kém hiệu quả về không gian; tốt cho theo dõi nội bộ.
- EAN/UPC – Tiêu chuẩn ngành cho sản phẩm bán lẻ.
Khi nào dùng loại nào?
- Cần mã hoá hơn 50 ký tự? → QR Code
- Xác định sản phẩm tiêu chuẩn? → EAN/UPC
- Theo dõi tài liệu chung? → Code128
- Tối đa tương thích với máy quét cũ? → Code39
Mẹo chuyên nghiệp: Code128 là lựa chọn mặc định an toàn nhất cho quản lý tài liệu. Nó cân bằng giữa khả năng đọc, dung lượng dữ liệu và tương thích máy quét.
Hướng dẫn thực hiện: Tạo chữ ký mã vạch
Bây giờ đến phần thực hành—hãy tạo và thêm mã vạch vào PDF của bạn. Tôi sẽ chia thành các bước dễ quản lý để bạn có thể theo dõi (hoặc bỏ qua phần không cần).
Bước 1: Đặt đường dẫn tài liệu
Đầu tiên, cho Java biết nơi tìm PDF nguồn và nơi lưu phiên bản đã ký:
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
String fileName = new File(filePath).getName();
Giải thích: Bạn định nghĩa đường dẫn tệp đầu vào và tách ra chỉ tên tệp. Điều này giúp tổ chức đầu ra (đặc biệt hữu ích khi xử lý hàng loạt nhiều tệp).
Mẹo thực tế: Trong production, các đường dẫn này thường lấy từ file cấu hình hoặc biến môi trường—not hard‑coded strings. Hãy cân nhắc dùng System.getenv() hoặc file properties để linh hoạt hơn.
Bước 2: Cấu hình đầu ra và tùy chọn mã vạch
Tiếp theo, xác định nơi lưu tài liệu đã ký và loại mã vạch bạn muốn tạo:
// Define output file path
String outputFilePath = "YOUR_OUTPUT_DIRECTORY/SignWithMillimeters/" + fileName;
BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeTypes.Code128);
Phân tích:
outputFilePath– Đường dẫn nơi PDF đã hoàn thiện sẽ được lưu. Lưu ý cấu trúc thư mục con? Điều này giúp phân loại các phương pháp ký khác nhau.BarcodeSignOptions("12345678")– Dữ liệu được mã hoá trong mã vạch. Có thể là số hoá đơn, ID theo dõi, hash tài liệu—bất cứ gì bạn cần.setEncodeType(BarcodeTypes.Code128)– Cho GroupDocs biết định dạng mã vạch cần dùng.
Câu hỏi thường gặp: “Có thể dùng ký tự đặc biệt trong dữ liệu mã vạch không?” Với Code128, có—bạn có thể bao gồm chữ cái, số và hầu hết dấu câu. QR code còn linh hoạt hơn.
Bước 3: Định vị mã vạch một cách chính xác
Đây là phần thú vị. Bạn có thể định vị mã vạch với độ chính xác tính bằng milimet:
// Set position and size in millimeters
options.setLocationMeasureType(MeasureType.Millimeters);
options.setLeft(40); // X‑coordinate from left edge
options.setTop(50); // Y‑coordinate from top edge
options.setSizeMeasureType(MeasureType.Millimeters);
options.setWidth(20); // Width of the barcode
options.setHeight(10); // Height of the barcode
Tại sao milimet quan trọng: Khi in tài liệu, milimet cho phép bạn có kích thước đồng nhất trên các kích thước giấy và độ phân giải khác nhau. (Bạn cũng có thể dùng pixel hoặc phần trăm nếu phù hợp hơn.)
Chiến lược định vị:
- Góc trên‑phải (giống nhãn vận chuyển):
setLeft(150),setTop(10) - Giữa‑dưới (giống vé): tính trung tâm dựa trên chiều rộng trang
- Bên cạnh nội dung hiện có: đo bố cục PDF và đặt vị trí tương ứng
Mẹo chuyên nghiệp: Kiểm tra vị trí trên một vài PDF mẫu trước khi chạy hàng loạt. Các bố cục PDF khác nhau có thể cần điều chỉnh nhẹ.
Bước 4: Thêm lề để tinh tế hơn
Lề giúp mã vạch không chen chúc vào nội dung khác:
// Define margin settings
Padding padding = new Padding();
padding.setLeft(5); // Left margin in mm
padding.setTop(5); // Top margin in mm
padding.setRight(5); // Right margin in mm
padding.setBottom(5); // Bottom margin in mm
options.setMargin(padding);
Chức năng: Tạo vùng đệm 5 mm quanh mã vạch. Khoảng cách này cải thiện khả năng quét và tạo cảm giác chuyên nghiệp hơn.
Khi nào tăng lề: Nếu đặt mã vạch gần mép trang, tăng lề lên 10 mm. Máy in thường gặp khó khăn với nội dung quá gần mép.
Bước 5: Ký và lưu tài liệu
Đây là khoảnh khắc quyết định—thực sự thêm mã vạch:
// Sign and save the document
SignResult signResult = signature.sign(outputFilePath, options);
Quá trình bên trong: GroupDocs mở PDF, vẽ mã vạch dựa trên tùy chọn của bạn, nhúng vào vị trí đã chỉ định, và lưu tệp đã chỉnh sửa. PDF gốc không bị thay đổi.
Giá trị trả về: Đối tượng SignResult chứa trạng thái thành công/ thất bại và siêu dữ liệu về những gì đã được ký. Bạn có thể kiểm tra để xác nhận mọi thứ hoạt động đúng.
Bước 6: Xử lý lỗi một cách khéo léo
Có thể xảy ra lỗi (đường dẫn sai, PDF hỏng, quyền truy cập không đủ). Hãy xử lý chúng đúng cách:
try {
Signature signature = new Signature(filePath);
SignResult signResult = signature.sign(outputFilePath, options);
System.out.println("Barcode added successfully!");
System.out.println("Output saved to: " + outputFilePath);
} catch (Exception e) {
System.err.println("Error signing document: " + e.getMessage());
throw new GroupDocsSignatureException(e.getMessage());
}
Thực hành tốt cho việc bắt ngoại lệ:
- Ghi lại toàn bộ stack trace để debug (không chỉ thông báo)
- Cung cấp thông báo lỗi thân thiện với người dùng (tránh thuật ngữ kỹ thuật)
- Dọn dẹp tài nguyên ngay cả khi có lỗi (dùng try‑with‑resources)
- Xem xét logic retry cho các lỗi tạm thời (sự cố mạng, tệp bị khóa)
Các lỗi thường gặp:
FileNotFoundException– Đường dẫn PDF đầu vào saiGroupDocsSignatureException– Dữ liệu mã vạch không hợp lệ hoặc phiên bản PDF không được hỗ trợOutOfMemoryError– Xử lý quá nhiều PDF lớn đồng thời
Cách tạo mã vạch ký PDF trong Java
Nếu bạn muốn một danh sách kiểm tra ngắn gọn, từng bước, đây là nó:
- Thêm phụ thuộc GroupDocs.Signature (Maven, Gradle, hoặc JAR thủ công).
- Khởi tạo
Signaturevới đường dẫn PDF nguồn. - Cấu hình
BarcodeSignOptions– đặt dữ liệu, loại, kích thước và vị trí. - Tùy chọn đặt lề để cải thiện khả năng đọc.
- Gọi
signature.sign(outputPath, options)để nhúng mã vạch. - Xử lý ngoại lệ và đóng tài nguyên.
Thực hiện sáu bước này sẽ cho phép bạn thêm mã vạch vào tài liệu PDF Java một cách đáng tin cậy trong bất kỳ ứng dụng Java nào.
Các vấn đề thường gặp & Giải pháp
Hãy cùng giải quyết những vấn đề mà các nhà phát triển thực sự gặp phải (vì tài liệu thường không đề cập đủ):
Vấn đề 1: Mã vạch không quét được đúng
Triệu chứng: Máy quét không đọc được mã vạch hoặc trả về dữ liệu sai.
Giải pháp:
- Tăng kích thước mã vạch (độ rộng tối thiểu 15 mm cho hầu hết máy quét)
- Kiểm tra dữ liệu mã vạch không chứa ký tự không hỗ trợ cho loại đó
- Đảm bảo độ tương phản đủ giữa mã vạch và nền
- Thử nghiệm với nhiều ứng dụng quét—một số tốt hơn những cái khác
Vấn đề 2: Vị trí mã vạch dịch chuyển giữa các tài liệu
Triệu chứng: Cùng một đoạn code định vị cho ra kết quả khác nhau trên các PDF có kích thước trang khác nhau.
Giải pháp:
- Các PDF có kích thước trang khác nhau cần tính toán vị trí, không dùng giá trị cố định
- Kiểm tra xem PDF nguồn có áp dụng xoay không (điều này làm lệch tọa độ)
- Dùng định vị dựa trên phần trăm để đồng nhất hơn
- Khi có thể, chuẩn hoá tất cả PDF đầu vào về cùng một kích thước trang
Vấn đề 3: Hiệu năng giảm khi xử lý batch lớn
Triệu chứng: 100 PDF đầu tiên xử lý nhanh, sau đó chậm lại.
Giải pháp:
- Đóng đối tượng
Signaturengay khi xong (hoặc dùng try‑with‑resources) - Xử lý theo batch nhỏ, dọn dẹp bộ nhớ giữa các batch
- Xem xét xử lý song song cho các tác vụ CPU‑bound
- Giám sát heap usage—có thể cần tinh chỉnh JVM
// Good: Process in chunks
List<String> allFiles = getAllPdfFiles();
int batchSize = 100;
for (int i = 0; i < allFiles.size(); i += batchSize) {
List<String> batch = allFiles.subList(i, Math.min(i + batchSize, allFiles.size()));
processBatch(batch);
System.gc(); // Suggest garbage collection between batches
}
Vấn đề 4: Kích thước file đầu ra tăng đáng kể
Triệu chứng: PDF đã ký lớn hơn nhiều so với bản gốc.
Giải pháp:
- GroupDocs không tự động nén—nếu cần, thực hiện nén riêng
- Tránh thêm ảnh mã vạch độ phân giải cao khi vector đủ dùng
- Kiểm tra xem bạn có vô tình nhúng phông chữ hoặc metadata phụ không
Khi nào nên liên hệ hỗ trợ: Nếu đã thử các giải pháp trên mà vẫn gặp vấn đề, diễn đàn GroupDocs có đội ngũ hỗ trợ phản hồi nhanh.
Các trường hợp sử dụng thực tế
Dưới đây là cách các ngành công nghiệp khác nhau áp dụng tính năng này:
Ngành pháp lý: Quản lý hợp đồng
Các công ty luật thêm mã vạch vào hợp đồng để liên kết tài liệu vật lý với hệ thống quản lý vụ việc. Quét mã vạch ngay lập tức mở ra toàn bộ lịch sử vụ việc, rút ngắn thời gian xử lý từ phút xuống giây.
Mẹo triển khai: Mã hoá hash tài liệu trong mã vạch để xác minh tài liệu vật lý không bị thay đổi.
Y tế: Hồ sơ bệnh nhân
Bệnh viện gắn mã vạch vào bản tóm tắt xuất viện và toa thuốc PDF. Khi bệnh nhân đến, nhân viên quét mã vạch để tự động điền lịch sử khám bệnh.
Lưu ý tuân thủ: Đảm bảo việc mã hoá trong mã vạch đáp ứng yêu cầu HIPAA.
Logistics: Nhãn vận chuyển
Các nền tảng thương mại điện tử tự động thêm mã vạch theo dõi vào phiếu đóng gói. Nhân viên kho quét để cập nhật trạng thái giao hàng mà không cần nhập liệu thủ công.
Xem xét hiệu năng: Hệ thống này thường xử lý hàng ngàn tài liệu mỗi giờ—cần batch processing và thực thi song song.
Tài chính: Xử lý hoá đơn
Bộ phận kế toán thêm mã vạch vào hoá đơn, mã hoá điều khoản thanh toán và ID nhà cung cấp. Quét mã vạch tự động chuyển hoá đơn tới luồng phê duyệt phù hợp.
Mẹo chuyên nghiệp: Kết hợp mã vạch với OCR để tự động hoá tối đa—quét mã vạch để lấy metadata, OCR để lấy chi tiết dòng mục.
Các thực hành tối ưu về hiệu năng
Khi xử lý tài liệu ở quy mô lớn, những tối ưu này thực sự tạo sự khác biệt:
Quản lý bộ nhớ
- Sử dụng try‑with‑resources: Đảm bảo đối tượng
Signatuređược đóng đúng cách. - Xử lý theo batch: Không tải 10 000 PDF vào bộ nhớ cùng lúc.
- Giám sát heap usage: Đặt flag JVM phù hợp (
-Xmx,-Xms).
Chiến lược xử lý batch
List<String> files = getAllPdfFiles();
files.parallelStream().forEach(file -> {
try {
addBarcodeToFile(file);
} catch (Exception e) {
// Handle per‑file errors
}
});
Cảnh báo: Xử lý song song tiêu tốn nhiều bộ nhớ hơn. Hãy giám sát và tinh chỉnh phù hợp.
Caching đối tượng Signature
Nếu thường xuyên xử lý các tài liệu tương tự, cân nhắc tái sử dụng cấu hình:
// Create options once
BarcodeSignOptions templateOptions = createStandardOptions();
// Reuse for multiple files
for (String file : files) {
BarcodeSignOptions options = templateOptions.clone();
// Customize per file if needed
processFile(file, options);
}
Câu hỏi thường gặp
H: Làm sao tạo mã vạch ký PDF trong Java cho các loại mã vạch khác nhau?
Đ: Thay đổi tham số của setEncodeType(). Đối với QR code, dùng BarcodeTypes.QR. Đối với EAN‑13, dùng BarcodeTypes.EAN13. GroupDocs hỗ trợ hơn 60 loại mã vạch ngay trong hộp.
H: Có thể thêm nhiều mã vạch vào cùng một PDF không?
Đ: Chắc chắn. Gọi signature.sign() nhiều lần với các BarcodeSignOptions khác nhau, hoặc truyền danh sách các tùy chọn ký trong một lần gọi.
H: Làm sao thêm mã vạch vào PDF hiện có mà không mất nội dung?
Đ: GroupDocs mặc định là non‑destructive—thêm mã vạch như một lớp mới mà không thay đổi nội dung, hình ảnh hay định dạng gốc.
H: Dung lượng dữ liệu tối đa có thể mã hoá trong một mã vạch là bao nhiêu?
Đ: Tùy loại. Code128 xử lý khoảng 128 ký tự một cách thoải mái. QR code có thể lưu tới 4 000 ký tự. Nếu cần nhiều hơn, cân nhắc mã hoá một URL trỏ tới dữ liệu của bạn.
H: Cần giấy phép cho môi trường production không?
Đ: Có. Bản dùng thử sẽ thêm watermark. Đối với triển khai thực tế, bạn cần giấy phép tạm thời (để kéo dài thời gian thử) hoặc mua giấy phép. Xem trang giá của GroupDocs để biết chi tiết hiện tại.
H: Làm sao xử lý ngoại lệ khi batch processing?
Đ: Bao mỗi thao tác tệp trong một khối try‑catch riêng để một PDF lỗi không làm sập toàn bộ batch. Ghi log lỗi kèm tên tệp để có thể tái xử lý sau.
H: GroupDocs có tạo mã vạch 2D như Data Matrix không?
Đ: Có! Dùng BarcodeTypes.DataMatrix. Data Matrix phổ biến trong sản xuất vì có thể đọc được ngay cả khi bị hỏng một phần hoặc ở góc độ lạ.
H: GroupDocs hỗ trợ các phiên bản PDF nào?
Đ: GroupDocs.Signature làm việc với PDF từ phiên bản 1.3 tới 2.0 (độ bao phủ 99 % các PDF thường gặp). Nếu bạn có PDF rất cũ, hãy cân nhắc chuyển đổi trước.
Kết luận
Bạn đã nắm được cách thêm mã vạch vào tài liệu PDF Java một cách lập trình bằng GroupDocs.Signature. Chúng tôi đã bao phủ mọi thứ từ cài đặt cơ bản đến xử lý lỗi trong môi trường production và tối ưu hiệu năng.
Những điểm chính cần nhớ
- Mã vạch giải quyết các vấn đề thực tế trong quy trình (tự động hoá, xác thực, truy xuất)
- GroupDocs cho phép bạn kiểm soát chi tiết vị trí và loại mã vạch
- Xử lý lỗi và quản lý tài nguyên đúng cách ngăn ngừa rắc rối trong production
- Tối ưu hiệu năng là yếu tố quan trọng khi xử lý hàng loạt tài liệu
Bước tiếp theo: Bắt đầu với một proof‑of‑concept nhỏ bằng bản dùng thử miễn phí. Thử các loại mã vạch khác nhau trên tài liệu thực tế của bạn. Khi đã xác nhận, tiến tới batch processing và cuối cùng triển khai production.
Có câu hỏi hoặc gặp khó khăn? Hãy đăng lên diễn đàn hỗ trợ GroupDocs—cộng đồng rất nhiệt tình và thời gian phản hồi nhanh.
Tài nguyên
Tài liệu & Tải về
Giấy phép & Hỗ trợ
Cập nhật lần cuối: 2026-03-22
Kiểm thử với: GroupDocs.Signature 23.12 cho Java
Tác giả: GroupDocs