diff --git a/wetb/utils/report_generator/docx_document/__init__.py b/wetb/utils/report_generator/docx_document/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/_rels/.rels b/wetb/utils/report_generator/docx_document/docx-template_clean/_rels/.rels deleted file mode 100644 index 7d3b4d2dfc20a100c75a68089002f3965a8ee0fa..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/_rels/.rels +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> -<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/> -<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/> -<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/> -<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officedocument/2006/relationships/metadata/core-properties" Target="docProps/core0.xml"/> -</Relationships> \ No newline at end of file diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/fontTable.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/fontTable.xml deleted file mode 100644 index c47d943404cc6d8508e71beab7b06c870f93e72c..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/fontTable.xml +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:fonts xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> - <w:font w:name="Symbol"> - <w:panose1 w:val="02000500000000000000"/> - <w:charset w:val="02"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000000" w:usb1="00000000" w:usb2="00010000" w:usb3="00000000" w:csb0="80000000" w:csb1="00000000"/> - </w:font> - <w:font w:name="Times New Roman"> - <w:panose1 w:val="02020603050405020304"/> - <w:charset w:val="00"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/> - </w:font> - <w:font w:name="Courier New"> - <w:panose1 w:val="02070309020205020404"/> - <w:charset w:val="00"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/> - </w:font> - <w:font w:name="Wingdings"> - <w:panose1 w:val="05020102010804080708"/> - <w:charset w:val="02"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000000" w:usb1="00000000" w:usb2="00010000" w:usb3="00000000" w:csb0="80000000" w:csb1="00000000"/> - </w:font> - <w:font w:name="Cambria"> - <w:panose1 w:val="02040503050406030204"/> - <w:charset w:val="00"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/> - </w:font> - <w:font w:name="Calibri"> - <w:panose1 w:val="020F0502020204030204"/> - <w:charset w:val="00"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/> - </w:font> - <w:font w:name="Arial"> - <w:panose1 w:val="020B0604020202020204"/> - <w:charset w:val="00"/> - <w:family w:val="auto"/> - <w:pitch w:val="variable"/> - <w:sig w:usb0="00000003" w:usb1="00000000" w:usb2="00000000" w:usb3="00000000" w:csb0="00000001" w:csb1="00000000"/> - </w:font> -</w:fonts> diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/footer1.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/footer1.xml deleted file mode 100644 index f1531e0f808cdb3365a79648c070479350121f57..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/footer1.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:ftr xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"><w:p w:rsidR="001B1717" w:rsidRDefault="001B1717"><w:pPr><w:pStyle w:val="Footer"/></w:pPr><w:r><w:rPr><w:sz w:val="20"/></w:rPr><w:t>LEFT</w:t></w:r><w:r><w:rPr><w:sz w:val="20"/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:sz w:val="20"/></w:rPr><w:tab/></w:r><w:r w:rsidRPr="001B1717"><w:rPr><w:sz w:val="20"/></w:rPr><w:fldChar w:fldCharType="begin"/></w:r><w:r w:rsidRPr="001B1717"><w:rPr><w:sz w:val="20"/></w:rPr><w:instrText xml:space="preserve"> PAGE \* MERGEFORMAT </w:instrText></w:r><w:r w:rsidRPr="001B1717"><w:rPr><w:sz w:val="20"/></w:rPr><w:fldChar w:fldCharType="separate"/></w:r><w:r w:rsidR="004C0EAC"><w:rPr><w:noProof/><w:sz w:val="20"/></w:rPr><w:t>1</w:t></w:r><w:r w:rsidRPr="001B1717"><w:rPr><w:noProof/><w:sz w:val="20"/></w:rPr><w:fldChar w:fldCharType="end"/></w:r></w:p></w:ftr> \ No newline at end of file diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/numbering.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/numbering.xml deleted file mode 100644 index 415ef5183d82e443ca68cb05ae6638d6531a37c7..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/numbering.xml +++ /dev/null @@ -1,509 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:numbering xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"> - <w:abstractNum w:abstractNumId="0"> - <w:nsid w:val="FFFFFF1D"/> - <w:multiLevelType w:val="multilevel"/> - <w:tmpl w:val="D0409C7C"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val=""/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="0"/> - </w:tabs> - <w:ind w:left="0" w:firstLine="0"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="1"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="720"/> - </w:tabs> - <w:ind w:left="1080" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="2"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="o"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="1440"/> - </w:tabs> - <w:ind w:left="1800" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="3"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val=""/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="2160"/> - </w:tabs> - <w:ind w:left="2520" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="4"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val=""/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="2880"/> - </w:tabs> - <w:ind w:left="3240" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="5"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="3600"/> - </w:tabs> - <w:ind w:left="3960" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="6"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="o"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="4320"/> - </w:tabs> - <w:ind w:left="4680" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="7"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val=""/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="5040"/> - </w:tabs> - <w:ind w:left="5400" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:hint="default"/> - </w:rPr> - </w:lvl> - <w:lvl w:ilvl="8"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val=""/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="5760"/> - </w:tabs> - <w:ind w:left="6120" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:hint="default"/> - </w:rPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="1"> - <w:nsid w:val="FFFFFF7C"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="9B522538"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%1."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="1492"/> - </w:tabs> - <w:ind w:left="1492" w:hanging="360"/> - </w:pPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="2"> - <w:nsid w:val="FFFFFF7D"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="1BB4178C"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%1."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="1209"/> - </w:tabs> - <w:ind w:left="1209" w:hanging="360"/> - </w:pPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="3"> - <w:nsid w:val="FFFFFF7E"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="4720F336"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%1."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="926"/> - </w:tabs> - <w:ind w:left="926" w:hanging="360"/> - </w:pPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="4"> - <w:nsid w:val="FFFFFF7F"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="7DCEC040"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%1."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="643"/> - </w:tabs> - <w:ind w:left="643" w:hanging="360"/> - </w:pPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="5"> - <w:nsid w:val="FFFFFF80"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="A01021FA"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="1492"/> - </w:tabs> - <w:ind w:left="1492" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="6"> - <w:nsid w:val="FFFFFF81"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="977AAC7C"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="1209"/> - </w:tabs> - <w:ind w:left="1209" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="7"> - <w:nsid w:val="FFFFFF82"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="0D26C678"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="926"/> - </w:tabs> - <w:ind w:left="926" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="8"> - <w:nsid w:val="FFFFFF83"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="EE200B76"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="643"/> - </w:tabs> - <w:ind w:left="643" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="9"> - <w:nsid w:val="FFFFFF88"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="E7381406"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:pStyle w:val="ListNumber"/> - <w:lvlText w:val="%1."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="360"/> - </w:tabs> - <w:ind w:left="360" w:hanging="360"/> - </w:pPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="10"> - <w:nsid w:val="FFFFFF89"/> - <w:multiLevelType w:val="singleLevel"/> - <w:tmpl w:val="ECFC1548"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="bullet"/> - <w:pStyle w:val="ListBullet"/> - <w:lvlText w:val="ï‚·"/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="360"/> - </w:tabs> - <w:ind w:left="360" w:hanging="360"/> - </w:pPr> - <w:rPr> - <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/> - </w:rPr> - </w:lvl> - </w:abstractNum> - <w:abstractNum w:abstractNumId="11"> - <w:nsid w:val="30585973"/> - <w:multiLevelType w:val="multilevel"/> - <w:tmpl w:val="A47E15CE"/> - <w:lvl w:ilvl="0"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%1."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="720"/> - </w:tabs> - <w:ind w:left="720" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="1"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%2."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="1440"/> - </w:tabs> - <w:ind w:left="1440" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="2"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%3."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="2160"/> - </w:tabs> - <w:ind w:left="2160" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="3"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%4."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="2880"/> - </w:tabs> - <w:ind w:left="2880" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="4"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%5."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="3600"/> - </w:tabs> - <w:ind w:left="3600" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="5"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%6."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="4320"/> - </w:tabs> - <w:ind w:left="4320" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="6"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%7."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="5040"/> - </w:tabs> - <w:ind w:left="5040" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="7"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%8."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="5760"/> - </w:tabs> - <w:ind w:left="5760" w:hanging="720"/> - </w:pPr> - </w:lvl> - <w:lvl w:ilvl="8"> - <w:start w:val="1"/> - <w:numFmt w:val="decimal"/> - <w:lvlText w:val="%9."/> - <w:lvlJc w:val="left"/> - <w:pPr> - <w:tabs> - <w:tab w:val="num" w:pos="6480"/> - </w:tabs> - <w:ind w:left="6480" w:hanging="720"/> - </w:pPr> - </w:lvl> - </w:abstractNum> - <w:num w:numId="1"> - <w:abstractNumId w:val="11"/> - </w:num> - <w:num w:numId="2"> - <w:abstractNumId w:val="11"/> - <w:lvlOverride w:ilvl="0"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="1"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="2"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="3"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="4"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="5"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="6"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="7"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - <w:lvlOverride w:ilvl="8"> - <w:startOverride w:val="1"/> - </w:lvlOverride> - </w:num> - <w:num w:numId="3"> - <w:abstractNumId w:val="4"/> - </w:num> - <w:num w:numId="4"> - <w:abstractNumId w:val="3"/> - </w:num> - <w:num w:numId="5"> - <w:abstractNumId w:val="2"/> - </w:num> - <w:num w:numId="6"> - <w:abstractNumId w:val="1"/> - </w:num> - <w:num w:numId="7"> - <w:abstractNumId w:val="0"/> - </w:num> - <w:num w:numId="8"> - <w:abstractNumId w:val="10"/> - </w:num> - <w:num w:numId="9"> - <w:abstractNumId w:val="8"/> - </w:num> - <w:num w:numId="10"> - <w:abstractNumId w:val="7"/> - </w:num> - <w:num w:numId="11"> - <w:abstractNumId w:val="6"/> - </w:num> - <w:num w:numId="12"> - <w:abstractNumId w:val="5"/> - </w:num> - <w:num w:numId="13"> - <w:abstractNumId w:val="9"/> - </w:num> -</w:numbering> diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/settings.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/settings.xml deleted file mode 100644 index 92dfa3f4874cb391eb7e27d2d8b8cec6d19483ea..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/settings.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:settings xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main"> - <w:zoom w:percent="90"/> - <w:embedSystemFonts/> - <w:proofState w:spelling="clean" w:grammar="clean"/> - <w:stylePaneFormatFilter w:val="0004"/> - <w:doNotTrackMoves/> - <w:defaultTabStop w:val="720"/> - <w:drawingGridHorizontalSpacing w:val="360"/> - <w:drawingGridVerticalSpacing w:val="360"/> - <w:displayHorizontalDrawingGridEvery w:val="0"/> - <w:displayVerticalDrawingGridEvery w:val="0"/> - <w:characterSpacingControl w:val="doNotCompress"/> - <w:savePreviewPicture/> - <w:rsids> - <w:rsidRoot w:val="00590D07"/> - <w:rsid w:val="00011C8B"/> - <w:rsid w:val="004E29B3"/> - <w:rsid w:val="00590D07"/> - <w:rsid w:val="00784D58"/> - <w:rsid w:val="008D6863"/> - <w:rsid w:val="00B86B75"/> - <w:rsid w:val="00BC48D5"/> - <w:rsid w:val="00C36279"/> - <w:rsid w:val="00E315A3"/> - </w:rsids> - <m:mathPr> - <m:mathFont m:val="Lucida Grande"/> - <m:brkBin m:val="before"/> - <m:brkBinSub m:val="--"/> - <m:smallFrac m:val="false"/> - <m:dispDef m:val="false"/> - <m:lMargin m:val="0"/> - <m:rMargin m:val="0"/> - <m:wrapRight/> - <m:intLim m:val="subSup"/> - <m:naryLim m:val="subSup"/> - </m:mathPr> - <w:themeFontLang w:val="en-US"/> - <w:clrSchemeMapping w:bg1="light1" w:t1="dark1" w:bg2="light2" w:t2="dark2" w:accent1="accent1" w:accent2="accent2" w:accent3="accent3" w:accent4="accent4" w:accent5="accent5" w:accent6="accent6" w:hyperlink="hyperlink" w:followedHyperlink="followedHyperlink"/> - <w:decimalSymbol w:val="."/> - <w:listSeparator w:val=","/> -</w:settings> diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles.xml deleted file mode 100644 index 0d8224a617a170367b15373b4946f2cc5404bc57..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles.xml +++ /dev/null @@ -1,296 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> -<w:docDefaults> -<w:rPrDefault> -<w:rPr> -<w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/> -<w:sz w:val="24"/> -<w:szCs w:val="24"/> -<w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/> -</w:rPr> -</w:rPrDefault> -<w:pPrDefault> -<w:pPr> -<w:spacing w:after="200"/> -</w:pPr> -</w:pPrDefault> -</w:docDefaults> -<w:latentStyles w:defLockedState="0" w:defUIPriority="0" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="276"/> -<w:style w:type="paragraph" w:default="1" w:styleId="Normal"> -<w:name w:val="Normal"/> -<w:qFormat/> -<w:rsid w:val="000D33D5"/> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -</w:style> -<w:style w:type="paragraph" w:styleId="Heading1"> -<w:name w:val="heading 1"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:link w:val="Heading1Char"/> -<w:uiPriority w:val="9"/> -<w:qFormat/> -<w:rsid w:val="00E315A3"/> -<w:pPr> -<w:keepNext/> -<w:keepLines/> -<w:spacing w:before="480" w:after="0"/> -<w:outlineLvl w:val="0"/> -</w:pPr> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="345A8A" w:themeColor="accent1" w:themeShade="B5"/> -<w:sz w:val="32"/> -<w:szCs w:val="32"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:styleId="Heading2"> -<w:name w:val="heading 2"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:link w:val="Heading2Char"/> -<w:uiPriority w:val="9"/> -<w:unhideWhenUsed/> -<w:qFormat/> -<w:rsid w:val="00E315A3"/> -<w:pPr> -<w:keepNext/> -<w:keepLines/> -<w:spacing w:before="200" w:after="0"/> -<w:outlineLvl w:val="1"/> -</w:pPr> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="26"/> -<w:szCs w:val="26"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:styleId="Heading3"> -<w:name w:val="heading 3"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:link w:val="Heading3Char"/> -<w:uiPriority w:val="9"/> -<w:unhideWhenUsed/> -<w:qFormat/> -<w:rsid w:val="00E315A3"/> -<w:pPr> -<w:keepNext/> -<w:keepLines/> -<w:spacing w:before="100" w:after="0"/> -<w:outlineLvl w:val="1"/> -</w:pPr> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="22"/> -<w:szCs w:val="22"/> -</w:rPr> -</w:style> -<w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont"> -<w:name w:val="Default Paragraph Font"/> -<w:semiHidden/> -<w:unhideWhenUsed/> -</w:style> -<w:style w:type="table" w:default="1" w:styleId="TableNormal"> -<w:name w:val="Normal Table"/> -<w:semiHidden/> -<w:unhideWhenUsed/> -<w:qFormat/> -<w:tblPr> -<w:tblInd w:w="0" w:type="dxa"/> -<w:tblCellMar> -<w:top w:w="0" w:type="dxa"/> -<w:left w:w="108" w:type="dxa"/> -<w:bottom w:w="0" w:type="dxa"/> -<w:right w:w="108" w:type="dxa"/> -</w:tblCellMar> -</w:tblPr> -</w:style> -<w:style w:type="numbering" w:default="1" w:styleId="NoList"> -<w:name w:val="No List"/> -<w:semiHidden/> -<w:unhideWhenUsed/> -</w:style> -<w:style w:type="table" w:styleId="ColorfulGrid-Accent1"> -<w:name w:val="Colorful Grid Accent 1"/> -<w:basedOn w:val="TableNormal"/> -<w:uiPriority w:val="73"/> -<w:rsid w:val="008D6863"/> -<w:pPr> -<w:spacing w:after="0"/> -</w:pPr> -<w:rPr> -<w:color w:val="000000" w:themeColor="text1"/> -<w:sz w:val="22"/> -<w:szCs w:val="22"/> -</w:rPr> -<w:tblPr> -<w:tblStyleRowBandSize w:val="1"/> -<w:tblStyleColBandSize w:val="1"/> -<w:tblInd w:w="0" w:type="dxa"/> -<w:tblBorders> -<w:insideH w:val="single" w:sz="4" w:space="0" w:color="FFFFFF" w:themeColor="background1"/> -</w:tblBorders> -<w:tblCellMar> -<w:top w:w="0" w:type="dxa"/> -<w:left w:w="108" w:type="dxa"/> -<w:bottom w:w="0" w:type="dxa"/> -<w:right w:w="108" w:type="dxa"/> -</w:tblCellMar> -</w:tblPr> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="DBE5F1" w:themeFill="accent1" w:themeFillTint="33"/> -</w:tcPr> -<w:tblStylePr w:type="firstRow"> -<w:rPr> -<w:b/> -<w:bCs/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="B8CCE4" w:themeFill="accent1" w:themeFillTint="66"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="lastRow"> -<w:rPr> -<w:b/> -<w:bCs/> -<w:color w:val="000000" w:themeColor="text1"/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="B8CCE4" w:themeFill="accent1" w:themeFillTint="66"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="firstCol"> -<w:rPr> -<w:color w:val="FFFFFF" w:themeColor="background1"/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="365F91" w:themeFill="accent1" w:themeFillShade="BF"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="lastCol"> -<w:rPr> -<w:color w:val="FFFFFF" w:themeColor="background1"/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="365F91" w:themeFill="accent1" w:themeFillShade="BF"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="band1Vert"> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="A7BFDE" w:themeFill="accent1" w:themeFillTint="7F"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="band1Horz"> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="A7BFDE" w:themeFill="accent1" w:themeFillTint="7F"/> -</w:tcPr> -</w:tblStylePr> -</w:style> -<w:style w:type="character" w:customStyle="1" w:styleId="Heading1Char"> -<w:name w:val="Heading 1 Char"/> -<w:basedOn w:val="DefaultParagraphFont"/> -<w:link w:val="Heading1"/> -<w:uiPriority w:val="9"/> -<w:rsid w:val="00E315A3"/> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="345A8A" w:themeColor="accent1" w:themeShade="B5"/> -<w:sz w:val="32"/> -<w:szCs w:val="32"/> -</w:rPr> -</w:style> -<w:style w:type="character" w:customStyle="1" w:styleId="Heading2Char"> -<w:name w:val="Heading 2 Char"/> -<w:basedOn w:val="DefaultParagraphFont"/> -<w:link w:val="Heading2"/> -<w:uiPriority w:val="9"/> -<w:rsid w:val="00E315A3"/> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="26"/> -<w:szCs w:val="26"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:styleId="ListBullet"> -<w:name w:val="List Bullet"/> -<w:basedOn w:val="Normal"/> -<w:rsid w:val="00784D58"/> -<w:pPr> -<w:numPr> -<w:numId w:val="8"/> -</w:numPr> -<w:contextualSpacing/> -</w:pPr> -</w:style> -<w:style w:type="paragraph" w:styleId="ListNumber"> -<w:name w:val="List Number"/> -<w:basedOn w:val="Normal"/> -<w:rsid w:val="00784D58"/> -<w:pPr> -<w:numPr> -<w:numId w:val="13"/> -</w:numPr> -<w:contextualSpacing/> -</w:pPr> -</w:style> -<w:style w:type="paragraph" w:styleId="BodyText"> -<w:name w:val="Body Text"/> -<w:basedOn w:val="Normal"/> -<w:link w:val="BodyTextChar"/> -<w:rsid w:val="00BC48D5"/> -<w:pPr> -<w:spacing w:after="120"/> -</w:pPr> -</w:style> -<w:style w:type="character" w:customStyle="1" w:styleId="BodyTextChar"> -<w:name w:val="Body Text Char"/> -<w:basedOn w:val="DefaultParagraphFont"/> -<w:link w:val="BodyText"/> -<w:rsid w:val="00BC48D5"/> -</w:style> -<w:style w:type="paragraph" w:styleId="Caption"> -<w:name w:val="caption"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:rsid w:val="00D61392"/> -<w:pPr> -<w:spacing w:after="60"/> -</w:pPr> -<w:rPr> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="18"/> -<w:szCs w:val="18"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:customStyle="1" w:styleId="Image"> -<w:name w:val="Image"/> -<w:basedOn w:val="Normal"/> -<w:qFormat/> -<w:rsid w:val="00C06113"/> -<w:pPr> -<w:spacing w:after="0"/> -<w:jc w:val="center"/> -</w:pPr> -</w:style> -</w:styles> \ No newline at end of file diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles_old.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles_old.xml deleted file mode 100644 index b2e824ce7c4439b3e0087b8c865260785c9b9c13..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles_old.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/><w:sz w:val="24"/><w:szCs w:val="24"/><w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after="200"/></w:pPr></w:pPrDefault></w:docDefaults><w:latentStyles w:defLockedState="0" w:defUIPriority="0" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="276"/><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rsid w:val="000D33D5"/></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:link w:val="Heading1Char"/><w:uiPriority w:val="9"/><w:qFormat/><w:rsid w:val="00E315A3"/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before="480" w:after="0"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:b/><w:bCs/><w:color w:val="345A8A" w:themeColor="accent1" w:themeShade="B5"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:link w:val="Heading2Char"/><w:uiPriority w:val="9"/><w:unhideWhenUsed/><w:qFormat/><w:rsid w:val="00E315A3"/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before="200" w:after="0"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:b/><w:bCs/><w:color w:val="4F81BD" w:themeColor="accent1"/><w:sz w:val="26"/><w:szCs w:val="26"/></w:rPr></w:style><w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/><w:unhideWhenUsed/></w:style><w:style w:type="table" w:default="1" w:styleId="TableNormal"><w:name w:val="Normal Table"/><w:semiHidden/><w:unhideWhenUsed/><w:qFormat/><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="numbering" w:default="1" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/><w:unhideWhenUsed/></w:style><w:style w:type="table" w:styleId="ColorfulGrid-Accent1"><w:name w:val="Colorful Grid Accent 1"/><w:basedOn w:val="TableNormal"/><w:uiPriority w:val="73"/><w:rsid w:val="008D6863"/><w:pPr><w:spacing w:after="0"/></w:pPr><w:rPr><w:color w:val="000000" w:themeColor="text1"/><w:sz w:val="22"/><w:szCs w:val="22"/></w:rPr><w:tblPr><w:tblStyleRowBandSize w:val="1"/><w:tblStyleColBandSize w:val="1"/><w:tblInd w:w="0" w:type="dxa"/><w:tblBorders><w:insideH w:val="single" w:sz="4" w:space="0" w:color="FFFFFF" w:themeColor="background1"/></w:tblBorders><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="DBE5F1" w:themeFill="accent1" w:themeFillTint="33"/></w:tcPr><w:tblStylePr w:type="firstRow"><w:rPr><w:b/><w:bCs/></w:rPr><w:tblPr/><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="B8CCE4" w:themeFill="accent1" w:themeFillTint="66"/></w:tcPr></w:tblStylePr><w:tblStylePr w:type="lastRow"><w:rPr><w:b/><w:bCs/><w:color w:val="000000" w:themeColor="text1"/></w:rPr><w:tblPr/><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="B8CCE4" w:themeFill="accent1" w:themeFillTint="66"/></w:tcPr></w:tblStylePr><w:tblStylePr w:type="firstCol"><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr><w:tblPr/><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="365F91" w:themeFill="accent1" w:themeFillShade="BF"/></w:tcPr></w:tblStylePr><w:tblStylePr w:type="lastCol"><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr><w:tblPr/><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="365F91" w:themeFill="accent1" w:themeFillShade="BF"/></w:tcPr></w:tblStylePr><w:tblStylePr w:type="band1Vert"><w:tblPr/><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="A7BFDE" w:themeFill="accent1" w:themeFillTint="7F"/></w:tcPr></w:tblStylePr><w:tblStylePr w:type="band1Horz"><w:tblPr/><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="A7BFDE" w:themeFill="accent1" w:themeFillTint="7F"/></w:tcPr></w:tblStylePr></w:style><w:style w:type="character" w:customStyle="1" w:styleId="Heading1Char"><w:name w:val="Heading 1 Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Heading1"/><w:uiPriority w:val="9"/><w:rsid w:val="00E315A3"/><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:b/><w:bCs/><w:color w:val="345A8A" w:themeColor="accent1" w:themeShade="B5"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr></w:style><w:style w:type="character" w:customStyle="1" w:styleId="Heading2Char"><w:name w:val="Heading 2 Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Heading2"/><w:uiPriority w:val="9"/><w:rsid w:val="00E315A3"/><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:b/><w:bCs/><w:color w:val="4F81BD" w:themeColor="accent1"/><w:sz w:val="26"/><w:szCs w:val="26"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListBullet"><w:name w:val="List Bullet"/><w:basedOn w:val="Normal"/><w:rsid w:val="00784D58"/><w:pPr><w:numPr><w:numId w:val="8"/></w:numPr><w:contextualSpacing/></w:pPr></w:style><w:style w:type="paragraph" w:styleId="ListNumber"><w:name w:val="List Number"/><w:basedOn w:val="Normal"/><w:rsid w:val="00784D58"/><w:pPr><w:numPr><w:numId w:val="13"/></w:numPr><w:contextualSpacing/></w:pPr></w:style><w:style w:type="paragraph" w:styleId="BodyText"><w:name w:val="Body Text"/><w:basedOn w:val="Normal"/><w:link w:val="BodyTextChar"/><w:rsid w:val="00BC48D5"/><w:pPr><w:spacing w:after="120"/></w:pPr></w:style><w:style w:type="character" w:customStyle="1" w:styleId="BodyTextChar"><w:name w:val="Body Text Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="BodyText"/><w:rsid w:val="00BC48D5"/></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00D61392"/><w:rPr><w:b/><w:bCs/><w:color w:val="4F81BD" w:themeColor="accent1"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:customStyle="1" w:styleId="Image"><w:name w:val="Image"/><w:basedOn w:val="Normal"/><w:qFormat/><w:rsid w:val="00C06113"/><w:pPr><w:spacing w:after="0"/><w:jc w:val="center"/></w:pPr></w:style></w:styles> \ No newline at end of file diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles_old2.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles_old2.xml deleted file mode 100644 index a778aee26ef853e4111d328da1dd63b402793282..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/styles_old2.xml +++ /dev/null @@ -1,272 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> -<w:docDefaults> -<w:rPrDefault> -<w:rPr> -<w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/> -<w:sz w:val="24"/> -<w:szCs w:val="24"/> -<w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/> -</w:rPr> -</w:rPrDefault> -<w:pPrDefault> -<w:pPr> -<w:spacing w:after="200"/> -</w:pPr> -</w:pPrDefault> -</w:docDefaults> -<w:latentStyles w:defLockedState="0" w:defUIPriority="0" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="276"/> -<w:style w:type="paragraph" w:default="1" w:styleId="Normal"> -<w:name w:val="Normal"/> -<w:qFormat/> -<w:rsid w:val="000D33D5"/> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -</w:style> -<w:style w:type="paragraph" w:styleId="Heading1"> -<w:name w:val="heading 1"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:link w:val="Heading1Char"/> -<w:uiPriority w:val="9"/> -<w:qFormat/> -<w:rsid w:val="00E315A3"/> -<w:pPr> -<w:keepNext/> -<w:keepLines/> -<w:spacing w:before="480" w:after="0"/> -<w:outlineLvl w:val="0"/> -</w:pPr> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="345A8A" w:themeColor="accent1" w:themeShade="B5"/> -<w:sz w:val="32"/> -<w:szCs w:val="32"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:styleId="Heading2"> -<w:name w:val="heading 2"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:link w:val="Heading2Char"/> -<w:uiPriority w:val="9"/> -<w:unhideWhenUsed/> -<w:qFormat/> -<w:rsid w:val="00E315A3"/> -<w:pPr> -<w:keepNext/> -<w:keepLines/> -<w:spacing w:before="200" w:after="0"/> -<w:outlineLvl w:val="1"/> -</w:pPr> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="26"/> -<w:szCs w:val="26"/> -</w:rPr> -</w:style> -<w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont"> -<w:name w:val="Default Paragraph Font"/> -<w:semiHidden/> -<w:unhideWhenUsed/> -</w:style> -<w:style w:type="table" w:default="1" w:styleId="TableNormal"> -<w:name w:val="Normal Table"/> -<w:semiHidden/> -<w:unhideWhenUsed/> -<w:qFormat/> -<w:tblPr> -<w:tblInd w:w="0" w:type="dxa"/> -<w:tblCellMar> -<w:top w:w="0" w:type="dxa"/> -<w:left w:w="108" w:type="dxa"/> -<w:bottom w:w="0" w:type="dxa"/> -<w:right w:w="108" w:type="dxa"/> -</w:tblCellMar> -</w:tblPr> -</w:style> -<w:style w:type="numbering" w:default="1" w:styleId="NoList"> -<w:name w:val="No List"/> -<w:semiHidden/> -<w:unhideWhenUsed/> -</w:style> -<w:style w:type="table" w:styleId="ColorfulGrid-Accent1"> -<w:name w:val="Colorful Grid Accent 1"/> -<w:basedOn w:val="TableNormal"/> -<w:uiPriority w:val="73"/> -<w:rsid w:val="008D6863"/> -<w:pPr> -<w:spacing w:after="0"/> -</w:pPr> -<w:rPr> -<w:color w:val="000000" w:themeColor="text1"/> -<w:sz w:val="22"/> -<w:szCs w:val="22"/> -</w:rPr> -<w:tblPr> -<w:tblStyleRowBandSize w:val="1"/> -<w:tblStyleColBandSize w:val="1"/> -<w:tblInd w:w="0" w:type="dxa"/> -<w:tblBorders> -<w:insideH w:val="single" w:sz="4" w:space="0" w:color="FFFFFF" w:themeColor="background1"/> -</w:tblBorders> -<w:tblCellMar> -<w:top w:w="0" w:type="dxa"/> -<w:left w:w="108" w:type="dxa"/> -<w:bottom w:w="0" w:type="dxa"/> -<w:right w:w="108" w:type="dxa"/> -</w:tblCellMar> -</w:tblPr> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="DBE5F1" w:themeFill="accent1" w:themeFillTint="33"/> -</w:tcPr> -<w:tblStylePr w:type="firstRow"> -<w:rPr> -<w:b/> -<w:bCs/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="B8CCE4" w:themeFill="accent1" w:themeFillTint="66"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="lastRow"> -<w:rPr> -<w:b/> -<w:bCs/> -<w:color w:val="000000" w:themeColor="text1"/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="B8CCE4" w:themeFill="accent1" w:themeFillTint="66"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="firstCol"> -<w:rPr> -<w:color w:val="FFFFFF" w:themeColor="background1"/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="365F91" w:themeFill="accent1" w:themeFillShade="BF"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="lastCol"> -<w:rPr> -<w:color w:val="FFFFFF" w:themeColor="background1"/> -</w:rPr> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="365F91" w:themeFill="accent1" w:themeFillShade="BF"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="band1Vert"> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="A7BFDE" w:themeFill="accent1" w:themeFillTint="7F"/> -</w:tcPr> -</w:tblStylePr> -<w:tblStylePr w:type="band1Horz"> -<w:tblPr/> -<w:tcPr> -<w:shd w:val="clear" w:color="auto" w:fill="A7BFDE" w:themeFill="accent1" w:themeFillTint="7F"/> -</w:tcPr> -</w:tblStylePr> -</w:style> -<w:style w:type="character" w:customStyle="1" w:styleId="Heading1Char"> -<w:name w:val="Heading 1 Char"/> -<w:basedOn w:val="DefaultParagraphFont"/> -<w:link w:val="Heading1"/> -<w:uiPriority w:val="9"/> -<w:rsid w:val="00E315A3"/> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="345A8A" w:themeColor="accent1" w:themeShade="B5"/> -<w:sz w:val="32"/> -<w:szCs w:val="32"/> -</w:rPr> -</w:style> -<w:style w:type="character" w:customStyle="1" w:styleId="Heading2Char"> -<w:name w:val="Heading 2 Char"/> -<w:basedOn w:val="DefaultParagraphFont"/> -<w:link w:val="Heading2"/> -<w:uiPriority w:val="9"/> -<w:rsid w:val="00E315A3"/> -<w:rPr> -<w:rFonts w:ascii="Tahoma" w:hAnsi="Tahoma" w:cs="Tahoma"/> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="26"/> -<w:szCs w:val="26"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:styleId="ListBullet"> -<w:name w:val="List Bullet"/> -<w:basedOn w:val="Normal"/> -<w:rsid w:val="00784D58"/> -<w:pPr> -<w:numPr> -<w:numId w:val="8"/> -</w:numPr> -<w:contextualSpacing/> -</w:pPr> -</w:style> -<w:style w:type="paragraph" w:styleId="ListNumber"> -<w:name w:val="List Number"/> -<w:basedOn w:val="Normal"/> -<w:rsid w:val="00784D58"/> -<w:pPr> -<w:numPr> -<w:numId w:val="13"/> -</w:numPr> -<w:contextualSpacing/> -</w:pPr> -</w:style> -<w:style w:type="paragraph" w:styleId="BodyText"> -<w:name w:val="Body Text"/> -<w:basedOn w:val="Normal"/> -<w:link w:val="BodyTextChar"/> -<w:rsid w:val="00BC48D5"/> -<w:pPr> -<w:spacing w:after="120"/> -</w:pPr> -</w:style> -<w:style w:type="character" w:customStyle="1" w:styleId="BodyTextChar"> -<w:name w:val="Body Text Char"/> -<w:basedOn w:val="DefaultParagraphFont"/> -<w:link w:val="BodyText"/> -<w:rsid w:val="00BC48D5"/> -</w:style> -<w:style w:type="paragraph" w:styleId="Caption"> -<w:name w:val="caption"/> -<w:basedOn w:val="Normal"/> -<w:next w:val="Normal"/> -<w:rsid w:val="00D61392"/> -<w:pPr> -<w:spacing w:after="60"/> -</w:pPr> -<w:rPr> -<w:b/> -<w:bCs/> -<w:color w:val="4F81BD" w:themeColor="accent1"/> -<w:sz w:val="18"/> -<w:szCs w:val="18"/> -</w:rPr> -</w:style> -<w:style w:type="paragraph" w:customStyle="1" w:styleId="Image"> -<w:name w:val="Image"/> -<w:basedOn w:val="Normal"/> -<w:qFormat/> -<w:rsid w:val="00C06113"/> -<w:pPr> -<w:spacing w:after="0"/> -<w:jc w:val="center"/> -</w:pPr> -</w:style> -</w:styles> \ No newline at end of file diff --git a/wetb/utils/report_generator/docx_document/docx-template_clean/word/theme/theme1.xml b/wetb/utils/report_generator/docx_document/docx-template_clean/word/theme/theme1.xml deleted file mode 100644 index de62be957503a542a3da002a5cb1502c0058449b..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx-template_clean/word/theme/theme1.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="ï¼ï¼³ ゴシック"/><a:font script="Hang" typeface="ë§‘ì€ ê³ ë”•"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Angsana New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="ï¼ï¼³ 明æœ"/><a:font script="Hang" typeface="ë§‘ì€ ê³ ë”•"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Cordia New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme> \ No newline at end of file diff --git a/wetb/utils/report_generator/docx_document/docx.py b/wetb/utils/report_generator/docx_document/docx.py deleted file mode 100644 index 721b1df1bf470bf980235a3162bcc6d7e991bf8b..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx.py +++ /dev/null @@ -1,1194 +0,0 @@ -#!/usr/bin/env python2.6 -# -*- coding: utf-8 -*- -""" -Open and modify Microsoft Word 2007 docx files (called 'OpenXML' and -'Office OpenXML' by Microsoft) - -Part of Python's docx module - http://github.com/mikemaccana/python-docx -See LICENSE for licensing information. -""" - -import os -import re -import time -import shutil -import zipfile - -from lxml import etree -from os.path import abspath, basename, join - -from PIL import Image -from mmpe.io import make_dirs - -try: - from PIL.ExifTags import TAGS - from PIL import WmfImagePlugin, PdfImagePlugin, PngImagePlugin, JpegImagePlugin, EpsImagePlugin -except ImportError: - TAGS = {} - -#from exceptions import PendingDeprecationWarning -from warnings import warn - -import logging -pp = lambda t : etree.tostring(t, pretty_print=True) - -log = logging.getLogger(__name__) - -# Record template directory's location which is just 'template' for a docx -# developer or 'site-packages/docx-template' if you have installed docx -template_dir = join(os.path.dirname(__file__.replace("library.zip", '')), 'docx-template') # installed -if not os.path.isdir(template_dir): - template_dir = join(os.path.dirname(__file__.replace("library.zip", '')), 'template') # dev - -# All Word prefixes / namespace matches used in document.xml & core.xml. -# LXML doesn't actually use prefixes (just the real namespace) , but these -# make it easier to copy Word output more easily. -nsprefixes = { - 'mo': 'http://schemas.microsoft.com/office/mac/office/2008/main', - 'o': 'urn:schemas-microsoft-com:office:office', - 've': 'http://schemas.openxmlformats.org/markup-compatibility/2006', - # Text Content - 'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main', - 'w10': 'urn:schemas-microsoft-com:office:word', - 'wne': 'http://schemas.microsoft.com/office/word/2006/wordml', - 'xml': 'xml', - # Drawing - 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', - 'm': 'http://schemas.openxmlformats.org/officeDocument/2006/math', - 'mv': 'urn:schemas-microsoft-com:mac:vml', - 'pic': 'http://schemas.openxmlformats.org/drawingml/2006/picture', - 'v': 'urn:schemas-microsoft-com:vml', - 'wp': ('http://schemas.openxmlformats.org/drawingml/2006/wordprocessing' - 'Drawing'), - # Properties (core and extended) - 'cp': ('http://schemas.openxmlformats.org/package/2006/metadata/core-pr' - 'operties'), - 'dc': 'http://purl.org/dc/elements/1.1/', - 'ep': ('http://schemas.openxmlformats.org/officeDocument/2006/extended-' - 'properties'), - 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', - # Content Types - 'ct': 'http://schemas.openxmlformats.org/package/2006/content-types', - # Package Relationships - 'r': ('http://schemas.openxmlformats.org/officeDocument/2006/relationsh' - 'ips'), - 'pr': 'http://schemas.openxmlformats.org/package/2006/relationships', - # Dublin Core document properties - 'dcmitype': 'http://purl.org/dc/dcmitype/', - 'dcterms': 'http://purl.org/dc/terms/'} - - -def opendocx(file): - '''Open a docx file, return a document XML tree''' - mydoc = zipfile.ZipFile(file) - xmlcontent = mydoc.read('word/document.xml') - document = etree.fromstring(xmlcontent) - return document - - -def newdocument(page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}): - document = makeelement('document') - body = makeelement('body') - document.append(body) - #sectPr = makeelement('sectPr') - #pgMar = makeelement('pgMar', attributes={k:str(v * 566.89) for (k, v) in page_margins.items()}) - - #sectPr.append(pgMar) - #body.append(sectPr) - body.append(section_layout(portrait=True)) - return document - -def section_layout(page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}, portrait=True): - sectPr = makeelement('sectPr') - if portrait: - pgsz = makeelement('pgSz', attributes={'w':"12240", 'h':"15840"}) - else: - pgsz = makeelement('pgSz', attributes={'w':"15840", 'h':"12240", 'orient':"landscape"}) - sectPr.append(pgsz) - pgMar = makeelement('pgMar', attributes={k:str(v * 566.89) for (k, v) in page_margins.items()}) - sectPr.append(pgMar) - return sectPr - - -def makeelement(tagname, tagtext=None, nsprefix='w', attributes=None, - attrnsprefix=None): - '''Create an element & return it''' - # Deal with list of nsprefix by making namespacemap - namespacemap = None - if isinstance(nsprefix, list): - namespacemap = {} - for prefix in nsprefix: - namespacemap[prefix] = nsprefixes[prefix] - # FIXME: rest of code below expects a single prefix - nsprefix = nsprefix[0] - if nsprefix: - namespace = '{' + nsprefixes[nsprefix] + '}' - else: - # For when namespace = None - namespace = '' - newelement = etree.Element(namespace + tagname, nsmap=namespacemap) - # Add attributes with namespaces - if attributes: - # If they haven't bothered setting attribute namespace, use an empty - # string (equivalent of no namespace) - if not attrnsprefix: - # Quick hack: it seems every element that has a 'w' nsprefix for - # its tag uses the same prefix for it's attributes - if nsprefix == 'w': - attributenamespace = namespace - else: - attributenamespace = '' - else: - attributenamespace = '{' + nsprefixes[attrnsprefix] + '}' - - for tagattribute in attributes: - newelement.set(attributenamespace + tagattribute, - attributes[tagattribute]) - if tagtext: - newelement.text = tagtext - return newelement - - -def pagebreak(type='page', page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}, portrait=True): - '''Insert a break, default 'page'. - See http://openxmldeveloper.org/forums/thread/4075.aspx - Return our page break element.''' - # Need to enumerate different types of page breaks. - validtypes = ['page', 'section'] - if type not in validtypes: - tmpl = 'Page break style "%s" not implemented. Valid styles: %s.' - raise ValueError(tmpl % (type, validtypes)) - pagebreak = makeelement('p') - if type == 'page': - run = makeelement('r') - br = makeelement('br', attributes={'type': type}) - run.append(br) - pagebreak.append(run) - elif type == 'section': - pPr = makeelement('pPr') -# sectPr = makeelement('sectPr') -# if orient == 'portrait': -# pgSz = makeelement('pgSz', attributes={'w': '12240', 'h': '15840'}) -# elif orient == 'landscape': -# pgSz = makeelement('pgSz', attributes={'h': '12240', 'w': '15840', -# 'orient': 'landscape'}) -# sectPr.append(pgSz) - sectPr = section_layout(page_margins, portrait) - pPr.append(sectPr) - pagebreak.append(pPr) - return pagebreak - - -def paragraph(paratext, style='BodyText', breakbefore=False, jc='left', spacing={'before':0, 'after':6}, font_size=10): - """ - Return a new paragraph element containing *paratext*. The paragraph's - default style is 'Body Text', but a new style may be set using the - *style* parameter. - - @param string jc: Paragraph alignment, possible values: - left, center, right, both (justified), ... - see http://www.schemacentral.com/sc/ooxml/t-w_ST_Jc.html - for a full list - - If *paratext* is a list, add a run for each (text, char_format_str) - 2-tuple in the list. char_format_str is a string containing one or more - of the characters 'b', 'i', or 'u', meaning bold, italic, and underline - respectively. For example: - - paratext = [ - ('some bold text', 'b'), - ('some normal text', ''), - ('some italic underlined text', 'iu') - ] - """ - # Make our elements - paragraph = makeelement('p') - - if not isinstance(paratext, list): - paratext = [(paratext, '')] - text_tuples = [] - for pt in paratext: - text, char_styles_str = (pt if isinstance(pt, (list, tuple)) - else (pt, '')) - text_elm = makeelement('t', tagtext=text) - if len(text.strip()) < len(text): - text_elm.set('{http://www.w3.org/XML/1998/namespace}space', - 'preserve') - text_tuples.append([text_elm, char_styles_str]) - pPr = makeelement('pPr') - pStyle = makeelement('pStyle', attributes={'val': style}) - pJc = makeelement('jc', attributes={'val': jc}) - pPr.append(pStyle) - pPr.append(pJc) - - spacing = makeelement('spacing', attributes={'before':str(spacing.get('before') * 20), 'after':str(spacing.get('after') * 20)}) - pPr.append(spacing) - - - - - # Add the text to the run, and the run to the paragraph - paragraph.append(pPr) - for text_elm, char_styles_str in text_tuples: - run = makeelement('r') - rPr = makeelement('rPr') - sz = makeelement('sz', attributes={'val':str(font_size * 2)}) - rPr.append(sz) - # Apply styles - if 'b' in char_styles_str: - b = makeelement('b') - rPr.append(b) - if 'i' in char_styles_str: - i = makeelement('i') - rPr.append(i) - if 'u' in char_styles_str: - u = makeelement('u', attributes={'val': 'single'}) - rPr.append(u) - run.append(rPr) - # Insert lastRenderedPageBreak for assistive technologies like - # document narrators to know when a page break occurred. - if breakbefore: - lastRenderedPageBreak = makeelement('lastRenderedPageBreak') - run.append(lastRenderedPageBreak) - run.append(text_elm) - paragraph.append(run) - # Return the combined paragraph - return paragraph - - -def contenttypes(): - types = etree.fromstring( - '<Types xmlns="http://schemas.openxmlformats.org/package/2006/conten' - 't-types"></Types>') - parts = { - '/word/theme/theme1.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.theme+xml', - '/word/fontTable.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.wordprocessingml.fontTable+xml', - '/docProps/core.xml': 'application/vnd.openxmlformats-package.co' - 're-properties+xml', - '/docProps/app.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.extended-properties+xml', - '/word/document.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.wordprocessingml.document.main+xml', - '/word/settings.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.wordprocessingml.settings+xml', - '/word/numbering.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.wordprocessingml.numbering+xml', - '/word/styles.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.wordprocessingml.styles+xml', - '/word/webSettings.xml': 'application/vnd.openxmlformats-officedocu' - 'ment.wordprocessingml.webSettings+xml'} - for part in parts: - types.append(makeelement('Override', nsprefix=None, - attributes={'PartName': part, - 'ContentType': parts[part]})) - # Add support for filetypes - filetypes = { - 'gif': 'image/gif', - 'jpeg': 'image/jpeg', - 'jpg': 'image/jpeg', - 'png': 'image/png', - 'emf': 'image/x-emf', - 'rels': 'application/vnd.openxmlformats-package.relationships+xml', - 'xml': 'application/xml' - } - for extension in filetypes: - attrs = { - 'Extension': extension, - 'ContentType': filetypes[extension] - } - default_elm = makeelement('Default', nsprefix=None, attributes=attrs) - types.append(default_elm) - return types - - -def heading(headingtext, headinglevel, lang='en'): - '''Make a new heading, return the heading element''' - lmap = {'en': 'Heading', 'it': 'Titolo'} - # Make our elements - paragraph = makeelement('p') - pr = makeelement('pPr') - pStyle = makeelement( - 'pStyle', attributes={'val': lmap[lang] + str(headinglevel)}) - run = makeelement('r') - text = makeelement('t', tagtext=headingtext) - # Add the text the run, and the run to the paragraph - pr.append(pStyle) - run.append(text) - paragraph.append(pr) - paragraph.append(run) - # Return the combined paragraph - return paragraph - - -def table(contents, heading=True, colw=None, cwunit='dxa', tblw=0, tblmargin=.19, - twunit='auto', borders={"all":{"color":'auto', 'val':'single', 'sz':'4'}}, column_style={}): - """ - Return a table element based on specified parameters - - @param list contents: A list of lists describing contents. Every item in - the list can be a string or a valid XML element - itself. It can also be a list. In that case all the - listed elements will be merged into the cell. - @param bool heading: Tells whether first line should be treated as - heading or not - @param list colw: list of integer column widths specified in wunitS. - @param str cwunit: Unit used for column width: - 'pct' : fiftieths of a percent - 'dxa' : twentieths of a point - 'nil' : no width - 'auto' : automagically determined - @param int tblw: Table width - @param str twunit: Unit used for table width. Same possible values as - cwunit. - @param dict borders: Dictionary defining table border. Supported keys - are: 'top', 'left', 'bottom', 'right', - 'insideH', 'insideV', 'all'. - When specified, the 'all' key has precedence over - others. Each key must define a dict of border - attributes: - color : The color of the border, in hex or - 'auto' - space : The space, measured in points - sz : The size of the border, in eighths of - a point - val : The style of the border, see - http://www.schemacentral.com/sc/ooxml/t-w_ST_Border.htm - @param list column_style: Specify the style for each colum, list of dicts. - supported keys: - 'align' : specify the alignment, see paragraph - documentation. - @return lxml.etree: Generated XML etree element - """ - table = makeelement('tbl') - columns = len(contents[0]) - # Table properties - tableprops = makeelement('tblPr') - tablestyle = makeelement('tblStyle', attributes={'val': ''}) - tableprops.append(tablestyle) - tableprops.append(makeelement('jc', attributes={'val':'center'})) - tablewidth = makeelement( - 'tblW', attributes={'w': str(tblw), 'type': str(twunit)}) - tableprops.append(tablewidth) - tablemargin = makeelement('tblCellMar') - if isinstance(tblmargin, (int, float)): - tblmargin = {l:tblmargin for l in ['top', 'left', 'bottom', 'right']} - for l in ['top', 'left', 'bottom', 'right']: - margin = makeelement(l, attributes={'w':str(tblmargin.get(l, 0) * 568), 'tppe':str(twunit)}) - tablemargin.append(margin) - tableprops.append(tablemargin) - if len(borders.keys()): - tableborders = makeelement('tblBorders') - for b in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']: - if b in borders.keys() or 'all' in borders.keys(): - k = 'all' if 'all' in borders.keys() else b - attrs = {} - for a in borders[k].keys(): - attrs[a] = str(borders[k][a]) - borderelem = makeelement(b, attributes=attrs) - tableborders.append(borderelem) - tableprops.append(tableborders) - tablelook = makeelement('tblLook', attributes={'val': '0400'}) - tableprops.append(tablelook) - table.append(tableprops) - # Table Grid - tablegrid = makeelement('tblGrid') - for i in range(columns): - attrs = {'w': str(colw[i]) if colw else '2390'} - tablegrid.append(makeelement('gridCol', attributes=attrs)) - table.append(tablegrid) - # Heading Row - row = makeelement('tr') - rowprops = makeelement('trPr') - cnfStyle = makeelement('cnfStyle', attributes={'val': '000000100000'}) - rowprops.append(cnfStyle) - row.append(rowprops) - if heading: - i = 0 - for heading in contents[0]: - cell = makeelement('tc') - # Cell properties - cellprops = makeelement('tcPr') - if colw: - wattr = {'w': str(colw[i]), 'type': cwunit} - else: - wattr = {'w': '0', 'type': 'auto'} - cellwidth = makeelement('tcW', attributes=wattr) - cellstyle = makeelement('shd', attributes={'val': 'clear', - 'color': 'auto', - 'fill': 'FFFFFF', - 'themeFill': 'text2', - 'themeFillTint': '99'}) - cellprops.append(cellwidth) - cellprops.append(cellstyle) - cell.append(cellprops) - # Paragraph (Content) - if not isinstance(heading, (list, tuple)): - heading = [heading] - for h in heading: - if isinstance(h, etree._Element): - cell.append(h) - else: - c_style = column_style.get(i, column_style.get('all', {})) - cell.append(paragraph(h, - jc=c_style.get('align', 'left'), - spacing=c_style.get('spacing', {'before':0, 'after':0}), - font_size=c_style.get('font_size', 10))) - row.append(cell) - i += 1 - table.append(row) - # Contents Rows - for contentrow in contents[1 if heading else 0:]: - row = makeelement('tr') - i = 0 - for content in contentrow: - cell = makeelement('tc') - # Properties - cellprops = makeelement('tcPr') - if colw: - wattr = {'w': str(colw[i]), 'type': cwunit} - else: - wattr = {'w': '0', 'type': 'auto'} - cellwidth = makeelement('tcW', attributes=wattr) - cellprops.append(cellwidth) - cell.append(cellprops) - # Paragraph (Content) - if not isinstance(content, (list, tuple)): - content = [content] - for c in content: - if isinstance(c, etree._Element): - cell.append(c) - else: - c_style = column_style.get(i, column_style.get('all', {})) - cell.append(paragraph(c, - jc=c_style.get('align', 'left'), - spacing=c_style.get('spacing', {'before':0, 'after':0}), - font_size=c_style.get('font_size', 10))) - #if "<ns0:p>" not in etree.tostring(cell): - # cell.append(paragraph("")) - row.append(cell) - i += 1 - table.append(row) - return table - - -def picture( - relationshiplist, picname, picdescription, pixelwidth=None, - pixelheight=None, nochangeaspect=True, nochangearrowheads=True, - imagefiledict=None): - """ - Take a relationshiplist, picture file name, and return a paragraph - containing the image and an updated relationshiplist - """ -# if imagefiledict is None: -# warn( -# 'Using picture() without imagefiledict parameter will be depreca' -# 'ted in the future.', PendingDeprecationWarning -# ) - - # http://openxmldeveloper.org/articles/462.aspx - # Create an image. Size may be specified, otherwise it will based on the - # pixel size of image. Return a paragraph containing the picture - - # Set relationship ID to that of the image or the first available one - picid = '2' - picpath = abspath(picname) - - if imagefiledict is not None: - # Keep track of the image files in a separate dictionary so they don't - # need to be copied into the template directory - if picpath not in imagefiledict: - picrelid = 'rId' + str(len(relationshiplist) + 1) - imagefiledict[picpath] = picrelid - - relationshiplist.append([ - 'http://schemas.openxmlformats.org/officeDocument/2006/relat' - 'ionships/image', - 'media/%s_%s' % (picrelid, basename(picpath)) - ]) - else: - picrelid = imagefiledict[picpath] - else: - # Copy files into template directory for backwards compatibility - # Images still accumulate in the template directory this way - picrelid = 'rId' + str(len(relationshiplist) + 1) - - media_dir = join(template_dir, 'word', 'media/') - if not os.path.isdir(media_dir): - make_dirs(media_dir) - - name, ext = os.path.splitext(picname) - unique_picname = name + str(len(os.listdir(media_dir))) + ext - - - relationshiplist.append([ - 'http://schemas.openxmlformats.org/officeDocument/2006/relations' - 'hips/image', 'media/' + os.path.basename(unique_picname) - ]) - - - - shutil.copyfile(picname, join(media_dir, os.path.basename(unique_picname))) - with open(picname, 'rb') as f: - image = Image.open(f) - - # Extract EXIF data, if available - imageExif = {} - try: - exif = image._getexif() - except: - exif = {} - - # Check if the user has specified a size - if not pixelwidth or not pixelheight: - # If not, get info from the picture itself - pixelwidth, pixelheight = image.size[0:2] - - for tag, value in exif.items(): - imageExif[TAGS.get(tag, tag)] = value - - imageOrientation = imageExif.get('Orientation', 1) - imageAngle = { - 1: 0, 2: 0, 3: 180, 4: 0, 5: 90, 6: 90, 7: 270, 8: 270 - }[imageOrientation] - imageFlipH = 'true' if imageOrientation in (2, 5, 7) else 'false' - imageFlipV = 'true' if imageOrientation == 4 else 'false' - - - - # Swap width and height if necessary - if imageOrientation in (5, 6, 7, 8): - pixelwidth, pixelheight = pixelheight, pixelwidth - - # OpenXML measures on-screen objects in English Metric Units - # 1cm = 36000 EMUs - emuperpixel = 12700 - width = str(int(pixelwidth * emuperpixel)) - height = str(int(pixelheight * emuperpixel)) - - # There are 3 main elements inside a picture - # 1. The Blipfill - specifies how the image fills the picture area - # (stretch, tile, etc.) - blipfill = makeelement('blipFill', nsprefix='pic') - blipfill.append(makeelement('blip', nsprefix='a', attrnsprefix='r', - attributes={'embed': picrelid})) - stretch = makeelement('stretch', nsprefix='a') - stretch.append(makeelement('fillRect', nsprefix='a')) - blipfill.append(makeelement('srcRect', nsprefix='a')) - blipfill.append(stretch) - - # 2. The non visual picture properties - nvpicpr = makeelement('nvPicPr', nsprefix='pic') - cnvpr = makeelement( - 'cNvPr', nsprefix='pic', - attributes={'id': '0', 'name': 'Picture 1', 'descr': picdescription} - ) - nvpicpr.append(cnvpr) - cnvpicpr = makeelement('cNvPicPr', nsprefix='pic') - cnvpicpr.append(makeelement( - 'picLocks', nsprefix='a', - attributes={'noChangeAspect': str(int(nochangeaspect)), - 'noChangeArrowheads': str(int(nochangearrowheads))})) - nvpicpr.append(cnvpicpr) - - # 3. The Shape properties - sppr = makeelement('spPr', nsprefix='pic', attributes={'bwMode': 'auto'}) - xfrm = makeelement( - 'xfrm', nsprefix='a', attributes={ - 'rot': str(imageAngle * 60000), 'flipH': imageFlipH, - 'flipV': imageFlipV - } - ) - xfrm.append( - makeelement('off', nsprefix='a', attributes={'x': '0', 'y': '0'}) - ) - xfrm.append( - makeelement( - 'ext', nsprefix='a', attributes={'cx': width, 'cy': height} - ) - ) - prstgeom = makeelement( - 'prstGeom', nsprefix='a', attributes={'prst': 'rect'} - ) - prstgeom.append(makeelement('avLst', nsprefix='a')) - sppr.append(xfrm) - sppr.append(prstgeom) - - # Add our 3 parts to the picture element - pic = makeelement('pic', nsprefix='pic') - pic.append(nvpicpr) - pic.append(blipfill) - pic.append(sppr) - - # Now make the supporting elements - # The following sequence is just: make element, then add its children - graphicdata = makeelement( - 'graphicData', nsprefix='a', - attributes={'uri': ('http://schemas.openxmlformats.org/drawingml/200' - '6/picture')}) - graphicdata.append(pic) - graphic = makeelement('graphic', nsprefix='a') - graphic.append(graphicdata) - - framelocks = makeelement('graphicFrameLocks', nsprefix='a', - attributes={'noChangeAspect': '1'}) - framepr = makeelement('cNvGraphicFramePr', nsprefix='wp') - framepr.append(framelocks) - docpr = makeelement('docPr', nsprefix='wp', - attributes={'id': picid, 'name': 'Picture 1', - 'descr': picdescription}) - effectextent = makeelement('effectExtent', nsprefix='wp', - attributes={'l': '25400', 't': '0', 'r': '0', - 'b': '0'}) - extent = makeelement('extent', nsprefix='wp', - attributes={'cx': width, 'cy': height}) - inline = makeelement('inline', attributes={'distT': "0", 'distB': "0", - 'distL': "0", 'distR': "0"}, - nsprefix='wp') - inline.append(extent) - inline.append(effectextent) - inline.append(docpr) - inline.append(framepr) - inline.append(graphic) - drawing = makeelement('drawing') - drawing.append(inline) - run = makeelement('r') - run.append(drawing) - paragraph = makeelement('p') - pPr = makeelement('pPr') - pstyle = makeelement('pStyle', attributes={'val':'Image'}) - pPr.append(pstyle) - pJc = makeelement('jc', attributes={'val': 'center'}) - pPr.append(pJc) - paragraph.append(pPr) - paragraph.append(run) - - - if imagefiledict is not None: - return relationshiplist, paragraph, imagefiledict - else: - return relationshiplist, paragraph - -def caption(tag, caption_text): - - paragraph = makeelement('p') - pPr = makeelement('pPr') - pstyle = makeelement('pStyle', attributes={'val':'Caption'}) - pPr.append(pstyle) - - - pJc = makeelement('jc', attributes={'val': 'center'}) - pPr.append(pJc) - paragraph.append(pPr) - - run = makeelement('r') - t = makeelement('t', attributes={'space':"preserve"}, tagtext=tag + " ") - run.append(t) - paragraph.append(run) - fldSimple = makeelement('fldSimple', attributes={"instr":" SEQ %s \* ARABIC " % tag}) - run = makeelement('r') - rPr = makeelement('rPr') - noProof = makeelement('noProof') - rPr.append(noProof) - run.append(rPr) - t = makeelement('t', tagtext='1') - run.append(t) - fldSimple.append(run) - paragraph.append(fldSimple) - run = makeelement('r') - t = makeelement('t', attributes={'space':"preserve"}, tagtext=" - " + caption_text) - run.append(t) - paragraph.append(run) - paragraph.append(makeelement('bookmarkStart', attributes={'id':'0', 'name':'_GoBack'})) - paragraph.append(makeelement('bookmarkEnd', attributes={'id':'0'})) - - return paragraph - -def search(document, search): - '''Search a document for a regex, return success / fail result''' - result = False - searchre = re.compile(search) - for element in document.iter(): - if element.tag == '{%s}t' % nsprefixes['w']: # t (text) elements - if element.text: - if searchre.search(element.text): - result = True - return result - - -def replace(document, search, replace): - """ - Replace all occurences of string with a different string, return updated - document - """ - newdocument = document - searchre = re.compile(search) - for element in newdocument.iter(): - if element.tag == '{%s}t' % nsprefixes['w']: # t (text) elements - if element.text: - if searchre.search(element.text): - element.text = re.sub(search, replace, element.text) - return newdocument - - -def clean(document): - """ Perform misc cleaning operations on documents. - Returns cleaned document. - """ - - newdocument = document - - # Clean empty text and r tags - for t in ('t', 'r'): - rmlist = [] - for element in newdocument.iter(): - if element.tag == '{%s}%s' % (nsprefixes['w'], t): - if not element.text and not len(element): - rmlist.append(element) - for element in rmlist: - element.getparent().remove(element) - - return newdocument - - -def findTypeParent(element, tag): - """ Finds fist parent of element of the given type - - @param object element: etree element - @param string the tag parent to search for - - @return object element: the found parent or None when not found - """ - - p = element - while True: - p = p.getparent() - if p.tag == tag: - return p - - # Not found - return None - - -def AdvSearch(document, search, bs=3): - '''Return set of all regex matches - - This is an advanced version of python-docx.search() that takes into - account blocks of <bs> elements at a time. - - What it does: - It searches the entire document body for text blocks. - Since the text to search could be spawned across multiple text blocks, - we need to adopt some sort of algorithm to handle this situation. - The smaller matching group of blocks (up to bs) is then adopted. - If the matching group has more than one block, blocks other than first - are cleared and all the replacement text is put on first block. - - Examples: - original text blocks : [ 'Hel', 'lo,', ' world!' ] - search : 'Hello,' - output blocks : [ 'Hello,' ] - - original text blocks : [ 'Hel', 'lo', ' __', 'name', '__!' ] - search : '(__[a-z]+__)' - output blocks : [ '__name__' ] - - @param instance document: The original document - @param str search: The text to search for (regexp) - append, or a list of etree elements - @param int bs: See above - - @return set All occurences of search string - - ''' - - # Compile the search regexp - searchre = re.compile(search) - - matches = [] - - # Will match against searchels. Searchels is a list that contains last - # n text elements found in the document. 1 < n < bs - searchels = [] - - for element in document.iter(): - if element.tag == '{%s}t' % nsprefixes['w']: # t (text) elements - if element.text: - # Add this element to searchels - searchels.append(element) - if len(searchels) > bs: - # Is searchels is too long, remove first elements - searchels.pop(0) - - # Search all combinations, of searchels, starting from - # smaller up to bigger ones - # l = search lenght - # s = search start - # e = element IDs to merge - found = False - for l in range(1, len(searchels) + 1): - if found: - break - for s in range(len(searchels)): - if found: - break - if s + l <= len(searchels): - e = range(s, s + l) - txtsearch = '' - for k in e: - txtsearch += searchels[k].text - - # Searcs for the text in the whole txtsearch - match = searchre.search(txtsearch) - if match: - matches.append(match.group()) - found = True - return set(matches) - - -def advReplace(document, search, replace, bs=3): - """ - Replace all occurences of string with a different string, return updated - document - - This is a modified version of python-docx.replace() that takes into - account blocks of <bs> elements at a time. The replace element can also - be a string or an xml etree element. - - What it does: - It searches the entire document body for text blocks. - Then scan thos text blocks for replace. - Since the text to search could be spawned across multiple text blocks, - we need to adopt some sort of algorithm to handle this situation. - The smaller matching group of blocks (up to bs) is then adopted. - If the matching group has more than one block, blocks other than first - are cleared and all the replacement text is put on first block. - - Examples: - original text blocks : [ 'Hel', 'lo,', ' world!' ] - search / replace: 'Hello,' / 'Hi!' - output blocks : [ 'Hi!', '', ' world!' ] - - original text blocks : [ 'Hel', 'lo,', ' world!' ] - search / replace: 'Hello, world' / 'Hi!' - output blocks : [ 'Hi!!', '', '' ] - - original text blocks : [ 'Hel', 'lo,', ' world!' ] - search / replace: 'Hel' / 'Hal' - output blocks : [ 'Hal', 'lo,', ' world!' ] - - @param instance document: The original document - @param str search: The text to search for (regexp) - @param mixed replace: The replacement text or lxml.etree element to - append, or a list of etree elements - @param int bs: See above - - @return instance The document with replacement applied - - """ - # Enables debug output - DEBUG = False - - newdocument = document - - # Compile the search regexp - searchre = re.compile(search) - - # Will match against searchels. Searchels is a list that contains last - # n text elements found in the document. 1 < n < bs - searchels = [] - - for element in newdocument.iter(): - if element.tag == '{%s}t' % nsprefixes['w']: # t (text) elements - if element.text: - # Add this element to searchels - searchels.append(element) - if len(searchels) > bs: - # Is searchels is too long, remove first elements - searchels.pop(0) - - # Search all combinations, of searchels, starting from - # smaller up to bigger ones - # l = search lenght - # s = search start - # e = element IDs to merge - found = False - for l in range(1, len(searchels) + 1): - if found: - break - #print "slen:", l - for s in range(len(searchels)): - if found: - break - if s + l <= len(searchels): - e = range(s, s + l) - #print "elems:", e - txtsearch = '' - for k in e: - txtsearch += searchels[k].text - - # Searcs for the text in the whole txtsearch - match = searchre.search(txtsearch) - if match: - found = True - - # I've found something :) - if DEBUG: - log.debug("Found element!") - log.debug("Search regexp: %s", - searchre.pattern) - log.debug("Requested replacement: %s", - replace) - log.debug("Matched text: %s", txtsearch) - log.debug("Matched text (splitted): %s", - [i.text for i in searchels]) - log.debug("Matched at position: %s", - match.start()) - log.debug("matched in elements: %s", e) - if isinstance(replace, etree._Element): - log.debug("Will replace with XML CODE") - elif isinstance(replace(list, tuple)): - log.debug("Will replace with LIST OF" - " ELEMENTS") - else: - log.debug("Will replace with:", - re.sub(search, replace, - txtsearch)) - - curlen = 0 - replaced = False - for i in e: - curlen += len(searchels[i].text) - if curlen > match.start() and not replaced: - # The match occurred in THIS element. - # Puth in the whole replaced text - if isinstance(replace, etree._Element): - # Convert to a list and process - # it later - replace = [replace] - if isinstance(replace, (list, tuple)): - # I'm replacing with a list of - # etree elements - # clear the text in the tag and - # append the element after the - # parent paragraph - # (because t elements cannot have - # childs) - p = findTypeParent( - searchels[i], - '{%s}p' % nsprefixes['w']) - searchels[i].text = re.sub( - search, '', txtsearch) - insindex = p.getparent().index(p) + 1 - for r in replace: - p.getparent().insert( - insindex, r) - insindex += 1 - else: - # Replacing with pure text - searchels[i].text = re.sub( - search, replace, txtsearch) - replaced = True - log.debug( - "Replacing in element #: %s", i) - else: - # Clears the other text elements - searchels[i].text = '' - return newdocument - - -def getdocumenttext(document): - '''Return the raw text of a document, as a list of paragraphs.''' - paratextlist = [] - # Compile a list of all paragraph (p) elements - paralist = [] - for element in document.iter(): - # Find p (paragraph) elements - if element.tag == '{' + nsprefixes['w'] + '}p': - paralist.append(element) - # Since a single sentence might be spread over multiple text elements, - # iterate through each paragraph, appending all text (t) children to that - # paragraphs text. - for para in paralist: - paratext = '' - # Loop through each paragraph - for element in para.iter(): - # Find t (text) elements - if element.tag == '{' + nsprefixes['w'] + '}t': - if element.text: - paratext = paratext + element.text - elif element.tag == '{' + nsprefixes['w'] + '}tab': - paratext = paratext + '\t' - # Add our completed paragraph text to the list of paragraph text - if not len(paratext) == 0: - paratextlist.append(paratext) - return paratextlist - - -def coreproperties(title, subject, creator, keywords, lastmodifiedby=None): - """ - Create core properties (common document properties referred to in the - 'Dublin Core' specification). See appproperties() for other stuff. - """ - coreprops = makeelement('coreProperties', nsprefix='cp') - coreprops.append(makeelement('title', tagtext=title, nsprefix='dc')) - coreprops.append(makeelement('subject', tagtext=subject, nsprefix='dc')) - coreprops.append(makeelement('creator', tagtext=creator, nsprefix='dc')) - coreprops.append(makeelement('keywords', tagtext=','.join(keywords), - nsprefix='cp')) - if not lastmodifiedby: - lastmodifiedby = creator - coreprops.append(makeelement('lastModifiedBy', tagtext=lastmodifiedby, - nsprefix='cp')) - coreprops.append(makeelement('revision', tagtext='1', nsprefix='cp')) - coreprops.append( - makeelement('category', tagtext='Examples', nsprefix='cp')) - coreprops.append( - makeelement('description', tagtext='Examples', nsprefix='dc')) - currenttime = time.strftime('%Y-%m-%dT%H:%M:%SZ') - # Document creation and modify times - # Prob here: we have an attribute who name uses one namespace, and that - # attribute's value uses another namespace. - # We're creating the element from a string as a workaround... - for doctime in ['created', 'modified']: - elm_str = ( - '<dcterms:%s xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc' - 'e" xmlns:dcterms="http://purl.org/dc/terms/" xsi:type="dcterms:' - 'W3CDTF">%s</dcterms:%s>' - ) % (doctime, currenttime, doctime) - coreprops.append(etree.fromstring(elm_str)) - return coreprops - - -def appproperties(): - """ - Create app-specific properties. See docproperties() for more common - document properties. - - """ - appprops = makeelement('Properties', nsprefix='ep') - appprops = etree.fromstring("""<?xml version="1.0" encoding="UTF-8" standalone="yes"?> - <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"></Properties>""".encode('utf-8')) - props = \ - {'Template': 'Normal.dotm', - 'TotalTime': '6', - 'Pages': '1', - 'Words': '83', - 'Characters': '475', - 'Application': 'Microsoft Word 12.0.0', - 'DocSecurity': '0', - 'Lines': '12', - 'Paragraphs': '8', - 'ScaleCrop': 'false', - 'LinksUpToDate': 'false', - 'CharactersWithSpaces': '583', - 'SharedDoc': 'false', - 'HyperlinksChanged': 'false', - 'AppVersion': '12.0000'} - for prop in props: - appprops.append(makeelement(prop, tagtext=props[prop], nsprefix=None)) - return appprops - - -def websettings(): - '''Generate websettings''' - web = makeelement('webSettings') - web.append(makeelement('allowPNG')) - web.append(makeelement('doNotSaveAsSingleFile')) - return web - - -def relationshiplist(): - relationshiplist = \ - [ #['http://schemas.openxmlformats.org/officeDocument/2006/' - # 'relationships/numbering', 'numbering.xml'], - ['http://schemas.openxmlformats.org/officeDocument/2006/' - 'relationships/styles', 'styles.xml'], - ['http://schemas.openxmlformats.org/officeDocument/2006/' - 'relationships/settings', 'settings.xml'], - ['http://schemas.openxmlformats.org/officeDocument/2006/' - 'relationships/webSettings', 'webSettings.xml'], - ['http://schemas.openxmlformats.org/officeDocument/2006/' - 'relationships/fontTable', 'fontTable.xml'], - ['http://schemas.openxmlformats.org/officeDocument/2006/' - 'relationships/theme', 'theme/theme1.xml']] - return relationshiplist - - -def wordrelationships(relationshiplist): - '''Generate a Word relationships file''' - # Default list of relationships - # FIXME: using string hack instead of making element - #relationships = makeelement('Relationships', nsprefix='pr') - relationships = etree.fromstring( - '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006' - '/relationships"></Relationships>') - count = 0 - for relationship in relationshiplist: - # Relationship IDs (rId) start at 1. - rel_elm = makeelement('Relationship', nsprefix=None, - attributes={'Id': 'rId' + str(count + 1), - 'Type': relationship[0], - 'Target': relationship[1]} - ) - relationships.append(rel_elm) - count += 1 - return relationships - - -def savedocx( - document, coreprops, appprops, contenttypes, websettings, - wordrelationships, output, imagefiledict=None): - """ - Save a modified document - """ -# if imagefiledict is None: -# warn( -# 'Using savedocx() without imagefiledict parameter will be deprec' -# 'ated in the future.', PendingDeprecationWarning -# ) - - assert os.path.isdir(template_dir) - docxfile = zipfile.ZipFile( - output, mode='w', compression=zipfile.ZIP_DEFLATED) - - # Move to the template data path - prev_dir = os.path.abspath('.') # save previous working dir - os.chdir(template_dir) - - # Serialize our trees into out zip file - treesandfiles = {document: 'word/document.xml', - coreprops: 'docProps/core.xml', - appprops: 'docProps/app.xml', - contenttypes: '[Content_Types].xml', - websettings: 'word/webSettings.xml', - wordrelationships: 'word/_rels/document.xml.rels'} - - for tree in treesandfiles: - log.info('Saving: %s' % treesandfiles[tree]) - treestring = etree.tostring(tree, pretty_print=True).replace(b"ns0:space", b"xml:space") - docxfile.writestr(treesandfiles[tree], treestring) - - # Add & compress images, if applicable - if imagefiledict is not None: - for imagepath, picrelid in imagefiledict.items(): - archivename = 'word/media/%s_%s' % (picrelid, basename(imagepath)) - log.info('Saving: %s', archivename) - docxfile.write(imagepath, archivename) - - # Add & compress support files - files_to_ignore = ['.DS_Store'] # nuisance from some os's - for dirpath, dirnames, filenames in os.walk('.'): - for filename in filenames: - if filename in files_to_ignore: - continue - templatefile = join(dirpath, filename) - archivename = templatefile[2:] - log.info('Saving: %s', archivename) - docxfile.write(templatefile, archivename) - - log.info('Saved new file to: %r', output) - docxfile.close() - os.chdir(prev_dir) # restore previous working dir - return diff --git a/wetb/utils/report_generator/docx_document/docx_document.py b/wetb/utils/report_generator/docx_document/docx_document.py deleted file mode 100644 index 6576d995990a66a5b6ec235bedf2dfebb5edc345..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/docx_document.py +++ /dev/null @@ -1,464 +0,0 @@ -#!/usr/bin/env python - -""" -This file makes a .docx (Word 2007) file from scratch, showing off most of the -features of python-docx. - -If you need to make documents from scratch, you can use this file as a basis -for your work. - -Part of Python's docx module - http://github.com/mikemaccana/python-docx -See LICENSE for licensing information. -""" - -import os -import re -import shutil - -from mmpe.docx_document.docx import picture, table, caption, pagebreak -from mmpe.docx_document import docx -from lxml import etree - -from mmpe.functions.process_exec import pexec -from contextlib import contextmanager -from mmpe.functions.deep_coding import to_str -from mmpe.io.make_dirs import make_dirs - - -re_bullet_lst = re.compile("[+,\-,*] (.*)") -re_number_lst = re.compile("[\d]+\. (.*)") -inkscape_path = os.path.relpath(os.path.join(os.path.dirname(__file__.replace("library.zip", '')), "inkscape/inkscape.exe")) -pp = lambda t : etree.tostring(t, pretty_print=True) - -def vector_graphics_support(): - return os.path.isfile(inkscape_path) - -def prefered_graphic_format(vector=False): - if vector and vector_graphics_support(): - return "pdf" - else: - return "png" - -class ConversionError(Exception): - pass - - -def DocxDocument(doc, title='', subject='', creator='', keywords=[], page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}, delete_closed=False): - if isinstance(doc, str): - doc = DocxDocumentClass(doc, title, subject, creator, keywords, page_margins, delete_closed) - doc.open_on_exit_lst.append(True) - else: - doc.open_on_exit_lst.append(False) - return doc - -class DocxDocumentClass(object): - open_on_exit_lst = [False] - def __init__(self, filename, title='', subject='', creator='', keywords=[], page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}, delete_closed=False): - if "%" in filename: - self.filename = None - for i in range(100): - f = filename % i - template_dir = os.path.join(os.path.dirname(f), "docx_template_" + os.path.splitext(os.path.basename(f))[0]) - if os.path.isfile(f) or os.path.isdir(template_dir): - if delete_closed: - try: - os.remove(f) - if self.filename is None: - self.filename = f - except: - pass - else: - if self.filename is None: - self.filename = f - else: - self.filename = filename - try: - make_dirs(self.filename) - with open(self.filename, 'w'): - pass - except PermissionError as e: - raise Warning(str(e)) - - self.template_dir = os.path.join(os.path.dirname(self.filename), "docx_template_" + os.path.splitext(os.path.basename(self.filename))[0]) - if os.path.isdir(self.template_dir): - shutil.rmtree(self.template_dir) - shutil.copytree(os.path.join(os.path.dirname(__file__.replace("library.zip", '')), 'docx-template_clean'), self.template_dir) - docx.template_dir = self.template_dir - - self.title = title - self.subject = subject - self.creator = creator - self.keywords = keywords - - # Default set of relationshipships - the minimum components of a document - self.relationships = docx.relationshiplist() - self.imagefiledict = {} - - - # Make a new document tree - this is the main part of a Word document - self.document = docx.newdocument(page_margins=page_margins) - - # This xpath location is where most interesting content lives - self.body = self.document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] - self.h = self.h1 = self.append_heading - self.h2 = lambda s : self.append_heading(s, 2) - self.h3 = lambda s : self.append_heading(s, 3) - self.p = self.append_paragraph - self.n = lambda s : self.append_paragraph([(s, 'ns')]) - self.i = lambda s : self.append_paragraph([(s, 'i')]) - self.b = lambda s : self.append_paragraph([(s, 'b')]) - self.new_page = lambda : self.body.append(pagebreak()) - self.table = docx.table - self.paragraph = docx.paragraph - self.caption = docx.caption - self.heading = docx.heading - - def write_access(self): - try: - with open(self.filename, 'a+'): - pass - return True - except IOError: - return False - - - def close(self): - if os.path.isdir(self.template_dir): - shutil.rmtree(self.template_dir) - - - - def search(self, string): - return docx.search(self.body, string) - -# def replace(self, find_string, replace_string): -# replace(self.body, find_string, replace_string) - - - def append_heading(self, string, level=1): - self.body.append(docx.heading(string, level)) - - def append_paragraph(self, string, style='BodyText', breakbefore=False, jc='left', spacing={'before':0, 'after':6}, font_size=12): - self.body.append(docx.paragraph(string, style, breakbefore, jc, spacing, font_size)) - - def append_list(self, item_list, style): - for item in item_list: - self.append_paragraph(item, style) - - def append_numberlist(self, item_list): - self.append_list(item_list, 'ListNumber') - - def append_bulletlist(self, item_list): - self.append_list(item_list, 'ListBullet') - - def append_caption(self, tag, caption_text): - self.body.append(caption("Figure", caption_text)) - - def picture(self, path, title="", pixelwidth=None, pixelheight=None): - global inkscape_path - _, ext = os.path.splitext(path.lower()) - if ext in (".svg", '.svgz', '.eps', '.pdf'): - emf_path = path.replace(ext, '.emf') - args = [inkscape_path, path, '--export-emf=%s' % emf_path] - returncode, stdout, stderr, cmd = pexec(args) - if returncode != 0 or not os.path.exists(emf_path): - inkscape_path = "" - raise ConversionError("%s\n%s" % (stdout, stderr)) - #succeded - path = emf_path - - self.relationships, picpara = picture(self.relationships, path, title, pixelwidth, pixelheight) - return picpara - - - def append_picture(self, path, caption_text="", pixelwidth=None, pixelheight=None): - self.body.append(self.picture(path, caption_text, pixelwidth, pixelheight)) -# if caption_text != "": -# self.body.append(caption("Figure", caption_text)) - - - - def append_table(self, lst_of_lst, header=None, first_column=None, corner="", heading=False, colw=None, cwunit='dxa', - tblw=0, twunit='auto', - tblmargin={'left':.19, 'right':.19}, - borders={"all":{"color":'auto', 'val':'single', 'sz':'4'}}, - column_style={'all':{'font_size':10, 'spacing':{'before':0, 'after':0}}}): - """ - @param list contents: A list of lists describing contents. Every item in - the list can be a string or a valid XML element - itself. It can also be a list. In that case all the - listed elements will be merged into the cell. - @param bool heading: Tells whether first line should be treated as - heading or not - @param list colw: list of integer column widths specified in wunitS. - @param str cwunit: Unit used for column width: - 'pct' : fiftieths of a percent - 'dxa' : twentieths of a point - 'nil' : no width - 'auto' : automagically determined - @param int tblw: Table width - @param str twunit: Unit used for table width. Same possible values as - cwunit. - @param dict borders: Dictionary defining table border. Supported keys - are: 'top', 'left', 'bottom', 'right', - 'insideH', 'insideV', 'all'. - When specified, the 'all' key has precedence over - others. Each key must define a dict of border - attributes: - color : The color of the border, in hex or - 'auto' - space : The space, measured in points - sz : The size of the border, in eighths of - a point - val : The style of the border, see - http://www.schemacentral.com/sc/ooxml/t-w_ST_Border.htm - @param list celstyle: Specify the style for each colum, list of dicts. - supported keys: - 'align' : specify the alignment, see paragraph - documentation.""" - m = len(lst_of_lst) - n = len(lst_of_lst[0]) - if header: - - if first_column: - lst_of_lst = [[corner] + header] + [[fc] + lst for fc, lst in zip(first_column, lst_of_lst)] - else: - lst_of_lst = [header] + [ lst for lst in lst_of_lst] - lst_of_lst = [[(str(v), v)[isinstance(v, (etree._Element, list, tuple))] for v in lst] for lst in lst_of_lst] - - self.body.append(table(lst_of_lst, heading, colw, cwunit, tblw, tblmargin, twunit, borders, column_style)) - - - - def append_markdown(self, s): - number_lst = [] - bullet_lst = [] - - for l in s.split("\n"): - #bullet list - if re_bullet_lst.match(l) is not None: - bullet_lst.append(re_bullet_lst.match(l).groups()[0]) - continue - elif len(bullet_lst) > 0: - self.append_bulletlist(bullet_lst) - bullet_lst = [] - # number list - if re_number_lst.match(l) is not None: - number_lst.append(re_number_lst.match(l).groups()[0]) - continue - elif len(number_lst) > 0: - self.append_numberlist(number_lst) - number_lst = [] - - - - #headings - if l.startswith("#"): - for i in [3, 2, 1]: - if l.startswith("#"*i): - self.append_heading(l[i:], i) - break - - elif (' *' in l and "* " in l) or (" _" in l and "_ " in l): - def styleit(text_lst, style_lst, tag, style): - t_lst = [] - s_lst = [] - for t, s in (zip(text_lst, style_lst)): - while t.count(tag) > 2: #" " + tag in t and tag + " " in t: - before, rest = t.split(tag, 1) - style_text, t = rest.split(tag, 1) - t_lst.append(before);s_lst.append(s) - t_lst.append(style_text);s_lst.append(style) - else: - t_lst.append(t);s_lst.append(s) - return t_lst, s_lst - text_lst, style_lst = [l], ['n'] - text_lst, style_lst = styleit(text_lst, style_lst, "**", 'b') - text_lst, style_lst = styleit(text_lst, style_lst, "__", 'b') - text_lst, style_lst = styleit(text_lst, style_lst, "*", 'i') - text_lst, style_lst = styleit(text_lst, style_lst, "_", 'i') - self.append_paragraph(list(zip(text_lst, style_lst))) - else: - self.n(l) - - def landscape(self, page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}): - self.body.append(pagebreak('section', page_margins, portrait=False)) - - def portrait(self, page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}): - self.body.append(pagebreak('section', page_margins, portrait=True)) - - def save(self, filename=None): - if filename is not None: - self.filename = filename - - coreprops = docx.coreproperties(title=self.title, - subject=self.subject, - creator=self.creator, - keywords=self.keywords) - appprops = docx.appproperties() - contenttypes = docx.contenttypes() - websettings = docx.websettings() - wordrelationships = docx.wordrelationships(self.relationships) - # Save our document - docx.savedocx(self.document, coreprops, appprops, contenttypes, websettings, - wordrelationships, self.filename) - - def open(self): - self.save() - self.close() - import subprocess - subprocess.Popen(os.path.realpath(self.filename), shell=True, cwd=os.getcwd()) - - def __enter__(self): - return self - - def __exit__(self, type, value, traceback): - if self.open_on_exit_lst.pop(): - self.open() - - - -if __name__ == '__main__': - -# doc1 = DocxDocument('test%d.docx') -# doc1.h1("first") -# doc1.open() - with DocxDocument('test%d.docx', delete_closed=True) as doc: - doc.p("hej") - -# doc3 = DocxDocument('test%d.docx') -# doc3.h1("thirda") -# with DocxDocument(doc3) as doc: -# doc.h1("thirdb") - -# doc = DocxDocument("test%d.docx") -# doc.append_table([['1', '2'], ['3', '4']], header=['a', 'b'], first_column=['c', 'd'], corner='table') -# doc.p("") -# doc.append_table([['1', '2'], ['3', '4']], header=['a', 'b'], first_column=['c', 'd']) -# doc.p("") -# doc.append_table([['1', '2'], ['3', '4']], header=['a', 'b']) -# doc.p("") -# doc.append_table([['1', '2'], ['3', '4']], first_column=['a', 'b']) - - #table_xml = doc.table([['A1'], ['B1']], heading=False, column_style={'all':{'font_size':20, 'spacing':{'before':0, 'after':0}}}) -# p = doc.paragraph("Test", font_size=30) -# -# doc.body.append(p) -# -# doc.n("") -# -# # Append two headings and a paragraph -# doc.h("Welcome to Python's docx module") -# doc.h2('Make and edit docx in 200 lines of pure Python') -# doc.n('The module was created when I was looking for a ' -# 'Python support for MS Word .doc files on PyPI and Stackoverflow. ' -# 'Unfortunately, the only solutions I could find used:') -# -# doc.i('For those of us who prefer something simpler') -# doc.b('I made docx.') -# -# -# # Add a numbered list -# points = [ 'COM automation' -# , '.net or Java' -# , 'Automating OpenOffice or MS Office' -# ] -# doc.append_numberlist(points) -# -# doc.append_picture('image1.png', "This is a picture") -# -# doc.append_table([ [doc.picture('image1.png'), 'A2', 'A3'], -# ['B1', 'B2', 'B3'], -# ['C1', 'C2', 'C3']], False) -# -## doc.append_picture('../myplot.pdf', "test", 100, 100) -# doc.append_markdown("""#Welcome to Python's docx module -###Make and edit docx in 200 lines of pure Python -#The module was created when I was looking for a Python support for MS Word .doc files on PyPI and Stackoverflow. Unfortunately, the only solutions I could find used: -#*For those of us who prefer something simpler* **I made docx.** -# -#4. First -#5. Second -#6. Third -# -#- first -#* second -#+ third -#""") - - - #doc.append_heading('Making documents', 2) -# body.append(paragraph('The docx module has the following features:')) -# -# # Add some bullets -# points = ['Paragraphs', 'Bullets', 'Numbered lists', -# 'Multiple levels of headings', 'Tables', 'Document Properties'] -# for point in points: -# body.append(paragraph(point, style='ListBullet')) -# -# body.append(paragraph('Tables are just lists of lists, like this:')) -# # Append a table -# tbl_rows = [ ['A1', 'A2', 'A3'] -# , ['B1', 'B2', 'B3'] -# , ['C1', 'C2', 'C3'] -# ] -# body.append(table(tbl_rows)) -# -# body.append(heading('Editing documents', 2)) -# body.append(paragraph('Thanks to the awesomeness of the lxml module, ' -# 'we can:')) -# points = [ 'Search and replace' -# , 'Extract plain text of document' -# , 'Add and delete items anywhere within the document' -# ] -# for point in points: -# body.append(paragraph(point, style='ListBullet')) -# -# # Add an image -# relationships, picpara = picture(relationships, 'image1.png', -# 'This is a test description') -# body.append(picpara) -# -# # Search and replace -# print 'Searching for something in a paragraph ...', -# if search(body, 'the awesomeness'): -# print 'found it!' -# else: -# print 'nope.' -# -# print 'Searching for something in a heading ...', -# if search(body, '200 lines'): -# print 'found it!' -# else: -# print 'nope.' -# -# print 'Replacing ...', -# body = replace(body, 'the awesomeness', 'the goshdarned awesomeness') -# print 'done.' -# -# # Add a pagebreak -# body.append(pagebreak(type='page', orient='portrait')) -# -# body.append(heading('Ideas? Questions? Want to contribute?', 2)) -# body.append(paragraph('Email <python.docx@librelist.com>')) - -# # Create our properties, contenttypes, and other support files -# title = 'Python docx demo' -# subject = 'A practical example of making docx from Python' -# creator = 'Mike MacCana' -# keywords = ['python', 'Office Open XML', 'Word'] - -# coreprops = coreproperties(title=title, subject=subject, creator=creator, -# keywords=keywords) -# appprops = appproperties() -# contenttypes = contenttypes() -# websettings = websettings() -# wordrelationships = wordrelationships(relationships) -# -# # Save our document -# savedocx(document, coreprops, appprops, contenttypes, websettings, -# wordrelationships, 'Welcome to the Python docx module.docx') -# doc.save() -# doc.close() -# doc.open() -# diff --git a/wetb/utils/report_generator/docx_document/example.py b/wetb/utils/report_generator/docx_document/example.py deleted file mode 100644 index c8596f44f2cadf90401a305d8ce1c0a185ef0a13..0000000000000000000000000000000000000000 --- a/wetb/utils/report_generator/docx_document/example.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python - -""" -This file makes a .docx (Word 2007) file from scratch, showing off most of the -features of python-docx. - -If you need to make documents from scratch, you can use this file as a basis -for your work. - -Part of Python's docx module - http://github.com/mikemaccana/python-docx -See LICENSE for licensing information. -""" - -from mmpe.docx_document.docx import * - -if __name__ == '__main__': - # Default set of relationshipships - the minimum components of a document - relationships = relationshiplist() - - # Make a new document tree - this is the main part of a Word document - document = newdocument() - - # This xpath location is where most interesting content lives - body = document.xpath('/w:document/w:body', namespaces=nsprefixes)[0] - - # Append two headings and a paragraph - body.append(heading("Welcome to Python's docx module", 1)) - body.append(heading('Make and edit docx in 200 lines of pure Python', 2)) - body.append(paragraph('The module was created when I was looking for a ' - 'Python support for MS Word .doc files on PyPI and Stackoverflow. ' - 'Unfortunately, the only solutions I could find used:')) - - # Add a numbered list - points = [ 'COM automation' - , '.net or Java' - , 'Automating OpenOffice or MS Office' - ] - for point in points: - body.append(paragraph(point, style='ListNumber')) - body.append(paragraph([('For those of us who prefer something simpler, I ' - 'made docx.', 'i')])) - body.append(heading('Making documents', 2)) - body.append(paragraph('The docx module has the following features:')) - - # Add some bullets - points = ['Paragraphs', 'Bullets', 'Numbered lists', - 'Multiple levels of headings', 'Tables', 'Document Properties'] - for point in points: - body.append(paragraph(point, style='ListBullet')) - - body.append(paragraph('Tables are just lists of lists, like this:')) - # Append a table - tbl_rows = [ ['A1', 'A2', 'A3'] - , ['B1', 'B2', 'B3'] - , ['C1', 'C2', 'C3'] - ] - body.append(table(tbl_rows)) - - body.append(heading('Editing documents', 2)) - body.append(paragraph('Thanks to the awesomeness of the lxml module, ' - 'we can:')) - points = [ 'Search and replace' - , 'Extract plain text of document' - , 'Add and delete items anywhere within the document' - ] - for point in points: - body.append(paragraph(point, style='ListBullet')) - - # Add an image - relationships, picpara = picture(relationships, 'image1.png', - 'This is a test description') - body.append(picpara) - - # Search and replace - print ('Searching for something in a paragraph ...',) - if search(body, 'the awesomeness'): - print ('found it!') - else: - print ('nope.') - - print ('Searching for something in a heading ...',) - if search(body, '200 lines'): - print ('found it!') - else: - print ('nope.') - - print ('Replacing ...',) - body = replace(body, 'the awesomeness', 'the goshdarned awesomeness') - print ('done.') - - # Add a pagebreak - body.append(pagebreak(type='page', orient='portrait')) - - body.append(heading('Ideas? Questions? Want to contribute?', 2)) - body.append(paragraph('Email <python.docx@librelist.com>')) - - # Create our properties, contenttypes, and other support files - title = 'Python docx demo' - subject = 'A practical example of making docx from Python' - creator = 'Mike MacCana' - keywords = ['python', 'Office Open XML', 'Word'] - - coreprops = coreproperties(title=title, subject=subject, creator=creator, - keywords=keywords) - appprops = appproperties() - contenttypes = contenttypes() - websettings = websettings() - wordrelationships = wordrelationships(relationships) - - # Save our document - savedocx(document, coreprops, appprops, contenttypes, websettings, - wordrelationships, 'Welcome to the Python docx module.docx')