Bestandsformaat detecteren en compatibiliteit controleren

Soms is het noodzakelijk om het formaat van een document te bepalen voordat u opent omdat de bestandsextensie niet garandeert dat de inhoud van het bestand geschikt is. Het is bijvoorbeeld bekend dat Crystal Reports vaak documenten in RTF-formaat uitvoert, maar geeft ze de .doc extensie.

Aspose.Words biedt een mogelijkheid om informatie over het bestandstype te verkrijgen om een uitzondering te voorkomen als u niet zeker bent wat de werkelijke inhoud van het bestand is.

Bestandsformaat detecteren zonder uitzondering

Wanneer u te maken heeft met meerdere documenten in verschillende bestandsformaten, kunt u nodig hebben om de bestanden die kunnen worden verwerkt door Aspose.Words Van degenen die dat niet kunnen. U wilt misschien ook weten waarom sommige documenten niet kunnen worden verwerkt.

Als u een bestand in een Document object en Aspose.Words kan het bestandsformaat niet herkennen of het formaat wordt niet ondersteund; Aspose.Words zal een uitzondering maken. Je kunt die uitzonderingen vangen en analyseren, maar Aspose.Words de detect_file_format methode waarmee we snel het bestandsformaat kunnen bepalen zonder een document te laden met mogelijke uitzonderingen. Deze methode geeft een FileFormatInfo object dat de gedetecteerde informatie over het bestandstype bevat.

Controleer Bestanden Format Compatibiliteit

We kunnen de formaatcompatibiliteit van alle bestanden in de geselecteerde map controleren en sorteren op formaat in overeenkomstige submappen.

Aangezien we te maken hebben met inhoud in een map, het eerste wat we moeten doen is een verzameling van alle bestanden in deze map met behulp van de lijstmap methode van de os module.

Het volgende voorbeeld van code laat zien hoe u een lijst van alle bestanden in de map krijgt:

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

Wanneer alle bestanden worden verzameld, de rest van het werk wordt gedaan door de detect_file_format methode, die het bestandsformaat controleert.

Het volgende voorbeeld van code laat zien hoe over de verzamelde lijst van bestanden te itereren, het formaat van elk bestand te controleren en elk bestand naar de juiste map te verplaatsen:

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

De bestanden worden verplaatst naar geschikte submappen met behulp van de kopieerbestand methode van de shuil module.

De volgende bestanden worden gebruikt in het voorbeeld hierboven. De bestandsnaam staat links en de beschrijving is rechts:

Group van bestanden Invoerdocument Type
Ondersteunde bestandsformaten Testbestand (doc.doc) Microsoft Word 95/6 of Microsoft Word 97 Document 2003.
Testbestand (Dot).dot Microsoft Word 95/6 of Microsoft Word 97 Model 2003.
Testbestand (Docx).docx Office Open XML Wordprocessing ML-document zonder macros.
Testbestand (Docm).docm Office Open XML Wordprocessing ML-document met macros.
Testbestand (Dotx).dotx Office Open XML Wordprocessing ML template.
Testbestand (Dotm).dotm Office Open XML Wordprocessing ML template met macro’s.
Testbestand (XML).xml FlatOPC OOXML Document.
Testbestand (RTF).rtf Rich Text Format document.
Testbestand (WordML).xml Microsoft Word 2003 tekstverwerking ML document.
Testbestand (HTML).html HTML-document.
Testbestand (MHTML).mhtml MHTML (Webarchief) document.
Testbestand (Odt).odt OpenDocument Tekst (OpenOffice Writer).
Testbestand (Ott).ott OpenDocument Document Sjabloon.
Testbestand (DocPreWord60).doc Microsoft Word 2.0 document.
Versleutelde documenten Testbestand (Enc).doc Versleuteld Microsoft Word 95/6 of Microsoft Word 97 Document 2003.
Testbestand (Enc).docx Versleuteld kantoor Open XML Wordprocessing ML document.
Niet ondersteunde bestandsformaten Testbestand (JPG). jpg JPEG-imagebestand.