ตรวจจับรูปแบบไฟล์และตรวจสอบความเข้ากันได้ของรูปแบบ
บางครั้งจำเป็นต้องกำหนดรูปแบบของเอกสารก่อนเปิด เนื่องจากนามสกุลไฟล์ไม่ได้รับประกันว่าเนื้อหาของไฟล์จะมีความเหมาะสม ตัวอย่างเช่น เป็นที่ทราบกันว่า Crystal Reports มักจะส่งออกเอกสารในรูปแบบ RTF แต่ให้นามสกุล .doc แก่พวกเขา
Aspose.Words ให้ความสามารถในการรับข้อมูลเกี่ยวกับประเภทไฟล์เพื่อหลีกเลี่ยงข้อยกเว้น หากคุณไม่แน่ใจว่าเนื้อหาที่แท้จริงของไฟล์นั้นคืออะไร
ตรวจจับรูปแบบไฟล์โดยไม่มีข้อยกเว้น
เมื่อคุณจัดการกับเอกสารหลายฉบับในรูปแบบไฟล์ต่างๆ คุณอาจต้องแยกไฟล์ที่ Aspose.Words ประมวลผลได้ออกจากไฟล์ที่ไม่สามารถทำได้ คุณอาจต้องการทราบว่าเหตุใดเอกสารบางรายการจึงไม่สามารถประมวลผลได้
หากคุณพยายามโหลดไฟล์ลงในออบเจ็กต์ Document และ Aspose.Words ไม่รู้จักรูปแบบไฟล์หรือไม่รองรับรูปแบบนั้น Aspose.Words จะส่งข้อยกเว้น คุณสามารถตรวจจับข้อยกเว้นเหล่านั้นและวิเคราะห์ได้ แต่ Aspose.Words ยังมีวิธี detect_file_format ที่ช่วยให้เราสามารถระบุรูปแบบไฟล์ได้อย่างรวดเร็วโดยไม่ต้องโหลดเอกสารที่มีข้อยกเว้นที่เป็นไปได้ เมธอดนี้ส่งคืนออบเจ็กต์ FileFormatInfo ที่มีข้อมูลที่ตรวจพบเกี่ยวกับประเภทไฟล์
ตรวจสอบความเข้ากันได้ของรูปแบบไฟล์
เราสามารถตรวจสอบความเข้ากันได้ของรูปแบบไฟล์ทั้งหมดในโฟลเดอร์ที่เลือกและจัดเรียงตามรูปแบบในโฟลเดอร์ย่อยที่เกี่ยวข้อง
เนื่องจากเรากำลังจัดการกับเนื้อหาในโฟลเดอร์ สิ่งแรกที่เราต้องทำคือรวบรวมไฟล์ทั้งหมดในโฟลเดอร์นี้โดยใช้วิธี รายการเดอร์ ของโมดูล ระบบปฏิบัติการ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีรับรายการไฟล์ทั้งหมดในโฟลเดอร์:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
fileList = (file for file in os.listdir(docs_base.my_dir) | |
if (os.path.isfile(os.path.join(docs_base.my_dir, file)) and not file.endswith("Corrupted document.docx"))) | |
เมื่อรวบรวมไฟล์ทั้งหมดแล้ว งานส่วนที่เหลือจะเสร็จสิ้นโดยวิธี detect_file_format ซึ่งจะตรวจสอบรูปแบบไฟล์
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีวนซ้ำรายการไฟล์ที่รวบรวม ตรวจสอบรูปแบบของแต่ละไฟล์ และย้ายแต่ละไฟล์ไปยังโฟลเดอร์ที่เหมาะสม:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
supported_dir = docs_base.artifacts_dir + "Supported" | |
unknown_dir = docs_base.artifacts_dir + "Unknown" | |
encrypted_dir = docs_base.artifacts_dir + "Encrypted" | |
pre97_dir = docs_base.artifacts_dir + "Pre97" | |
# Create the directories if they do not already exist. | |
if not os.path.exists(supported_dir): | |
os.makedirs(supported_dir) | |
if not os.path.exists(unknown_dir): | |
os.makedirs(unknown_dir) | |
if not os.path.exists(encrypted_dir): | |
os.makedirs(encrypted_dir) | |
if not os.path.exists(pre97_dir): | |
os.makedirs(pre97_dir) | |
fileList = (file for file in os.listdir(docs_base.my_dir) | |
if (os.path.isfile(os.path.join(docs_base.my_dir, file)) and not file.endswith("Corrupted document.docx"))) | |
for fileName in fileList: | |
name_only = fileName | |
fileName = os.path.join(docs_base.my_dir, name_only) | |
print(name_only) | |
info = aw.FileFormatUtil.detect_file_format(fileName) | |
lf = info.load_format | |
# Display the document type | |
if lf == aw.LoadFormat.DOC: | |
print("\tMicrosoft Word 97-2003 document.") | |
elif lf == aw.LoadFormat.DOT: | |
print("\tMicrosoft Word 97-2003 template.") | |
elif lf == aw.LoadFormat.DOCX: | |
print("\tOffice Open XML WordprocessingML Macro-Free Document.") | |
elif lf == aw.LoadFormat.DOCM: | |
print("\tOffice Open XML WordprocessingML Macro-Enabled Document.") | |
elif lf == aw.LoadFormat.DOTX: | |
print("\tOffice Open XML WordprocessingML Macro-Free Template.") | |
elif lf == aw.LoadFormat.DOTM: | |
print("\tOffice Open XML WordprocessingML Macro-Enabled Template.") | |
elif lf == aw.LoadFormat.FLAT_OPC: | |
print("\tFlat OPC document.") | |
elif lf == aw.LoadFormat.RTF: | |
print("\tRTF format.") | |
elif lf == aw.LoadFormat.WORD_ML: | |
print("\tMicrosoft Word 2003 WordprocessingML format.") | |
elif lf == aw.LoadFormat.HTML: | |
print("\tHTML format.") | |
elif lf == aw.LoadFormat.MHTML: | |
print("\tMHTML (Web archive) format.") | |
elif lf == aw.LoadFormat.ODT: | |
print("\tOpenDocument Text.") | |
elif lf == aw.LoadFormat.OTT: | |
print("\tOpenDocument Text Template.") | |
elif lf == aw.LoadFormat.DOC_PRE_WORD60: | |
print("\tMS Word 6 or Word 95 format.") | |
elif lf == aw.LoadFormat.UNKNOWN: | |
print("\tUnknown format.") | |
if info.is_encrypted: | |
print("\tAn encrypted document.") | |
shutil.copyfile(fileName, os.path.join(encrypted_dir, name_only)) | |
else: | |
if lf == aw.LoadFormat.DOC_PRE_WORD60: | |
shutil.copyfile(fileName, os.path.join(pre97_dir, name_only)) | |
elif lf == aw.LoadFormat.UNKNOWN: | |
shutil.copyfile(fileName, os.path.join(unknown_dir, name_only)) | |
else: | |
shutil.copyfile(fileName, os.path.join(supported_dir, name_only)) | |
ไฟล์จะถูกย้ายไปยังโฟลเดอร์ย่อยที่เหมาะสมโดยใช้วิธี คัดลอกไฟล์ ของโมดูล ชูทิล
ไฟล์ต่อไปนี้ใช้ในตัวอย่างด้านบน ชื่อไฟล์อยู่ทางซ้าย และคำอธิบายอยู่ทางขวา:
Group ของไฟล์ | เอกสารเข้า | พิมพ์ |
---|---|---|
รูปแบบไฟล์ที่รองรับ | ไฟล์ทดสอบ (Doc).doc | เอกสาร Microsoft Word 95/6.0 หรือ Microsoft Word 97 – 2003 |
ไฟล์ทดสอบ (Dot ).dot |
เทมเพลต Microsoft Word 95/6.0 หรือ Microsoft Word 97 – 2003 | |
ไฟล์ทดสอบ (Docx).docx | เอกสาร Office Open XML WordprocessingML ที่ไม่มีมาโคร | |
ไฟล์ทดสอบ (Docm).docm | เอกสาร Office Open XML WordprocessingML พร้อมมาโคร | |
ไฟล์ทดสอบ (Dotx).dotx | เทมเพลต Office Open XML WordprocessingML | |
ไฟล์ทดสอบ (Dotm).dotm | เทมเพลต Office Open XML WordprocessingML พร้อมมาโคร | |
ไฟล์ทดสอบ (XML).xml | เอกสาร FlatOPC OOXML | |
ไฟล์ทดสอบ (RTF).rtf | เอกสารรูปแบบ Rich Text | |
ไฟล์ทดสอบ (WordML).xml | เอกสาร Microsoft Word 2003 WordprocessingML | |
ไฟล์ทดสอบ (HTML).html | เอกสาร HTML | |
ไฟล์ทดสอบ (MHTML).mhtml | เอกสาร MHTML (เว็บเก็บถาวร) | |
ไฟล์ทดสอบ (Odt).odt | ข้อความ OpenDocument (นักเขียน OpenOffice) | |
ไฟล์ทดสอบ (Ott).ott | เทมเพลตเอกสาร OpenDocument | |
ไฟล์ทดสอบ (DocPreWord60).doc | เอกสาร Microsoft Word 2.0 | |
เอกสารที่เข้ารหัส | ไฟล์ทดสอบ (Enc).doc | เอกสาร Microsoft Word 95/6.0 หรือ Microsoft Word 97 – 2003 ที่เข้ารหัส |
ไฟล์ทดสอบ (Enc).docx | เอกสาร Office Open XML WordprocessingML ที่เข้ารหัส | |
รูปแบบไฟล์ที่ไม่รองรับ | ไฟล์ทดสอบ (JPG).jpg | ไฟล์ภาพ JPEG |