มีอะไรใหม่ใน GroupDocs.Signature for Python 26.1 (มกราคม 2026)
| ID | ประเภท | สรุป |
|---|---|---|
| SIGNATURENET‑5528 | ✨ ฟีเจอร์ | รองรับและตรวจสอบลายเซ็นดิจิทัลในรูปภาพ (ฝังข้อมูลแบบสเทกานาเงราฟิก LSB สำหรับ PNG และ JPG). |
| SIGNATURENET‑5445 | ✨ ฟีเจอร์ | การเรนเดอร์แบบปรับได้สำหรับตัวอย่างลายเซ็น Barcode และ QR Code – การควบคุมความกว้าง/ความสูงอย่างชัดเจน. |
| SIGNATURENET‑5479 | ✨ ฟีเจอร์ | รองรับการหมุนสำหรับภาพตัวอย่าง Barcode และ QR Code. |
| SIGNATURENET‑5478 | ✨ ฟีเจอร์ | เพิ่มการจัดการรูปแบบภาพ APNG และ TGA สำหรับลายเซ็นที่ใช้รูปภาพ. |
| SIGNATURENET‑5500 | ⚡ การปรับปรุง | การเพิ่มประสิทธิภาพแบบ LINQ สำหรับการค้นหาและตรวจสอบลายเซ็น (การกรองโดยใช้ predicate). |
| SIGNATURENET‑5480 | ⚡ การปรับปรุง | รองรับความโปร่งใสของพื้นหลังสำหรับตัวอย่าง Barcode/QR. |
| SIGNATURENET‑5477 | ⚡ การปรับปรุง | รองรับการวางภาพซ้อนบนลายเซ็นดิจิทัลพร้อมสีพื้นหลัง (ธง foreground‑image). |
| SIGNATURENET‑5422 | ⚡ การปรับปรุง | การลบอัลกอริทึมการเข้ารหัสที่ไม่ปลอดภัย (RC2, DES, TripleDES และโหมด AES ที่อ่อนแอ). |
| SIGNATURENET‑5555 | 🐞 แก้บัก | แก้ข้อยกเว้น type‑initializer ของ GeneratePreview() สำหรับไฟล์ DOC บน Linux. |
Below is a short technical walk‑through of the most impactful changes.
1. ลายเซ็นดิจิทัลในภาพ (สเตแกโนกราฟี)
- ลายเซ็นถูกซ่อนไว้ในบิตที่สำคัญที่สุดต่ำของพิกเซล PNG/JPG.
- มีการป้องกันด้วยรหัสผ่าน, รองรับสตรีม, และทำงานกับภาพขนาดใดก็ได้ที่ ≥ 8 × 8 px.
Signing an image
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)}")
การตรวจสอบภาพที่ลงลายเซ็น
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.")
การตรวจสอบขั้นสูง (การสกัดข้อมูลเต็มรูปแบบ)
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. การเรนเดอร์แบบปรับได้สำหรับตัวอย่าง Barcode & QR Code
นักพัฒนาสามารถกำหนดค่า width และ height ที่แน่นอนได้สำหรับการสร้างตัวอย่าง, ทำให้ไม่มีความไม่สอดคล้องของ “auto‑size” มาก่อน.
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. รองรับการหมุนสำหรับตัวอย่าง Barcode & QR
ตั้งค่า rotation_angle (หน่วยองศา) ในตัวเลือก barcode/QR เพื่อเรนเดอร์ตัวอย่างที่หมุน.
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. เพิ่มการสนับสนุนรูปแบบภาพใหม่ – APNG & TGA
ไฟล์ APNG (Animated PNG) และ TGA (Targa) ตอนนี้สามารถใช้เป็นลายเซ็นรูปภาพ, แทรก, แสดงตัวอย่าง, และตรวจสอบได้เช่นเดียวกับ PNG/JPG.
5. ความโปร่งใสของพื้นหลังสำหรับตัวอย่าง Barcode/QR
ตั้งค่า property transparency (0 – 1) ในตัวเลือก barcode/QR เพื่อสร้างตัวอย่างที่มีพื้นหลังโปร่งใส.
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. รองรับการวางภาพซ้อนบนลายเซ็นดิจิทัล
PdfDigitalSignatureAppearance ตอนนี้รองรับภาพซ้อน และ สีพื้นหลังโดยไม่บดบังภาพ. ควบคุมการจัดชั้นผ่าน 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. การเสริมความปลอดภัย – การลบอัลกอริทึมที่ไม่ปลอดภัย
RC2, DES, TripleDES และโหมด AES ที่อ่อนแอได้ถูก ลบ ออกจากสแต็กการเข้ารหัส. มีเพียงอัลกอริทึมสมัยใหม่ที่ผ่านการอนุมัติของ NIST เท่านั้นที่ให้ใช้, ทำให้ความปลอดภัยเริ่มต้นของเอกสารที่ลงลายเซ็นดีขึ้น.
8. การเพิ่มประสิทธิภาพการค้นแบบ LINQ
ฟังก์ชัน search และ verify ของลายเซ็นตอนนี้รับ ฟังก์ชัน predicate ที่กรองลายเซ็น ก่อน ขั้นตอนการประมวลผลหนัก. สิ่งนี้ช่วยลดการใช้หน่วยความจำและเร่งความเร็วของการทำงานเป็นชุด.
การค้นหาด้วย predicate
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}")
การตรวจสอบด้วย predicate
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. แก้ไขการพังของตัวอย่าง DOC บน Linux
GeneratePreview() ไม่ทำการโยน TypeInitializerException อีกต่อไปเมื่อประมวลผลไฟล์ Microsoft Word (.doc) บน Linux, ทำให้ฟังก์ชันการแสดงตัวอย่างแบบข้ามแพลตฟอร์มกลับมาทำงาน.
คำแนะนำการอัปเกรด
pip install --upgrade groupdocs-signature-net
Note: ชื่อแพคเกจ
groupdocs-signature-netใช้สำหรับการหุ้ม Python‑via‑.NET.
ทรัพยากร
- บันทึกรายละเอียดการปล่อยเต็ม: (ลิงก์ไปยังหน้าบันทึกการปล่อยอย่างเป็นทางการ, หากมี)
- เอกสารประกอบ: https://docs.groupdocs.com/signature/python/
- ชุมชนและการสนับสนุน: https://forum.groupdocs.com/c/signature/10
โปรดรอติดตามการปล่อยเวอร์ชันต่อไปและควรเฝ้าดูบล็อกอย่างเป็นทางการสำหรับเคล็ดลับการเพิ่มประสิทธิภาพและแนวทางปฏิบัติที่ดีที่สุด.