A .docx does not store where its pages end A developer hand-wrote an OOXML .docx with A4 page setup, six hard page breaks, a 36-row table, a three-level numbered list, images, footnotes and VML WordArt, then converted it to HTML in-browser to measure what actually changes. The test found the format stores no page-end markers (zero lastRenderedPageBreak entries), so pagination is recomputed at open time, and the conversion produced unevaluated PAGE/NUMPAGES fields (every footer reading "第 1 页 共 10 页"), a 36-row table kept whole on a stretched 794x1733 page with no or , and WordArt rendered as a 573x61 px SVG with zero text nodes or paths. Someone handed me a Word proposal last week and asked whether converting it to HTML would look exactly like Word. I said no. They thought I was dodging. All I had at the time was "the formats are different," which explains nothing, so I sat down and built a sample to measure what actually changes. I hand-wrote the OOXML instead of using a template: A4 page setup, six hard page breaks, one 36-row six-column table with w:tblHeader on the first row, a 22-item three-level numbered list, three images, four footnotes, header and footer with PAGE and NUMPAGES fields, and a VML WordArt title on the cover. Company name, order numbers and amounts are all made up — this is not anyone's real document. I ran it through the DOCX-to-HTML tool on ImgIng https://imging.ai/ https://imging.ai/ , which does the work inside the browser. Six runs with the Network panel open produced zero non-GET requests, which matters here: with no server in the loop, every difference I see belongs to parsing and layout rebuilding, and nothing else. Unzip it, read word/document.xml , and count what is actually there. body = zipfile.ZipFile 'A proposal.docx' .read 'word/document.xml' .decode pw, ph = re.search r'