Apa yang baru di GroupDocs.Signature untuk Python 26.1 (Januari 2026)
| ID | Kategori | Ringkasan |
|---|---|---|
| SIGNATURENET‑5528 | ✨ Fitur | Dukungan dan validasi tanda tangan digital gambar (penyisipan steganografi LSB untuk PNG & JPG). |
| SIGNATURENET‑5445 | ✨ Fitur | Rendering adaptif untuk pratinjau tanda tangan Barcode dan QR Code – kontrol lebar/tinggi yang eksplisit. |
| SIGNATURENET‑5479 | ✨ Fitur | Dukungan rotasi untuk gambar pratinjau Barcode dan QR Code. |
| SIGNATURENET‑5478 | ✨ Fitur | Ditambahkan penanganan format gambar APNG dan TGA untuk tanda tangan berbasis gambar. |
| SIGNATURENET‑5500 | ⚡ Peningkatan | Optimasi kueri bergaya LINQ untuk pencarian & verifikasi tanda tangan (penyaringan predikat). |
| SIGNATURENET‑5480 | ⚡ Peningkatan | Dukungan transparansi latar belakang untuk pratinjau Barcode/QR. |
| SIGNATURENET‑5477 | ⚡ Peningkatan | Dukungan gambar overlay untuk tanda tangan digital dengan warna latar belakang (bendera foreground‑image). |
| SIGNATURENET‑5422 | ⚡ Peningkatan | Penghapusan algoritma enkripsi tidak aman (RC2, DES, TripleDES dan mode AES lemah). |
| SIGNATURENET‑5555 | 🐞 Perbaikan Bug | Memperbaiki pengecualian type‑initializer GeneratePreview() untuk file DOC di Linux. |
Berikut adalah panduan teknis singkat mengenai perubahan paling berdampak.
1. Tanda tangan digital gambar (steganografi)
- Tanda tangan disembunyikan pada bit paling tidak signifikan (LSB) piksel PNG/JPG.
- Dilindungi kata sandi, kompatibel dengan aliran, dan dapat bekerja dengan ukuran gambar apa pun ≥ 8 × 8 px.
Menandatangani gambar
import groupdocs.signature as gs
import groupdocs.signature.options as gso
input_file = "image.png"
output_file = "signed_image.png"
password = "MySecurePassword123"
# Sign the image
with gs.Signature(input_file) as signature:
sign_options = gso.ImageDigitalSignOptions()
sign_options.password = password
sign_result = signature.sign(output_file, sign_options)
if sign_result.succeeded and len(sign_result.succeeded) > 0:
print("Image signed successfully!")
print(f"Signatures added: {len(sign_result.succeeded)}")
Memverifikasi gambar yang ditandatangani
import groupdocs.signature as gs
import groupdocs.signature.options as gso
signed_file = "signed_image.png"
password = "MySecurePassword123"
with gs.Signature(signed_file) as signature:
verify_options = gso.ImageDigitalVerifyOptions()
verify_options.password = password
verify_options.detection_threshold_percent = 75 # optional 0‑100%
verify_result = signature.verify(verify_options)
if verify_result.is_valid:
print("Digital signature is valid!")
print(f"Verified signatures: {len(verify_result.succeeded)}")
else:
print("Digital signature is invalid or not found.")
Validasi lanjutan (ekstraksi data lengkap)
with gs.Signature("signed_image.png") as signature:
verify_options = gso.ImageDigitalVerifyOptions()
verify_options.password = "MySecurePassword123"
verify_options.use_full_data_extraction = True
verify_options.detection_threshold_percent = 85
verify_result = signature.verify(verify_options)
if verify_result.is_valid and verify_options.detected_probability is not None:
print(f"Signature detected with {verify_options.detected_probability}% probability")
2. Rendering adaptif untuk pratinjau Barcode & QR Code
Pengembang kini dapat menentukan width dan height yang tepat untuk pembuatan pratinjau, menghilangkan inkonsistensi “ukuran otomatis” sebelumnya.
import groupdocs.signature as gs
import groupdocs.signature.options as gso
import uuid
# QR code options
qr_sign_options = gso.QrCodeSignOptions("GROUP DOCS", gs.QrCodeTypes.QR)
qr_sign_options.width = 250
qr_sign_options.height = 270
qr_sign_options.fore_color = gs.Color.red
qr_sign_options.code_text_alignment = gs.CodeTextAlignment.BELOW
qr_sign_options.text = "GROUP DOCS"
# Preview generation
preview_options = gso.PreviewSignatureOptions(
qr_sign_options,
create_signature_stream, # user‑provided delegate
release_signature_stream # user‑provided delegate
)
preview_options.signature_id = str(uuid.uuid4())
preview_options.preview_format = gso.PreviewSignatureOptions.PreviewFormats.PNG
gs.Signature.generate_signature_preview(preview_options)
3. Dukungan rotasi untuk pratinjau Barcode & QR
Setel rotation_angle (derajat) pada opsi barcode/QR untuk menghasilkan pratinjau berputar.
import groupdocs.signature as gs
import groupdocs.signature.options as gso
import uuid
barcode_sign_options = gso.BarcodeSignOptions("GROUP DOCS", gs.BarcodeTypes.MaxiCode)
barcode_sign_options.width = 400
barcode_sign_options.height = 400
barcode_sign_options.fore_color = gs.Color.red
barcode_sign_options.code_text_alignment = gs.CodeTextAlignment.BELOW
barcode_sign_options.text = "GROUP DOCS"
barcode_sign_options.rotation_angle = 45 # rotate 45°
preview_options = gso.PreviewSignatureOptions(
barcode_sign_options,
create_signature_stream,
release_signature_stream
)
preview_options.signature_id = str(uuid.uuid4())
preview_options.preview_format = gso.PreviewSignatureOptions.PreviewFormats.PNG
gs.Signature.generate_signature_preview(preview_options)
4. Dukungan format gambar baru – APNG & TGA
File APNG (PNG animasi) dan TGA (Targa) kini dapat digunakan sebagai tanda tangan gambar, disisipkan, dipratinjau, dan diverifikasi persis seperti PNG/JPG.
5. Transparansi latar belakang untuk pratinjau Barcode/QR
Setel properti transparency (0 – 1) pada opsi barcode/QR untuk menghasilkan pratinjau dengan kanvas transparan.
barcode_sign_options = gso.BarcodeSignOptions("GROUP DOCS", gs.BarcodeTypes.Codabar)
barcode_sign_options.width = 400
barcode_sign_options.height = 400
barcode_sign_options.fore_color = gs.Color.red
barcode_sign_options.code_text_alignment = gs.CodeTextAlignment.BELOW
barcode_sign_options.text = "GROUP DOCS"
barcode_sign_options.transparency = 0.5 # 50 % transparent background
preview_options = gso.PreviewSignatureOptions(
barcode_sign_options,
create_signature_stream,
release_signature_stream
)
preview_options.signature_id = str(uuid.uuid4())
preview_options.preview_format = gso.PreviewSignatureOptions.PreviewFormats.PNG
gs.Signature.generate_signature_preview(preview_options)
6. Dukungan gambar overlay untuk tanda tangan digital
PdfDigitalSignatureAppearance kini menghormati gambar overlay dan warna latar belakang tanpa menutupi gambar. Kontrol lapisan melalui SignatureCustomAppearance.IsForegroundImage.
import groupdocs.signature as gs
import groupdocs.signature.options as gso
signature_image_path = "signature.png"
certificate_path = "JohnSmithCertificate.pfx"
input_pdf = "SampleDocument.pdf"
output_pdf = "SignedDocument.pdf"
with gs.Signature(input_pdf) as signature:
sign_options = gso.DigitalSignOptions(certificate_path)
sign_options.password = "1234567890"
sign_options.reason = "Document approval"
sign_options.contact = "John Smith"
sign_options.location = "Head Office"
# Visible signature placement
sign_options.visible = True
sign_options.left = 350
sign_options.top = 100
sign_options.width = 200
sign_options.height = 70
sign_options.image_file_path = signature_image_path
appearance = gso.PdfDigitalSignatureAppearance()
appearance.foreground = gs.Color.from_argb(50, gs.Color.brown)
appearance.font_family_name = "Times New Roman"
appearance.font_size = 12
appearance.background = gs.Color.from_argb(50, gs.Color.light_gray)
appearance.is_foreground_image = True # image on top of text
sign_options.appearance = appearance
sign_result = signature.sign(output_pdf, sign_options)
print(f"\nDocument signed successfully with {len(sign_result.succeeded)} signature(s).")
print(f"Signed file saved at: {output_pdf}")
7. Penguatan keamanan – penghapusan algoritma tidak aman
RC2, DES, TripleDES, dan mode AES lemah telah dihapus dari tumpukan kriptografi. Hanya algoritma modern yang disetujui NIST yang tersedia, meningkatkan postur keamanan default dokumen yang ditandatangani.
8. Optimasi kueri bergaya LINQ
Fungsi search dan verify tanda tangan kini menerima fungsi predikat yang menyaring tanda tangan sebelum langkah pemrosesan berat. Ini mengurangi penggunaan memori dan mempercepat operasi batch.
Pencarian dengan predikat
import groupdocs.signature as gs
import groupdocs.signature.options as gso
import groupdocs.signature.domain as gsd
with gs.Signature("document.pdf") as signature:
search_options = [gso.TextSearchOptions()]
# Keep only text signatures that contain the word "Approved"
result = signature.search(search_options,
lambda sig: isinstance(sig, gsd.TextSignature) and "Approved" in sig.text)
for sig in result.signatures:
print(f"Found: {sig.text}")
Verifikasi dengan predikat
with gs.Signature("signed_document.pdf") as signature:
verify_options = gso.TextVerifyOptions("John Smith")
# Verify only signatures on page 1
result = signature.verify(verify_options,
lambda sig: sig.page_number == 1)
print(f"Found {len(result)} verified signatures on page 1")
9. Memperbaiki crash pratinjau DOC di Linux
GeneratePreview() tidak lagi melempar TypeInitializerException saat memproses file Microsoft Word (.doc) di Linux, memulihkan fungsi pratinjau lintas‑platform.
Instruksi upgrade
pip install --upgrade groupdocs-signature-net
Catatan: Nama paket
groupdocs-signature-netdigunakan untuk pembungkus Python‑via‑.NET.
Sumber daya
- Catatan rilis lengkap: (link ke halaman catatan rilis resmi, jika tersedia)
- Dokumentasi: https://docs.groupdocs.com/signature/python/
- Komunitas & Dukungan: https://forum.groupdocs.com/c/signature/10
Pantau terus rilis mendatang dan perhatikan blog resmi untuk tip kinerja serta panduan praktik terbaik.