บทนำ
Aspose.PDF FOSS สำหรับ Python เป็นไลบรารีโอเพ่นซอร์สใหม่สำหรับทำงานกับเอกสาร PDF จากโค้ด Python มันเผยแพร่ภายใต้ไลเซนส์ MIT และถูกพัฒนาเต็มรูปแบบด้วย Python — พาร์เซอร์, ตัวเขียน, ตัวแปลงหน้าเป็นราสเตอร์, และขั้นตอนการเข้ารหัสเป็นส่วนหนึ่งของแพ็กเกจเอง, โดยพึ่งพาเพียง cryptography และ asn1crypto เท่านั้น ส่วนเสริมเพิ่มเติมให้การสนับสนุนภาพโดยใช้ Pillow, การถอดรหัสฟอนต์ WOFF2 ด้วย Brotli, และการจัดรูปแบบข้อความที่ซับซ้อนโดยใช้ HarfBuzz.
ไลบรารีจัดโครงสร้างโดยรอบคลาส Document, ซึ่งโหลดไฟล์ PDF จากพาธ, ไบต์, หรือสตรีมไบนารีและเปิดเผยหน้าต่าง ๆ ผ่าน document.pages, ซึ่งเป็น PageCollection ที่รองรับการวนซ้ำ, การเข้าถึงโดยดัชนี, และการสไลซ์ จากนั้น API ครอบคลุมการเพิ่มข้อความและรูปภาพลงในหน้า, การอ่านและแก้ไขคำอธิบาย, การสร้างและเติมฟิลด์ AcroForm, การเข้ารหัสและถอดรหัสเอกสาร, และการสกัดข้อความและไฟล์แนบ — การดำเนินการที่จำเป็นสำหรับการสร้าง PDF ใหม่หรือทำงานกับ PDF ที่มีอยู่.
รุ่นนี้มุ่งเน้นไปที่นักพัฒนาที่ต้องการการประมวลผล PDF ภายในโค้ดเบส Python โดยไม่ต้องใช้ไลเซนส์เชิงพาณิชย์: การสร้างรายงานและใบแจ้งหนี้, ระบบนำเข้าข้อมูลเอกสาร, ระบบอัตโนมัติการกรอกฟอร์ม, และบริการที่ต้องเรนเดอร์หน้าตา PDF เป็นภาพหรือสกัดข้อความสำหรับการทำดัชนีต่อไป โครงการอยู่ในขั้นตอนอัลฟ่าในขณะนี้ ดังนั้น API และความครอบคลุมของฟีเจอร์อาจเปลี่ยนแปลงก่อนการปล่อยรุ่นเสถียรแรก Python 3.11 หรือใหม่กว่าเป็นสิ่งจำเป็น.
สิ่งที่รวมอยู่
การสร้างและการโหลดเอกสาร
PdfDocument() สร้าง PDF ว่าง; PdfDocument(source, password=..., limits=...) โหลด PDF ที่มีอยู่จากพาธ, ไบต์ดิบ, หรือสตรีมไบนารี, และทำงานเทียบเท่ากับการเรียก PdfDocument().load_from(source, ...). ทั้งสองจะโยนข้อผิดพลาดเมื่อไฟล์หาย, ข้อมูลไม่ใช่ PDF, หรือรหัสผ่านหาย แทนที่จะส่งคืนเอกสารว่าง. PdfDocument เป็นตัวจัดการบริบท, ดังนั้นทรัพยากรจะถูกปล่อยโดยอัตโนมัติเมื่อบล็อก with สิ้นสุด.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Generated by Aspose.PDF FOSS", x=72, y=720, font_size=14)
document.save("report.pdf")
with Document("report.pdf") as document:
print(f"Pages: {document.page_count}")
print(f"PDF version: {document.version}")
การเพิ่มข้อความและรูปภาพ
Page.add_text วางข้อความ Unicode แบบ Standard‑14 หรือฝังไว้ที่ตำแหน่ง x/y ด้วย font_size ที่กำหนด; อาร์กิวเมนต์ font สามารถเป็น FontDescriptor, ไบต์ฟอนต์ดิบ, หรือเส้นทางไปยังฟอนต์ TrueType/OpenType สำหรับ Unicode ที่อยู่นอกการเข้ารหัส Standard‑14. Page.add_image วาง XObject ของรูปภาพดิบ, JPEG หรือ PNG บนหน้าในตำแหน่งและขนาดที่ระบุ.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text(
"Quarterly Summary",
x=72,
y=740,
font_size=16,
)
page.add_image(
"chart.png",
x=72,
y=420,
width=300,
height=200,
)
document.save("summary.pdf")
คำอธิบายประกอบ
แต่ละ Page เปิดเผยคำอธิบายของมันผ่าน page.annotations, ซึ่งเป็น AnnotationCollection. add(subtype, rect, contents, title, appearance_normal, properties) สร้างและแทรกคำอธิบายของประเภทย่อยมาตรฐานเช่น Square, Circle, Line, Highlight หรือ FreeText, คืนค่า Annotation. การเรียก generate_appearance() บนคำอธิบายที่คืนมาจะสังเคราะห์สตรีมการแสดงผลจากเรขาคณิตและคุณสมบัติของมัน.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
annotation = page.annotations.add(
"Square",
(100, 600, 300, 680),
"Needs review",
properties={"C": [1, 0, 0]},
)
annotation.generate_appearance()
document.save("annotated.pdf")
ฟิลด์แบบฟอร์ม
document.form คืนค่า Form ของเอกสาร, ซึ่งสร้างฟิลด์ AcroForm โดยตรง: add_text_field(), add_checkbox(), add_radio_group(), add_list_box(), add_combo_box() และ add_push_button() แต่ละตัวรับชื่อฟิลด์, Page หรือดัชนีหน้าที่, และสี่เหลี่ยมตำแหน่ง, แล้วคืนค่า Field. การตั้งค่า field.value จะอัปเดตค่าของฟิลด์, และ form.flatten() จะทำให้รูปแบบการแสดงผลของทุกฟิลด์กลายเป็นเนื้อหาแบบคงที่บนหน้า.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
form = document.form
field = form.add_text_field(
"customer_name",
page,
(72, 700, 300, 720),
)
field.value = "Jane Doe"
form.flatten()
document.save("form.pdf")
การเข้ารหัส
Document.encrypt(user_password, owner_password, permissions) ปกป้องเอกสารด้วยรหัสผ่านผู้ใช้, รหัสผ่านเจ้าของ, และบิตมาสก์สิทธิ์, คืนค่า Document เดียวกันเพื่อการเชื่อมต่อต่อเนื่อง. Document.decrypt(password) ยกเลิกการดำเนินการ, และคุณสมบัติ is_encrypted รายงานสถานะปัจจุบัน. การโหลดเอกสารที่เข้ารหัสอีกครั้งต้องส่ง password= ไปยังคอนสตรัคเตอร์หรือไปยัง load_from().
from aspose_pdf import Document
with Document("report.pdf") as document:
document.encrypt(user_password="user-pass", owner_password="owner-pass", permissions=0)
document.save("encrypted.pdf")
with Document("encrypted.pdf", password="user-pass") as document:
print(f"Encrypted: {document.is_encrypted}")
การสกัดข้อความ
PdfExtractor ผูกกับแหล่งข้อมูลด้วย bind_pdf(), จากนั้น extract_text() จะเดินผ่านหน้าของเอกสาร. get_text() คืนค่าข้อความที่สกัดทั้งหมดในครั้งเดียว, ในขณะที่ has_next_page_text() และ get_next_page_text() ทำการวนผลลัพธ์หน้าโดยหน้า. PdfExtractor ยังเป็นตัวจัดการบริบทด้วย.
from aspose_pdf import PdfExtractor
with PdfExtractor() as extractor:
extractor.bind_pdf("report.pdf")
extractor.extract_text()
while extractor.has_next_page_text():
print(extractor.get_next_page_text())
เริ่มต้นอย่างรวดเร็ว
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text(
"Hello from Aspose.PDF FOSS!",
x=72,
y=720,
font_size=18,
)
document.save("hello.pdf")
with Document("hello.pdf") as document:
print(f"Pages: {document.page_count}")
print(f"PDF version: {document.version}")
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน |
|---|---|---|---|
| ✓ | ✓ | ||
| PNG | .png | — | ✓ |
| TIFF | .tiff | — | ✓ |
PDF เป็นรูปแบบอินพุตและเอาต์พุตหลักของไลบรารี, อ่านผ่าน Document/load_from() และเขียนผ่าน Document.save. PNG และ TIFF เป็นผลลัพธ์การเรนเดอร์หน้าโดยที่สร้างโดย Page.render, Page.save_as_image, และ Document.save_page_as_image.
โอเพนซอร์สและการให้สิทธิ์
Aspose.PDF FOSS สำหรับ Python ถูกแจกจ่ายภายใต้สัญญาอนุญาต MIT, พร้อมซอร์สเต็มที่สามารถเข้าถึงได้ที่ github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python. สัญญาอนุญาตนี้อนุญาตให้ใช้เชิงพาณิชย์, การแก้ไข, และการแจกจ่ายต่อได้โดยไม่ต้องมีข้อตกลงแยกต่างหาก.