บทนำ

document.py, โมดูลที่กำหนด Aspose.PDF FOSS สำหรับคลาส Document ของ Python, อธิบายว่าเป็นคลาสที่ “wraps the native PDF engine.” โดยตรง, เครื่องยนต์นั้นคือ aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from สร้างอินสแตนซ์ของ SimplePdf, และทุกการดำเนินการระดับเอกสาร — การบันทึก, การเพิ่มประสิทธิภาพ, การซ่อมแซม, การเข้ารหัส — จะมอบหมายให้มัน. สิ่งเดียวกันนี้ใช้กับการเรนเดอร์: Page.render และ Document.render_page ทั้งสองเรียกไปยัง aspose_pdf.engine.rasterizer.

ส่วนใหญ่ของโค้ดแอปพลิเคชันไม่จำเป็นต้องมองข้าม Document และ Page. แต่ aspose_pdf.engine เป็นแพ็กเกจ Python ปกติที่สามารถนำเข้าได้, และส่วนประกอบหลายอย่างใต้ฟาซาเดจนั้นมีประโยชน์ในตัวเอง: ตัวเรสเตอร์ไลเซอร์ที่แปลงหน้าหนังสือเป็นพิกเซล, ตัวแปลงโค้ดเดคสำหรับตัวกรองสตรีมที่บีบอัดและคลายบีบอัดสตรีมเนื้อหา PDF, และยูทิลิตี้การเข้ารหัสที่ดำเนินการอัลกอริทึม AES-CBC และ RC4 ซึ่งตัวจัดการความปลอดภัย PDF พึ่งพา. ต่างจากแพ็กเกจหลัก, โมดูลย่อยของ aspose_pdf.engine ไม่ได้ถูกส่งออกใหม่จากระดับบนสุดของ aspose_pdf — ข้อยกเว้นเดียวคือ RasterizedPage, ที่เชื่อมผ่าน aspose_pdf.visualization — ดังนั้นทุกอย่างด้านล่างจะถูกนำเข้าโดยใช้เส้นทางแบบจุดเต็ม, ตัวอย่างเช่น from aspose_pdf.engine.filters import StreamDecoder.

Aspose.PDF FOSS สำหรับ Python เป็นแพ็กเกจ Python, aspose-pdf-foss-for-python, ปล่อยภายใต้ลิขสิทธิ์ MIT, ต้องการ Python 3.11 หรือใหม่กว่า. ชื่อโมดูลระดับบนสุดคือ aspose_pdf. แพ็กเกจแกนขึ้นอยู่เฉพาะกับ cryptography และ asn1crypto; ส่วนเสริมเพิ่มเติมจะเพิ่มการถอดรหัสภาพโดยใช้ Pillow, การสนับสนุนฟอนต์ WOFF2 ที่ใช้ Brotli, และการจัดวางข้อความซับซ้อนที่ใช้ HarfBuzz.


คุณลักษณะสำคัญ

การเรนเดอร์หน้าโดยใช้เครื่องยนต์การเรสเตอร์ไลซ์

Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) และคู่มือ Page.render ของมันทั้งสองจะคืนค่า RasterizedPage — raster RGB แบบบรรจุที่สร้างโดยตัวเรสเตอร์ไลเซอร์ของเครื่องยนต์. RasterizedPage เปิดเผย width, height, และไบต์ดิบของ pixels, พร้อมกับ get_pixel() สำหรับการค้นหาพิกเซลเดียว, to_png() / to_tiff() สำหรับไบต์ที่เข้ารหัสอยู่ในหน่วยความจำ, และ save() เพื่อเขียนไฟล์ .png หรือไฟล์ .tif/.tiff โดยตรง. การทำงานกับอ็อบเจ็กต์ในหน่วยความจำ — แทนที่จะบันทึกลงดิสก์เท่านั้น — มีประโยชน์เมื่อผู้เรียกต้องการตรวจสอบหรือแปลงพิกเซลก่อนตัดสินใจว่าจะเก็บไว้หรือไม่.

from aspose_pdf import Document

with Document() as document:
    page = document.pages.add()
    page.add_text("Rendered by the engine", x=72, y=700, font_size=18)

    raster = document.render_page(0, dpi=150)
    print(raster.width, raster.height)

    corner = raster.get_pixel(0, 0)
    print("top-left pixel:", corner)

    with open("page-0.png", "wb") as handle:
        handle.write(raster.to_png())
    raster.save("page-0.tiff")

เครื่องยนต์ตัวกรองสตรีม

เนื้อหา PDF และสตรีมอ็อบเจกต์จะถูกบีบอัดด้วยตัวกรองที่มีชื่อ เช่น FlateDecode และ LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) และ StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) ทำหน้าที่เป็นด้านการเข้ารหัสและถอดรหัสของสายตัวกรองนั้น — ตัวเข้ารหัสเดียวกันที่เครื่องยนต์ใช้ภายในเมื่อเขียนและอ่านสตรีมของเอกสาร. ทั้งสองรับชื่อฟิลเตอร์เดียวหรือรายการสำหรับฟิลเตอร์เชน, และ StreamDecoder.decode() จะโยน PdfValidationException เมื่อพบชื่อฟิลเตอร์ที่ไม่รู้จักแทนที่จะคืนค่าที่ผิดโดยเงียบ.

from aspose_pdf.engine.filters import StreamDecoder, StreamEncoder

raw = b"Sample content-stream payload.\n" * 40
compressed = StreamEncoder.encode(raw, "FlateDecode")
restored = StreamDecoder.decode(compressed, "FlateDecode", None)

assert restored == raw
print(f"{len(raw)} bytes -> {len(compressed)} bytes with FlateDecode")

เครื่องยนต์การเข้ารหัส

aspose_pdf.engine.encryption.EncryptionUtils เป็นคลาสยูทิลิตี้แบบ static-method ที่ SimplePdf เรียกใช้สำหรับทุกการดำเนินการที่เกี่ยวกับการเข้ารหัส: Document.encrypt, decrypt(), และ change_passwords() ทั้งหมดล้วนแปลงเป็นการเรียก EncryptionUtils ภายใน. วิธีการของมันทำการเข้ารหัส AES-CBC และ RC4 โดยตรง (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), การสกัดกุญแจสำหรับการจัดการความปลอดภัยมาตรฐาน PDF รุ่นต่างๆ (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6), และ generate_file_id() สำหรับ ID แบบสุ่มขนาด 16 ไบต์ที่เอกสารใหม่ต้องการ.

from aspose_pdf.engine.encryption import EncryptionUtils

key = b"0123456789ABCDEF"  # 16 bytes -> AES-128
ciphertext = EncryptionUtils.encrypt_aes_cbc(key, b"Reviewer notes: approved")
plaintext = EncryptionUtils.decrypt_aes_cbc(key, ciphertext)
assert plaintext == b"Reviewer notes: approved"

file_id = EncryptionUtils.generate_file_id()
print(file_id.hex())

เริ่มต้นอย่างรวดเร็ว

ติดตั้งแพคเกจ แล้วเรนเดอร์หน้าโดยตรงจากชั้นเครื่องยนต์ในสคริปต์เดียว.

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("Engine-rendered page", x=72, y=740, font_size=20)

    raster = document.render_page(0, dpi=150)
    raster.save("engine-render.png")

    document.save("engine-quickstart.pdf")

print("Saved engine-quickstart.pdf and engine-render.png")

รูปแบบที่รองรับ

รูปแบบส่วนขยายอ่านเขียน
PDFpdfใช่ใช่
TIFFtiff-Yes

การอ่านและเขียน PDF เป็น Aspose.PDF FOSS สำหรับฟังก์ชันหลักของ Python — คู่เครื่อง Document/SimplePdf จะโหลดและเขียนเอกสาร PDF ในทุกเส้นทางของโค้ดในโพสต์นี้. Document.render_page, Page.render, และ RasterizedPage.to_png() / to_tiff() ยังสร้างผลลัพธ์ภาพเรสเตอร์ PNG และ TIFF; ซึ่งเป็นผลลัพธ์การเรสเตอร์หน้าแทนรูปแบบการโหลดเอกสาร.


โอเพนซอร์ส & ไลเซนซิง

Aspose.PDF FOSS สำหรับ Python ถูกปล่อยภายใต้สัญญาอนุญาต MIT: ไม่มีข้อจำกัดการใช้งาน, ไม่มีค่าธรรมเนียมการรันไทม์, และไม่มีความต้องการการลงทะเบียนสำหรับการใช้เชิงพาณิชย์หรือส่วนบุคคล. โค้ดต้นฉบับโฮสต์ที่ github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, และแพ็กเกจถูกเผยแพร่บน PyPI ในชื่อ aspose-pdf-foss-for-python.


เริ่มต้นใช้งาน

แหล่งข้อมูลที่เกี่ยวข้อง