كشف تنسيق الملف والتحقق من توافق التنسيق

في بعض الأحيان يكون من الضروري تحديد تنسيق المستند قبل فتحه لأن امتداد الملف لا يضمن أن محتويات الملف مناسبة. على سبيل المثال، من المعروف أن تقارير Crystal غالبًا ما تقوم بإخراج المستندات بتنسيق RTF، ولكنها تمنحها الامتداد .doc.

يوفر Aspose.Words القدرة على الحصول على معلومات حول نوع الملف لتجنب الاستثناء إذا لم تكن متأكدًا من المحتوى الفعلي للملف.

كشف تنسيق الملف دون استثناء

عندما تتعامل مع مستندات متعددة بتنسيقات ملفات مختلفة، قد تحتاج إلى فصل الملفات التي يمكن معالجتها بواسطة Aspose.Words عن تلك التي لا يمكن معالجتها. قد ترغب أيضًا في معرفة سبب عدم إمكانية معالجة بعض المستندات.

إذا حاولت تحميل ملف إلى كائن Document ولم يتمكن Aspose.Words من التعرف على تنسيق الملف أو كان التنسيق غير مدعوم، فسيطرح Aspose.Words استثناءً. يمكنك التقاط هذه الاستثناءات وتحليلها، لكن Aspose.Words يوفر أيضًا طريقة detect_file_format التي تتيح لنا تحديد تنسيق الملف بسرعة دون تحميل مستند مع استثناءات محتملة. تقوم هذه الطريقة بإرجاع كائن FileFormatInfo الذي يحتوي على المعلومات المكتشفة حول نوع الملف.

التحقق من توافق تنسيق الملفات

يمكننا التحقق من توافق التنسيق لجميع الملفات الموجودة في المجلد المحدد وفرزها حسب التنسيق في المجلدات الفرعية المقابلة.

نظرًا لأننا نتعامل مع محتويات مجلد، فإن أول شيء يتعين علينا القيام به هو الحصول على مجموعة من جميع الملفات الموجودة في هذا المجلد باستخدام طريقة listdir لوحدة نظام التشغيل.

يوضح مثال التعليمات البرمجية التالي كيفية الحصول على قائمة بجميع الملفات الموجودة في المجلد:

# 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))

يتم نقل الملفات إلى المجلدات الفرعية المناسبة باستخدام طريقة نسخة ارشيف لوحدة Shutil.

يتم استخدام الملفات التالية في المثال أعلاه. اسم الملف على اليسار ووصفه على اليمين:

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 قالب Office Open XML لمعالجة النصوص ML.
ملف الاختبار (Dotm).dotm قالب Office Open XML WordprocessingML مع وحدات الماكرو.
ملف الاختبار (XML).xml مستند FlatOPC OOXML.
ملف الاختبار (RTF).rtf مستند بتنسيق نص منسق.
ملف الاختبار (WordML).xml مستند Microsoft Word 2003 لمعالجة الكلمات ML.
ملف الاختبار (HTML).html وثيقة HTML.
ملف الاختبار (MHTML).mhtml وثيقة MHTML (أرشيف الويب).
ملف الاختبار (Odt).odt نص OpenDocument (كاتب OpenOffice).
ملف الاختبار (أوت).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.