วิธีส่งออกไฟล์ OneNote เป็น PDF ด้วย Python
Aspose.Note FOSS for Python ทำให้สามารถส่งออก PDF ของไฟล์ส่วน .one ของ Microsoft OneNote อย่างโปรแกรมได้โดยไม่ต้องใช้ Microsoft Office หรือโปรแกรมแปลงเอกสารระดับระบบปฏิบัติการ การส่งออกจะดำเนินการโดยวิธี Document.Save() ที่สนับสนุนโดยตัวเรนเดอร์ PDF ทางเลือก ReportLab
ประโยชน์
- Server-friendly: ทำงานบนระบบปฏิบัติการใดก็ได้ รวมถึงเซิร์ฟเวอร์ Linux แบบไม่มีหน้าจอและคอนเทนเนอร์ CI/CD
- Stream-capable: บันทึกโดยตรงไปยังบัฟเฟอร์
io.BytesIO, ไม่ต้องใช้ไฟล์ชั่วคราว - Free and open-source: ไลเซนส์ MIT
ข้อกำหนดเบื้องต้น
การส่งออก PDF ต้องการการพึ่งพา ReportLab ที่เป็นตัวเลือก. ติดตั้งผ่าน extra [pdf]:
pip install "aspose-note[pdf]"หากคุณได้ติดตั้ง aspose-note ไว้แล้วโดยไม่มีส่วนเสริม:
pip install --upgrade "aspose-note[pdf]"ตรวจสอบว่า ReportLab พร้อมใช้งาน:
python -c "import reportlab; print(reportlab.Version)"คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้ง aspose-note พร้อมการสนับสนุน PDF
pip install "aspose-note[pdf]"ยืนยันการติดตั้ง:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")ขั้นตอนที่ 2: โหลดไฟล์ OneNote
from aspose.note import Document
doc = Document("MyNotes.one")ขั้นตอนที่ 3: ส่งออกเอกสารทั้งหมดเป็น PDF
การส่งออกที่ง่ายที่สุด ครอบคลุมทุกหน้าโดยใช้การตั้งค่าเริ่มต้น:
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")ขั้นตอนที่ 4: ใช้ PdfSaveOptions
PdfSaveOptions ให้คุณกำหนดค่าการส่งออก PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)ตัวเลือก PdfSaveOptions ที่พร้อมใช้งาน
| ตัวเลือก | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
PageIndex | int | 0 | ฟิลด์มีอยู่; ไม่ส่งต่อไปยังตัวส่งออก PDF ในเวอร์ชัน 26.3.1: ไม่มีผล |
PageCount | int | None | None | ฟิลด์มีอยู่; ไม่ส่งต่อไปยังตัวส่งออก PDF ในเวอร์ชัน 26.3.1: ไม่มีผล |
ขั้นตอนที่ 5: ส่งออกไปยังสตรีมในหน่วยความจำ
Document.Save() ยอมรับสตรีมไบนารีโดยตรง: ไม่ต้องใช้ไฟล์ชั่วคราว:
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()
print(f"PDF size: {len(pdf_bytes)} bytes")ขั้นตอนที่ 6: ส่งออกหลายไฟล์เป็นชุด
ประมวลผลไฟล์ .one ทั้งหมดในไดเรกทอรี:
from pathlib import Path
from aspose.note import Document, SaveFormat
input_dir = Path("./onenote_files")
output_dir = Path("./pdf_output")
output_dir.mkdir(exist_ok=True)
for one_file in input_dir.glob("*.one"):
doc = Document(str(one_file))
out_path = output_dir / one_file.with_suffix(".pdf").name
doc.Save(str(out_path), SaveFormat.Pdf)
print(f"Exported: {one_file.name} -> {out_path.name}")ปัญหาทั่วไปและการแก้ไข
1. ImportError: ไม่มีโมดูลชื่อ ‘reportlab’
สาเหตุ: ส่วนเสริม [pdf] ไม่ได้ถูกติดตั้ง.
แก้ไข:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Cause: รูปแบบที่ใช้ไม่ใช่ SaveFormat.Pdf. มีเพียง SaveFormat.Pdf เท่านั้นที่ได้ถูกนำมาใช้.
Fix: ใช้ SaveFormat.Pdf สำหรับการส่งออกเสมอ. รูปแบบอื่น ๆ ถูกประกาศเพื่อความเข้ากันได้ของ API แต่จะทำให้เกิด UnsupportedSaveFormatException.
3. IncorrectPasswordException
สาเหตุ: ไฟล์ .one ถูกเข้ารหัส. เอกสารที่เข้ารหัสไม่รองรับ.
Fix: ใช้ไฟล์ที่ไม่ได้เข้ารหัส .one. ผลิตภัณฑ์เชิงพาณิชย์ Aspose.Note รองรับการเข้ารหัส.
4. FileNotFoundError
สาเหตุ: เส้นทางไฟล์อินพุต .one ไม่ถูกต้อง.
แก้ไข: ใช้ pathlib.Path.exists() เพื่อตรวจสอบก่อนโหลด:
from pathlib import Path
from aspose.note import Document, SaveFormat
path = Path("MyNotes.one")
assert path.exists(), f"File not found: {path.resolve()}"
doc = Document(str(path))
doc.Save("output.pdf", SaveFormat.Pdf)5. PDF ที่ส่งออกเป็นไฟล์เปล่าหรือว่างเปล่า
สาเหตุ: ไฟล์ .one มีหน้าแต่ไม่มีเนื้อหาข้อความ (มีเฉพาะรูปภาพหรือ ตารางที่ไม่มีข้อความ) ตัวเรนเดอร์ PDF สร้างหน้าตามสิ่งที่ ReportLab สามารถเรนเดอร์จาก DOM ได้.
Fix: ตรวจสอบเนื้อหาหน้าก่อนส่งออก:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")คำถามที่พบบ่อย
รูปแบบการบันทึกที่รองรับมีอะไรบ้าง?
ขณะนี้มีการใช้งานเฉพาะ SaveFormat.Pdf เท่านั้น. enum SaveFormat มีสมาชิกเพียงหนึ่งเดียว: SaveFormat.Pdf.
ฉันสามารถส่งออกเป็นสตรีมแทนไฟล์ได้หรือไม่?
ใช่. Document.Save() ยอมรับสตรีมไบนารีที่เขียนได้ใด ๆ เป็นอาร์กิวเมนต์แรกของมัน:
import io
from aspose.note import Document, PdfSaveOptions, SaveFormat
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()การส่งออกรักษาลำดับหน้าไว้หรือไม่?
ใช่. หน้าเหล่านั้นจะถูกส่งออกตามลำดับเดียวกับที่ปรากฏใน DOM (ลำดับที่ได้จากการวนซ้ำ Document).
การส่งออก PDF มีให้ใช้งานบน Linux หรือไม่?
ใช่. ReportLab และ Aspose.Note FOSS for Python ทั้งสองเป็นแบบไม่ขึ้นกับระบบปฏิบัติการ.
ฉันสามารถส่งออกส่วนย่อยของหน้าได้หรือไม่?
ฟิลด์ PdfSaveOptions.PageIndex และ PageCount มีอยู่แต่ไม่ได้ส่งต่อไปยังตัวส่งออก PDF ในเวอร์ชัน 26.3.1 และไม่มีผลกระทบ: เอกสารทั้งหมดจะถูกส่งออกเสมอ
แหล่งข้อมูลที่เกี่ยวข้อง: