كشف تنسيق الملف والتحقق من توافق التنسيق
في بعض الأحيان يكون من الضروري تحديد تنسيق المستند قبل فتحه لأن امتداد الملف لا يضمن أن محتويات الملف مناسبة. على سبيل المثال، من المعروف أن تقارير 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. |