[{"data":1,"prerenderedAt":555},["ShallowReactive",2],{"lit-docx-doc:\u002Fguide\u002Freading":3},{"id":4,"title":5,"body":6,"description":542,"extension":543,"keywords":544,"locale":547,"meta":548,"navigation":549,"order":23,"path":550,"section":551,"seo":552,"stem":553,"__hash__":554},"docs\u002Fguide\u002Freading.zh-CN.md","读取 DOCX",{"type":7,"value":8,"toc":534},"minimark",[9,52,56,62,122,131,134,139,188,191,195,198,243,246,369,372,382,420,530],[10,11,16],"pre",{"className":12,"code":13,"language":14,"meta":15,"style":15},"language-ts shiki shiki-themes github-light github-light github-dark","parseDocx(buffer: Uint8Array, options?: ParseOptions): Promise\u003CParseResult>\n","ts","",[17,18,19],"code",{"__ignoreMap":15},[20,21,24,28,32,36,39,43,46,49],"span",{"class":22,"line":23},"line",1,[20,25,27],{"class":26},"sgQzM","parseDocx",[20,29,31],{"class":30},"sVPnS","(buffer: Uint8Array, options",[20,33,35],{"class":34},"sDD9d","?:",[20,37,38],{"class":30}," ParseOptions): ",[20,40,42],{"class":41},"sUNQB","Promise",[20,44,45],{"class":34},"\u003C",[20,47,48],{"class":30},"ParseResult",[20,50,51],{"class":34},">\n",[53,54,55],"h2",{"id":55},"准备输入",[57,58,59,61],"p",{},[17,60,27],{}," 只接收字节，自己不读文件，因此在任何环境里都由调用方负责拿到字节：",[63,64,65,78],"table",{},[66,67,68],"thead",{},[69,70,71,75],"tr",{},[72,73,74],"th",{},"来源",[72,76,77],{},"写法",[79,80,81,92,109],"tbody",{},[69,82,83,87],{},[84,85,86],"td",{},"Node 文件",[84,88,89],{},[17,90,91],{},"new Uint8Array(await readFile(path))",[69,93,94,104],{},[84,95,96,97,100,101],{},"浏览器 ",[17,98,99],{},"\u003Cinput type=\"file\">"," 或拖拽的 ",[17,102,103],{},"File",[84,105,106],{},[17,107,108],{},"new Uint8Array(await file.arrayBuffer())",[69,110,111,117],{},[84,112,113,116],{},[17,114,115],{},"fetch"," 响应",[84,118,119],{},[17,120,121],{},"new Uint8Array(await response.arrayBuffer())",[57,123,124,127,128,130],{},[17,125,126],{},"Blob"," 和 ",[17,129,103],{}," 不能直接传入，需要先转成字节。",[53,132,133],{"id":133},"返回值",[57,135,136,138],{},[17,137,48],{}," 只有两个字段：",[140,141,142,167],"ul",{},[143,144,145,148,149,152,153,156,157,160,161,166],"li",{},[17,146,147],{},"ast","：文档树的根节点，",[17,150,151],{},"type"," 为 ",[17,154,155],{},"\"document\"","。正文块是它的 ",[17,158,159],{},"children","，节点结构见 ",[162,163,165],"a",{"href":164},"\u002Fguide\u002Flitast","LitAST 节点模型","。",[143,168,169,172,173,175,176,179,180,183,184,187],{},[17,170,171],{},"warnings","：非致命问题列表。每条有稳定的 ",[17,174,17],{},"、可读的 ",[17,177,178],{},"message","，以及可选的 ",[17,181,182],{},"location","（出问题的 XML 位置）与 ",[17,185,186],{},"element","（元素标签名）。",[57,189,190],{},"解析尽量不中断：某一处内容无法识别或处理出错时，会变成一条警告，其余内容照常读取。",[192,193,194],"h3",{"id":194},"数据在哪里",[57,196,197],{},"样式、编号、图片不会作为单独的返回字段出现：",[140,199,200,215,233],{},[143,201,202,206,207,210,211,214],{},[203,204,205],"strong",{},"图片","直接内嵌在 ",[17,208,209],{},"image"," 节点的 ",[17,212,213],{},"attrs.src"," 中，格式为 Data URL。写入前会校验图片类型和文件签名。",[143,216,217,220,221,224,225,228,229,232],{},[203,218,219],{},"样式与编号","在解析时用于计算段落、文字和列表的格式，结果体现在各节点上。原始的 ",[17,222,223],{},"styles.xml","、",[17,226,227],{},"numbering.xml"," 保存在 ",[17,230,231],{},"ast.meta.rawXmlFiles"," 中，生成时写回。",[143,234,235,238,239,242],{},[203,236,237],{},"批注、脚注、尾注、文档属性、设置","等包级数据放在 ",[17,240,241],{},"ast.meta"," 下。",[53,244,245],{"id":245},"解析选项",[63,247,248,261],{},[66,249,250],{},[69,251,252,255,258],{},[72,253,254],{},"选项",[72,256,257],{},"默认值",[72,259,260],{},"作用",[79,262,263,292,320,343,356],{},[69,264,265,270,273],{},[84,266,267],{},[17,268,269],{},"preserveRawXml",[84,271,272],{},"保留",[84,274,275,276,279,280,283,284,287,288,291],{},"无法识别的元素保留为 ",[17,277,278],{},"unknownBlock"," \u002F ",[17,281,282],{},"unknownInline"," 节点，原始 XML 存在 ",[17,285,286],{},"rawXml"," 中，生成时原样写回。只有显式传 ",[17,289,290],{},"false"," 才会丢弃它们",[69,293,294,299,304],{},[84,295,296],{},[17,297,298],{},"numberingMode",[84,300,301],{},[17,302,303],{},"\"nested-lists\"",[84,305,306,308,309,279,312,315,316,319],{},[17,307,303],{}," 把编号段落重建为嵌套的 ",[17,310,311],{},"list",[17,313,314],{},"listItem","；",[17,317,318],{},"\"flat-numbered-paragraphs\""," 保持 Word 那样的扁平编号段落",[69,321,322,327,332],{},[84,323,324],{},[17,325,326],{},"malformedFieldMode",[84,328,329],{},[17,330,331],{},"\"best-effort\"",[84,333,334,335,338,339,342],{},"遇到格式错误的复杂域时，",[17,336,337],{},"best-effort"," 保留内容并给出警告，",[17,340,341],{},"strict"," 拒绝当前文本流",[69,344,345,350,353],{},[84,346,347],{},[17,348,349],{},"plugins",[84,351,352],{},"无",[84,354,355],{},"追加自定义解析插件，在内置插件之后参与匹配",[69,357,358,363,366],{},[84,359,360],{},[17,361,362],{},"chartSourceLimits",[84,364,365],{},"内置上限",[84,367,368],{},"限制图表源数据的体积，超过上限时拒绝导入",[53,370,371],{"id":371},"错误",[57,373,374,375,378,379,381],{},"以下情况会在读取任何内容之前抛出 ",[17,376,377],{},"DocxPackageError","，可以根据 ",[17,380,17],{}," 区分：",[63,383,384,395],{},[66,385,386],{},[69,387,388,392],{},[72,389,390],{},[17,391,17],{},[72,393,394],{},"含义",[79,396,397,407],{},[69,398,399,404],{},[84,400,401],{},[17,402,403],{},"invalid-zip-container",[84,405,406],{},"字节不是 ZIP 包，例如传错了文件",[69,408,409,414],{},[84,410,411],{},[17,412,413],{},"unsupported-compound-file-container",[84,415,416,417],{},"OLE 复合文件，常见于加密的 DOCX 或旧版 ",[17,418,419],{},".doc",[10,421,423],{"className":12,"code":422,"language":14,"meta":15,"style":15},"try {\n  const { ast } = await parseDocx(bytes);\n} catch (error) {\n  if (error instanceof DocxPackageError && error.code === \"unsupported-compound-file-container\") {\n    \u002F\u002F 提示用户：文件已加密，或者是旧版 .doc\n  } else throw error;\n}\n",[17,424,425,433,459,471,502,509,524],{"__ignoreMap":15},[20,426,427,430],{"class":22,"line":23},[20,428,429],{"class":34},"try",[20,431,432],{"class":30}," {\n",[20,434,436,439,442,444,447,450,453,456],{"class":22,"line":435},2,[20,437,438],{"class":34},"  const",[20,440,441],{"class":30}," { ",[20,443,147],{"class":41},[20,445,446],{"class":30}," } ",[20,448,449],{"class":34},"=",[20,451,452],{"class":34}," await",[20,454,455],{"class":26}," parseDocx",[20,457,458],{"class":30},"(bytes);\n",[20,460,462,465,468],{"class":22,"line":461},3,[20,463,464],{"class":30},"} ",[20,466,467],{"class":34},"catch",[20,469,470],{"class":30}," (error) {\n",[20,472,474,477,480,483,486,489,492,495,499],{"class":22,"line":473},4,[20,475,476],{"class":34},"  if",[20,478,479],{"class":30}," (error ",[20,481,482],{"class":34},"instanceof",[20,484,485],{"class":26}," DocxPackageError",[20,487,488],{"class":34}," &&",[20,490,491],{"class":30}," error.code ",[20,493,494],{"class":34},"===",[20,496,498],{"class":497},"s-HEn"," \"unsupported-compound-file-container\"",[20,500,501],{"class":30},") {\n",[20,503,505],{"class":22,"line":504},5,[20,506,508],{"class":507},"sqmzS","    \u002F\u002F 提示用户：文件已加密，或者是旧版 .doc\n",[20,510,512,515,518,521],{"class":22,"line":511},6,[20,513,514],{"class":30},"  } ",[20,516,517],{"class":34},"else",[20,519,520],{"class":34}," throw",[20,522,523],{"class":30}," error;\n",[20,525,527],{"class":22,"line":526},7,[20,528,529],{"class":30},"}\n",[531,532,533],"style",{},"html pre.shiki code .sgQzM, html code.shiki .sgQzM{--shiki-default:#6F42C1;--shiki-light:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVPnS, html code.shiki .sVPnS{--shiki-default:#24292E;--shiki-light:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sDD9d, html code.shiki .sDD9d{--shiki-default:#D73A49;--shiki-light:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sUNQB, html code.shiki .sUNQB{--shiki-default:#005CC5;--shiki-light:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s-HEn, html code.shiki .s-HEn{--shiki-default:#032F62;--shiki-light:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sqmzS, html code.shiki .sqmzS{--shiki-default:#6A737D;--shiki-light:#6A737D;--shiki-dark:#6A737D}",{"title":15,"searchDepth":435,"depth":435,"links":535},[536,537,540,541],{"id":55,"depth":435,"text":55},{"id":133,"depth":435,"text":133,"children":538},[539],{"id":194,"depth":461,"text":194},{"id":245,"depth":435,"text":245},{"id":371,"depth":435,"text":371},"parseDocx 的输入、选项、返回值、警告与错误，以及样式、编号、图片等数据在结果中的位置。","md",[27,545,546,377],"ParseOptions","警告","zh-CN",{},true,"\u002Fguide\u002Freading","指南",{"title":5,"description":542},"guide\u002Freading.zh-CN","1mmt0wRSnRNb3QmHJi7b3hrapJAXF02nS25p9Y4qCJM",1793045344143]