Informații generale despre formatul fișierelor binare ms-doc

Modul recomandat de a efectua majoritatea sarcinilor de programare în Microsoft Word este de a folosi ansamblurile de interacțiune de bază Word. Acesta este un set de clase .NET care oferă un model de obiect complet pentru lucrul cu Microsoft Word. În această serie de articole, sunt luate în considerare numai scripturi avansate, cum ar fi cele în care produsul Microsoft Word nu este instalat.







Principalele componente ale formatului de fișier MS-DOC

Următoarele sunt cele mai importante structuri pe care ar trebui să le cunoașteți atunci când lucrați cu fișiere DOC.

Fluxul de documente Word este fluxul principal din fișierul DOC care conține toate datele din fișier, cu excepția tabelelor stocate în fluxul 1Table sau în fluxul 0Table.

Blocul de informații despre fișier începe cu o decalare de 0x00 față de fluxul documentului Word. Specifică locația tuturor celorlalte date din fișier. Aceste locații sunt indicate de o pereche de numere întregi, dintre care primul indică locația, iar al doilea este dimensiunea. Aceste numere sunt specificate în substructurile blocului de informații despre fișiere, cum ar fi FibRgFcLcb97. Numele locațiilor sunt prefixate cu fc, iar numele dimensiunilor sunt prefixate cu lcb.

Structura Clx este o matrice de 0 sau mai multe structuri Prc. care conțin informații despre proprietăți, după care rulează structura Pcdt. conținând structura PlcPcd.

Un caracter poate fi text sau non-text, de exemplu, o marcaj de paragraf sau legare de obiect. Dimensiunea acestuia poate varia în funcție de caracterul ANSI, Unicode sau de caracterul de control. Caracterele vecine din document nu sunt neapărat adiacente fișierului binar.

Poziția unui caracter (CP) este un număr întreg nesemnat pe 32 de biți care determină poziția indicelui simbolului în textul documentului.

Structura Pcd indică poziția textului în fluxul documentului Word, precum și unele proprietăți ale textului.

Structura PlcPcd este o structură PLC. care hărți o serie de poziții de caractere în structurile Pcd. Cu alte cuvinte, compară pozițiile simbolurilor cu simbolurile în textul documentului.







Extrageți textul din fișierele Word

Un algoritm formal pentru extragerea textului este prezentat în documentele privind specificațiile deschise pe site-ul MSDN, în sub-secțiunea 2.4.1 Preluarea textului. În plus, în secțiunea 3.1 Exemplu de Clx a secțiunii cu exemple este prezentat un exemplu de implementare a unei părți a acestei proceduri. Iată o versiune simplificată a întregului proces.

Cum se extrage textul dintr-un document Word

Citiți fișierul DOC în fluxul de date.

Începeți să citiți blocul de informații despre fișiere din offsetul fluxului 0 al documentului Word. Pentru mai multe informații, a se vedea 2.5.15 Cum se citește PIB-ul.

În interiorul blocului de informații despre fișiere, găsiți structura FibRgFcLcb97. Această structură începe cu octetul 54 al blocului de informații despre fișiere și constă într-o secvență de câmpuri de 4 octeți.

Citiți câmpul FibRgFcLcb97.fcClx octetul 268 și câmpul FibRgFcLcb97.lcbClx de octetul 272. Acestea indică poziția offset și dimensiunea structurii Clx.

Începeți să citiți structura Clx din fluxul de masă cu decalajul specificat în câmpul FibRgFcLcb97.fcClx.

În interiorul structurii Clx, găsiți structura Pcdt, care urmează imediat după matricea .RgPrc. care are o dimensiune variabilă și constă din structurile Prc.

Pentru fiecare element al acestei matrice, procedați în felul următor:

Citiți atributul .clxt. care este octetul 0 al structurii Prc. Dacă .clxt = 0x02, atunci ați găsit Pcdt.

Dacă .clxt = 0x01, citiți următorii doi octeți ca număr întreg, apoi treceți acest număr de octeți la următorul element al matricei.

În interiorul structurii Pcdt, găsiți structura PlcPcd, care începe cu cel de-al cincilea octet al structurii Pcdt.

Încărcați matricea PlcPcd.aPcd și array PlcPcd.aCp. Elementele acestor tablouri sunt legate unele de altele de valoarea indexului.

Pentru fiecare structură Pcd din PlcPcd.aPcd, procedați în felul următor:

Citiți valoarea câmpului Pcd.Fc.fComprimat de biți 46 din structura Pcd curentă. Dacă valoarea este 0, structura Pcd trimite un caracter Unicode pe 16 biți. Dacă se primește o valoare de 1, structura se referă la un caracter ANSI pe 8 biți.

Citiți valoarea Pcd.Fc. care corespunde octeților 2-5 ai structurii actuale Pcd și valorii corespunzătoare a poziției simbolului.

În cazul Unicode, textul de la poziția caracterului indicat de valoarea poziției curente începe cu o decalare care este egală cu valoarea Pcd.Fc din fluxul documentului Word și are nevoie de doi octeți pentru fiecare caracter.

În cazul ANSI, textul din poziția actuală a caracterelor începe cu un offset care este jumătate din valoarea lui Pcd.Fc și ia un octet per caracter.

În ambele cazuri, numărul de caractere indicat de poziția caracteristică curentă este egal cu diferența dintre valorile poziției următoare a caracterelor din matrice și poziția curentă a caracterului.







Trimiteți-le prietenilor: