WEBSITE · 2.3 KB
dist/assets/pptx-preflight-DD9u5AB9.js
Workspace snapshot · 09/04 13:45
import{i as e}from"./index-CRWrv0ur.js";import{t}from"./jszip.min-DwxdCvMv.js";var n=e(t(),1),r=e=>String(e||``).replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`),i=e=>Number(e.match(/slide(\d+)\.xml$/u)?.[1]||0),a=new Set([`Arial`,`Calibri`,`Aptos`,`Times New Roman`,`Yu Gothic`,`Meiryo`,`+mj-lt`,`+mn-lt`,`+mj-ea`,`+mn-ea`]);async function o(e){let t=e instanceof ArrayBuffer?e:await e.arrayBuffer(),o=await n.default.loadAsync(t),s=Object.keys(o.files).filter(e=>/^ppt\/slides\/slide\d+\.xml$/u.test(e)).sort((e,t)=>i(e)-i(t));if(!s.length)throw Error(`PPTXのスライドを確認できませんでした`);let c=[],l=new Set;for(let e of s){let t=await o.file(e).async(`string`),n=[...t.matchAll(/<a:t>([\s\S]*?)<\/a:t>/gu)].map(e=>r(e[1])).join(``),a=(t.match(/<a:t>/gu)||[]).length,s=(t.match(/<p:sp>/gu)||[]).length,u=(t.match(/<p:pic>/gu)||[]).length,d=(t.match(/<c:chart\b/gu)||[]).length,f=/<a:(?:spAutoFit|normAutoFit)\b/gu.test(t);for(let e of t.matchAll(/typeface="([^"]+)"/gu))l.add(r(e[1]));let p=[];!a&&u&&p.push(`テキストがなく、全面画像化されている可能性`),n.length>700&&p.push(`文字量が多く、表示環境差であふれる可能性`),n.length>240&&!f&&p.push(`長文だが自動フィット設定を確認できない`),c.push({page:i(e),textCharacters:n.length,textElements:a,editableShapes:s,pictures:u,charts:d,risks:p})}let u=[...l].filter(e=>!a.has(e)),d=c.filter(e=>e.risks.some(e=>e.includes(`全面画像化`))).length,f=c.filter(e=>e.risks.length).length,p=c.reduce((e,t)=>e+t.textElements+t.editableShapes+t.charts,0),m=Math.max(0,100-Math.min(40,f*8)-Math.min(25,u.length*5)-Math.min(35,d*15)),h=[{level:d?`warn`:`pass`,label:`編集可能性`,detail:d?`${d}ページで全面画像化の可能性`:`${p}個の編集可能候補を検出`},{level:u.length?`warn`:`pass`,label:`フォント`,detail:u.length?`標準外候補: ${u.join(`, `)}`:`標準フォント範囲内`},{level:f?`warn`:`pass`,label:`レイアウト`,detail:f?`${f}ページに要確認項目`:`${c.length}ページで機械的リスクなし`}];return{score:m,verdict:m>=85?`送信前チェック良好`:m>=60?`要確認`:`修正推奨`,slideCount:c.length,customFonts:u,slides:c,findings:h,privacy:`ファイル内容はブラウザ内で解析し、外部送信しません`}}export{o as analyzePptx};