From 61bd559f78f68af06fbc5b5645ec9311f3730219 Mon Sep 17 00:00:00 2001 From: SimJeg Date: Tue, 1 Apr 2025 11:36:47 +0200 Subject: [PATCH] Handle header and footer Signed-off-by: SimJeg --- docling/backend/msword_backend.py | 2 ++ tests/data/docx/unit_test_formatting.docx | Bin 15650 -> 19505 bytes 2 files changed, 2 insertions(+) diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index 3f235017..3d6df5ac 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -116,7 +116,9 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): doc = DoclingDocument(name=self.file.stem or "file", origin=origin) if self.is_valid(): assert self.docx_obj is not None + doc = self.walk_linear(self.docx_obj.sections[0].header._element, self.docx_obj, doc) doc = self.walk_linear(self.docx_obj.element.body, self.docx_obj, doc) + doc = self.walk_linear(self.docx_obj.sections[-1].footer._element, self.docx_obj, doc) return doc else: raise RuntimeError( diff --git a/tests/data/docx/unit_test_formatting.docx b/tests/data/docx/unit_test_formatting.docx index 2b5a0b65806ef874ccc53d8f0c1bb8f43da4bf89..da816467cfa4f56de93124797034767181d0edb1 100644 GIT binary patch delta 12670 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 N_RBkwMCLE){{U&I%JcvL delta 8947 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

>>Trq0se>bo3MUc*$ML!=)Ig0a?@r5s6N< zTgJdDd|dlL)XCJ*JzJ{Ef6_~%5xt)cG$Lg5`AmC zILj7bbkZ~lguS^#JP6f6mrf>-$p`AZ^xdaIu)663(qf2I`s}^}Ou45q zOs*1BkE2^gLZRiuN2EnxC$!j?OCLVHLJdV5ZTgaY2P7_H@}~q$V6L;N?CE_d&GwBp z?D-KJ{gWEDz+~(BhXAR%|%E`?+NC86xL|cqpKNWR*6Dp zyHwvJVwdnTM_c89WRnS(xHe3GBdoT7<%|m>X{n_o>%xlO!(33 zdqz5P`k$2`xt^TDYuBH`d-DR7hHoux`C}A_pfTFM8YA_zD({wlGhE0?`21K0zBLGr zZe>?}ucF@5`X-U@WpgK0`J6`hJHUkZue^N=NeTYqa~ff(fl-DA4(M@Q;>75{{vk%v zD&SgA%L*^^Ez#`fdqaeNhw)71rCtk##2@(!^9f(b)fPN6)lQOTrsERZ`P1rvb4U(#&8yo`4W zv;#3l%XK+pMzm{`B&)uMxL?8q^n_yrV>a5?eWLOyvGU&)0zFW0d3H3%z~lpK52N@% zA*2XxC9CaYREQ3d=S+uviVF43NzhkhK6}sFk@b_vEIOOZI{973BhPQqCoDaj4eUY{ zHYrm4sVWxz{NUJnZW0B*UAmEBSNj@dDE?PA3fRx!(_*349!X!DGJ*Su1xrWIOHTdK z!|ky#uls^l;37ahes|bf8sRaCQflWUJpGKnZ`kz9Z|jg18YUH?TlJcY2WwK7e5RSk z2_Hr`@ntRKNvu2fxhC~IyGK