Cách Trích Xuất Chữ Ký Phông OpenType trong Java với GroupDocs.Metadata
Trong các ứng dụng hiện đại, trích xuất dữ liệu chữ ký phông OpenType là điều cần thiết để xác nhận tính xác thực của phông và bảo vệ tài sản kỹ thuật số của bạn. Hướng dẫn này sẽ chỉ cho bạn, từng bước, cách lấy cả các cờ chữ ký và chi tiết mật mã đầy đủ từ một phông OpenType bằng GroupDocs.Metadata cho Java. Dù bạn đang xây dựng một quy trình nội dung tập trung vào bảo mật hay chỉ cần kiểm toán một thư viện phông, các kỹ thuật dưới đây sẽ giúp quy trình làm việc của bạn đáng tin cậy và nhanh chóng.
Câu trả lời nhanh
- Thư viện tôi cần là gì? GroupDocs.Metadata cho Java (v24.12)
- Phiên bản Java nào được yêu cầu? JDK 8 hoặc mới hơn
- Tôi có cần giấy phép không? Bản dùng thử miễn phí đủ cho việc đánh giá; cần giấy phép đầy đủ cho môi trường sản xuất
- Có thể xử lý nhiều phông cùng lúc không? Có – hỗ trợ xử lý hàng loạt hoặc đồng thời
- Mã có an toàn với đa luồng không? Tạo một thể hiện
Metadatamới cho mỗi luồng; đối tượng này tự nó không an toàn với đa luồng
Chữ ký Phông OpenType là gì?
Chữ ký phông OpenType là một khối mật mã được nhúng trong phông, chứng minh tệp không bị thay đổi kể từ khi được ký. Nó chứa thời gian ký, chuỗi chứng chỉ, định danh thuật toán băm và thông tin thu hồi tùy chọn. Ngoài ra còn bao gồm định danh thuật toán ký, chuỗi chứng chỉ của người ký và danh sách thu hồi tùy chọn, cho phép xác minh toàn diện tính toàn vẹn và nguồn gốc của phông.
Tại sao nên sử dụng GroupDocs.Metadata cho Java?
GroupDocs.Metadata hỗ trợ hơn 50 định dạng đầu vào và đầu ra (bao gồm DOCX, PDF, PPTX, HTML và nhiều loại ảnh) và có thể đọc chữ ký OpenType mà không cần tải toàn bộ tệp vào bộ nhớ, cho phép bạn xử lý các bộ sưu tập phông hàng trăm trang một cách hiệu quả.
Yêu cầu trước
- Java Development Kit (JDK): Phiên bản 8 hoặc mới hơn.
- IDE: Bất kỳ IDE nào hỗ trợ Java (IntelliJ IDEA, Eclipse, VS Code, v.v.).
- Maven: Để quản lý phụ thuộc.
Thư viện và phụ thuộc cần thiết
Thêm tọa độ Maven của GroupDocs.Metadata vào pom.xml của bạn. Điều này sẽ tải về đúng gói cần thiết cho các ví dụ.
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/metadata/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-metadata</artifactId>
<version>24.12</version>
</dependency>
</dependencies>
Tải xuống trực tiếp
Hoặc tải phiên bản mới nhất từ GroupDocs.Metadata for Java releases.
Cách nhận giấy phép
- Bản dùng thử: Bắt đầu với bản dùng thử miễn phí để khám phá các tính năng.
- Giấy phép tạm thời: Nhận giấy phép tạm thời qua trang cấp giấy phép GroupDocs.
- Mua: Đối với sử dụng trong sản xuất, mua giấy phép đầy đủ.
Cách trích xuất chữ ký Phông OpenType bằng GroupDocs.Metadata
Lớp Metadata là API cốt lõi của GroupDocs.Metadata để truy cập siêu dữ liệu tài liệu mà không cần tải toàn bộ tệp.
Để đọc chữ ký của một phông, khởi tạo đối tượng Metadata với đường dẫn tới tệp .otf và sau đó truy cập DigitalSignaturePackage. Cách tiếp cận này chỉ tải các cấu trúc siêu dữ liệu cần thiết, tránh việc phân tích toàn bộ phông và giảm thiểu sử dụng bộ nhớ. Đối tượng Metadata nên được sử dụng trong khối try‑with‑resources để đảm bảo giải phóng tài nguyên đúng cách.
Tải phông của bạn bằng new Metadata("font.otf") trong khối try‑with‑resources. Lớp Metadata là điểm vào của GroupDocs.Metadata để đọc bất kỳ loại tài liệu nào được hỗ trợ, bao gồm cả phông OpenType. Đối tượng sẽ tự động đóng, ngăn ngừa rò rỉ tài nguyên.
Cách trích xuất các cờ Chữ ký số
Đối tượng DigitalSignaturePackage tổng hợp tất cả thông tin liên quan đến chữ ký cho phông, bao gồm các cờ và chữ ký riêng lẻ.
Câu trả lời trực tiếp: Gọi metadata.getDigitalSignaturePackage().getFlags() sau khi mở phông; tập hợp cờ trả về cho bạn biết chữ ký có hợp lệ, bị thu hồi hay có các điều kiện đặc biệt nào không. Lệnh gọi duy nhất này cung cấp một kiểm tra nhanh về trạng thái trước khi bạn đi sâu vào chi tiết. Các cờ được biểu diễn dưới dạng enum có thể kiểm tra để xác định trạng thái ký, sự hiện diện của dấu thời gian và bất kỳ ràng buộc chính sách nào được áp dụng khi ký.
- Khởi tạo thể hiện
Metadatatrỏ tới tệp phông của bạn. - Lấy
DigitalSignaturePackage. - In hoặc ghi lại các giá trị cờ.
String documentPath = "YOUR_DOCUMENT_DIRECTORY"; // Replace with your input file path
try (Metadata metadata = new Metadata(documentPath)) {
OpenTypeRootPackage root = metadata.getRootPackageGeneric();
if (root.getDigitalSignaturePackage() != null) {
System.out.println(root.getDigitalSignaturePackage().getFlags());
}
}
Giải thích
documentPath– đường dẫn tuyệt đối hoặc tương đối tới phông OpenType.- Khối try‑with‑resources đảm bảo đối tượng
Metadatađược đóng tự động, tránh rò rỉ bộ nhớ.
Cách trích xuất thông tin chi tiết của Chữ ký số
CmsSignature đại diện cho một chữ ký CMS/PKCS#7 riêng lẻ được nhúng trong phông, cung cấp quyền truy cập vào các thuộc tính mật mã của nó.
Câu trả lời trực tiếp: Duyệt qua metadata.getDigitalSignaturePackage().getSignatures(); mỗi đối tượng CmsSignature cung cấp thời gian ký, thuật toán băm, nội dung được đóng gói và chi tiết chứng chỉ, cho phép bạn xây dựng báo cáo kiểm toán đầy đủ. Đối với mỗi chữ ký bạn có thể lấy chuỗi chứng chỉ của người ký, xác minh thuật toán băm và trích xuất bất kỳ token dấu thời gian nào để xác nhận thời điểm chữ ký được áp dụng.
- Tái sử dụng cùng khởi tạo
Metadatanhư trên. - Lặp qua mỗi
CmsSignaturetrong gói. - Trích xuất các thuộc tính như
getSignTime(),getDigestAlgorithms(),getCertificates(), vàgetSignerInfo().
String documentPath = "YOUR_DOCUMENT_DIRECTORY"; // Replace with your input file path
try (Metadata metadata = new Metadata(documentPath)) {
OpenTypeRootPackage root = metadata.getRootPackageGeneric();
if (root.getDigitalSignaturePackage() != null) {
for (CmsSignature signature : root.getDigitalSignaturePackage().getSignatures()) {
System.out.println(signature.getSignTime());
if (signature.getDigestAlgorithms() != null) {
for (com.groupdocs.metadata.core.Oid signatureDigestAlgorithm : signature.getDigestAlgorithms()) {
printOid(signatureDigestAlgorithm);
}
}
if (signature.getEncapsulatedContent() != null) {
System.out.println(signature.getEncapsulatedContent().getContentType());
System.out.println(signature.getEncapsulatedContent().getContentRawData().length);
}
if (signature.getCertificates() != null) {
for (com.groupdocs.metadata.core.CmsCertificate certificate : signature.getCertificates()) {
System.out.println(certificate.getNotAfter());
System.out.println(certificate.getNotBefore());
System.out.println(certificate.getRawData().length);
}
}
if (signature.getSigners() != null) {
for (com.groupdocs.metadata.core.CmsSigner signerInfoEntry : signature.getSigners()) {
System.out.println(signerInfoEntry.getSignatureValue());
printOid(signerInfoEntry.getDigestAlgorithm());
printOid(signerInfoEntry.getSignatureAlgorithm());
System.out.println(signerInfoEntry.getSigningTime());
}
}
}
}
}
Giải thích các phần chính
- Thời gian ký: Dấu thời gian khi chữ ký được áp dụng.
- Thuật toán băm & OID: Các thuật toán băm được sử dụng (ví dụ: SHA‑256).
- Nội dung đóng gói: Bất kỳ dữ liệu bổ sung nào được bao bọc trong chữ ký.
- Chứng chỉ: Ngày hiệu lực và kích thước dữ liệu thô giúp xác minh danh tính người ký.
- Người ký: Cung cấp lựa chọn thuật toán và thời gian ký của mỗi người ký.
Mẹo khắc phục sự cố
- Nếu phông không có chữ ký số,
getDigitalSignaturePackage()sẽ trả vềnull. Luôn kiểm tranulltrước khi truy cập các cờ hoặc chữ ký. - Đảm bảo bạn đang sử dụng cùng phiên bản GroupDocs.Metadata như đã định nghĩa trong phụ thuộc Maven để tránh các vấn đề tương thích.
Ứng dụng thực tiễn
Việc trích xuất chữ ký phông OpenType có giá trị trong nhiều kịch bản thực tế:
- Xác minh tài liệu: Tự động kiểm tra các tệp phông đã ký trong hệ thống quản lý nội dung.
- Quản lý tài sản kỹ thuật số: Xác thực tính xác thực của phông trước khi triển khai trong các dự án thương hiệu.
- Kiểm toán bảo mật: Xem xét chi tiết chữ ký để đảm bảo tuân thủ các chính sách bảo mật nội bộ.
Các cân nhắc về hiệu năng
- Quản lý tài nguyên: Sử dụng try‑with‑resources để đóng đối tượng
Metadatakịp thời. - Xử lý hàng loạt: Xử lý phông theo nhóm để giảm thiểu chi phí I/O; GroupDocs.Metadata có thể xử lý hàng ngàn tệp mà không cần tải toàn bộ phông vào bộ nhớ.
- Đa luồng: Chạy các thể hiện
Metadatariêng biệt trong các luồng song song cho khối lượng công việc lớn; thư viện không an toàn với đa luồng cho mỗi thể hiện, vì vậy mỗi luồng nên có một thể hiện riêng.
Câu hỏi thường gặp
H: Tôi có thể trích xuất chữ ký từ một phông không có chữ ký số không?
Đ: DigitalSignaturePackage sẽ là null; luôn kiểm tra điều kiện này trước khi truy cập các cờ hoặc chi tiết.
H: Phiên bản GroupDocs.Metadata nào được yêu cầu?
Đ: Các ví dụ hướng tới phiên bản 24.12, nhưng các bản phát hành mới hơn vẫn tương thích ngược với phông OpenType.
H: Tôi có cần giấy phép đặc biệt để đọc chữ ký không?
Đ: Giấy phép dùng thử đủ cho việc đánh giá; cần giấy phép đầy đủ cho môi trường sản xuất.
H: Làm sao xử lý phông lưu trong bucket đám mây?
Đ: Tải phông về một tệp tạm thời cục bộ, sau đó truyền đường dẫn của nó cho Metadata. Thư viện hoạt động với bất kỳ tệp nào có thể truy cập qua đường dẫn cục bộ.
H: Có thể xác minh tính hợp lệ mật mã của chữ ký không?
Đ: GroupDocs.Metadata cung cấp dữ liệu chữ ký thô; bạn có thể đưa chuỗi chứng chỉ và giá trị băm vào một thư viện mật mã riêng để thực hiện xác minh đầy đủ.
Kết luận
Bằng cách làm theo hướng dẫn này, bạn đã biết cách trích xuất thông tin chữ ký phông OpenType và dữ liệu chữ ký số chi tiết bằng GroupDocs.Metadata cho Java. Việc tích hợp các bước này vào ứng dụng của bạn sẽ tăng cường bảo mật tài liệu, tối ưu hoá việc xác thực tài sản và hỗ trợ các sáng kiến tuân thủ.
Bước tiếp theo
- Thử nghiệm xử lý hàng loạt để quản lý thư viện phông lớn một cách hiệu quả.
- Kết hợp dữ liệu đã trích xuất với công cụ kiểm toán bảo mật của bạn để tự động báo cáo tuân thủ.
- Khám phá các khả năng siêu dữ liệu khác của GroupDocs.Metadata, chẳng hạn như chỉnh sửa hoặc xóa chữ ký khi cần thiết.
Last Updated: 2026-06-22
Tested With: GroupDocs.Metadata 24.12
Author: GroupDocs