Files
SignatureSystem/lib/__pycache__/word_signer.cpython-39.pyc

99 lines
10 KiB
Plaintext
Raw Normal View History

2026-07-20 13:16:17 +08:00
a
ثXj0L<00>@s<>ddlZddlZddlZddlZddlZddlZddlmZddlmZddl m
Z
ddl m Z ddl mZddlmZe<04>e<12>Zdd<08>Zdd
d <0B>Zdd d<0E>Zdd<10>Zdd<12>Zdd<14>ZdS)<17>N)<01>datetime)<01>Document)<01>Cm)<01> process_image)<01> field_codescCst<00><01><00>d<01>dt<03><04><00><00>S)Nz%Y%m%d%H%M%S%f<>_)r<00>now<6F>strftime<6D>os<6F>getpid<69>r r <00>`E:\projects\wxwx\projects_job\GeneralRequirement\SignatureSystem\BackEnd\Code\lib\word_signer.py<70> _new_trace_idsr<00> 前端操作c5 Cs<>
|durt<00>}tjd|||d<02>d<03><00>
zd|<01>dd<05>}tjd|||d<02>d<03>|<05><04><00>d<07>s<>tjd|||d<02>d<03>dd d
d |<05><00>|d <0C>fWS|<01>d d<05>}|dvr<>tjd|||d<02>d<03>dd dd|<06><00>|d <0C>fWStjd|||d<02>d<03>ztt<08> |<00><01>}WnZt
<EFBFBD>yN}z@tjdt |<08>||d<02>d<03>dd dd|<08><00>|d <0C>fWYd}~WSd}~00tjd||d<02>d<03>|<01>dg<00>} |<01>dd<19>}
|<01>dd<1B>} |<01>dd<1D>} |<01>dd<19>} |<01>d<1F>}|<01>d d<19>}|<01>d!d"<22>}|<01>d#d<19>}|<01>d$d"<22>}|<01>d%d"<22>}|<01>d&d<19>}|d'k<02>rFd(d)<29>| D<00>} | <09>sFt j ||d*<2A>}d+d)<29>|D<00>} tjd,t| <09>||d<02>d<03>t| <09>d-k<04>r<>tjd.t| <09>||d<02>d<03>dd d/d0|d <0C>fWSg}d"}t| <09>D<00>]<5D>\}}tjd1|d2t| <09>||d<02>d<03><00>z<>|<19>d3d<05>}d}d }|d4k<02>rT|<19>d5d<05>}|<1D>rt<10>|<1D>}tjd6|<19>d7d<05>||d<02>d<03>n6|<16>d8|d2<00>d9<64><03>tjd:|d2||d<02>d<03>W<00>q<><71>n|d;k<02>r|<19>d<d<05>}|<1E>s<>|<19>d=d<05>}|<1F>rPtjd>|||d<02>d<03>t<14>|<1F>} | <20>rt| <20>d2k<04>r<>|<16>d8|d2<00>d?|<1F>d@t| <20><01>dA<64><07>tjdB|t| <20>||d<02>d<03>| d"dC}t| d"dD<00>}n8|<16>d8|d2<00>dE|<1F>dF<64><05>tjdG|||d<02>d<03>W<00>q<>n6|<16>d8|d2<00>dH<64><03>tjdI|d2||d<02>d<03>W<00>q<>n<EFBFBD>tjdJ|||d<02>d<03>t<14>|<1E>}!|!<21>r<>|!dC}t|!dD<00>}tjdK|||d<02>d<03>n8|<16>d8|d2<00>dL|<1E>dF<64><05>tjdM|||d<02>d<03>W<00>q<><71>nB|dNk<02>rN|<19>d=d<05>}|<1F>sh|<16>d8|d2<00>dO<64><03>tjdP|d2||d<02>d<03>W<00>q<>tjdQ|||d<02>d<03>t<14>|<1F>} | <20>rt| <20>d2k<04>r<>|<16>d8|d2<00>d?|<1F>d@t| <20><01>dA<64><07>tjdB|t| <20>||d<02>d<03>| d"dC}t| d"dD<00>}tjdR|||d<02>d<03>n8|<16>d8|d2<00>dE|<1F>dF<64><05>tjdG|||d<02>d<03>W<00>q<><71>n
|d'k<02>rX|}"|"<22>dS<64><01>rt|"dTd<00>}"t <0C>|"<22>}"tjdU||"||d<02>d<03>t<14>|"<22>} | <20>r t| <20>d2k<04>r<>|<16>d8|d2<00>d?|"<22>dV<64><05>tjdW|"t| <20>||d<02>d<03>| d"dC}t| d"dD<00>}tjdX|"||d<02>d<03>n8|<16>d8|d2<00>dY|"<22>dF<64><05>tjdZ|"||d<02>d<03>W<00>q<>|<1B>sz|<16>d8|d2<00>d[<5B><03>W<00>q<>|<19>dD|<1C>}#t|| |<0E>}$t|||<10>}%t||||<13>\}&}'|
<EFBFBD>s<>|<19>d<1A>n| }(|
<EFBFBD>s<>|<19>d<1C>n| })t||#|%|&|'|d\<5C>}*<2A>zd"dl}+|+j<1F> |+j<1F>!|+j<1F>!|+j<1F>"t#<23><01><01>d]d^d_<64>},|+j$|,dd`<60>|<03>p8da<64>db|d2<00><00>}-t%|+j<1F> |,|-<2D>dc<64><02>dd<64><02>}.|.<2E>&|<1B>Wd<00>n1<00>s<>0Yt%|+j<1F> |,|-<2D>de<64><02>dd<64><02>}.|.<2E>&|*<2A>Wd<00>n1<00>s<>0Ytjdf|,|-||d<02>d<03>Wn@t
<EFBFBD> y.}/z&tjdgt |/<2F>||d<02>d<03>WYd}/~/n
d}/~/00t'|||*|(|)|$|||dh<64> }0|0d"k<04> r|||07}tjdi|d2||0||d<02>d<03>n2|<16>d8|d2<00>dj|<1A>dk<64><05>tjdl|||d<02>d<03>Wndt
<EFBFBD>
y}zJ|<16>d8|d2<00>dmt |<08><01><00><04>tjdn|d2t |<08>||d<02>d<03>WYd}~n
d}~00<00>q<>t<08> <09>}1|<07>(|1<>|1<>)d"<22>|1<>*<2A>}2tj<1F>+|<05>d"}3|3<>do<64>}4tjdp|t|<16>|||d<02>d<03>|2|4|||dq<64>dfWSt
<EFBFBD>
y<EFBFBD>}z<tjdrt |<08>||d<02>d<03>dd dst |<08>|d <0C>fWYd}~Sd}~00dS)tNu5[签章流程] ====== 开始处理 ====== trace_id=%s)<02>
log_source<EFBFBD>trace_id)<01>extra<72> docx_name<6D>u[签章流程] 文件名: %sz.docxu5[参数校验] 文件类型错误: %s, 仅支持.docxFZINVALID_FILE_TYPEu仅支持.docx格式当前: )Zsuccess<73>code<64>messager<00>
match_mode)<04>upload<61>id<69>name<6D>autou%[参数校验] 匹配模式无效: %sZINVALID_MATCH_MODEu匹配模式无效: u[签章流程] 匹配模式: %su)[参数校验] Word文档解析失败: %sZ INVALID_DOCXu$Word文档解析失败或已损坏: u%[签章流程] Word文档加载成功<E68890>stamps<70>use_global_alignT<6E>align_h<5F>left<66>align_v<5F>center<65>use_global_height<68>height<68>use_global_noise<73> noise_levelr<00>use_global_rotate<74>
rotate_min<EFBFBD>
rotate_max<EFBFBD> relax_layoutrcSs"g|]}|<01>d<00>pd<01><01>r|<01>qS)<02>markerr)<02>get<65>strip)<02>.0<EFBFBD>sr r r <00>
<listcomp>I<00>zsign_word.<locals>.<listcomp>)rcSsg|]}d|di<01>qS)r*r )r-<00>itemr r r r/Lr0u/[签章流程] auto模式扫描到 %d 个标记<E6A087>du.[参数校验] 盖章项超过100个限制: %dZTOO_MANY_STAMPSu盖章项超过100个限制u.[签章流程] ---- 处理盖章项 %d/%d ----<2D>r*r<00> image_base64u%[图片匹配] 使用上传图片: %s<>image_filenameu 盖章项u: 缺少图片数据u,[图片匹配] 盖章项%d缺少图片数据r<00>image_id<69>
image_nameu7[图片匹配] image_id 为空,改用姓名查询: %su : 姓名=u 匹配到 u 条记录使用第一条uA[图片匹配] 姓名匹配多条: %s -> %d 条使用第一条Z
sign_image<EFBFBD> is_signatureu: 未找到姓名=u
的记录u![图片匹配] 未找到姓名=%su: 缺少人员ID和姓名u1[图片匹配] 盖章项%d缺少人员ID和姓名u[图片匹配] 按ID查询: %su![图片匹配] ID匹配成功: %su: 未找到ID=u[图片匹配] 未找到ID=%sru: 缺少人员姓名u,[图片匹配] 盖章项%d缺少人员姓名u"[图片匹配] 按姓名查询: %su%[图片匹配] 姓名匹配成功: %s<>USER_<52>u5[图片匹配] auto模式, 标记=%s, 查询姓名=%su 匹配多条使用第一条u0[图片匹配] auto 姓名匹配多条: %s -> %du#[图片匹配] auto匹配成功: %su: auto模式未找到姓名=u%[图片匹配] auto未找到姓名=%su: 无有效图片数据)r8r%r'r(r<00>
image_test<EFBFBD>outputZ project_run)<01>exist_okZno_traceZ_stampz _1_input.png<6E>wbz_2_processed.pnguC[签章流程][DEBUG] 已保存处理前后对比图到 %s (tag=%s)u/[签章流程][DEBUG] 保存调试图失败: %s)<04> height_cmr)rru>[签章流程] 盖章项%d签章成功: marker=%s, 插入%d处u: 未找到标记 '<27>'u"[签章流程] 未找到标记: %su: 处理异常 - u*[签章流程] 盖章项%d处理异常: %sz _signed.docxuO[签章流程] ====== 处理完成 ====== 成功%d项, 告警%d条, trace_id=%s)<05>data<74>filename<6D>warningsr<00> success_countu[签章流程] 处理失败: %sZINTERNAL_ERROR),r<00>logger<65>infor+<00>lower<65>endswith<74>errorr<00>io<69>BytesIO<49> Exception<6F>strr<00>scan_user_markers<72>len<65> enumerate<74>base64<36> b64decode<64>append<6E>warning<6E>dbZget_image_by_user_name<6D>boolZget_image_by_user_id<69>
startswith<EFBFBD>_strip_switches<65>_resolve_height<68>_resolve_noise<73>_resolve_rotaterr
<00>path<74>join<69>dirname<6D>abspath<74>__file__<5F>makedirs<72>open<65>write<74>_insert_signature_image<67>save<76>seek<65>read<61>splitext)5<> docx_data<74>paramsrrZ client_iprr<00>doc<6F>errrr r"Z global_heightr$Z global_noiser&Zglobal_rotate_minZglobal_rotate_maxr)ZscannedrCrD<00>i<>stampr*<00>
image_dataZstamp_is_signatureZ image_b64r6r7<00>records<64>recordZname_from_markerZis_sig<69>hZnoiseZrot_minZrot_maxZ s_align_hZ s_align_v<5F> processed<65>_osZ
_debug_dir<EFBFBD>_tagZ_fZ_e<5F>insertedZ
output_bufZ result_data<74> base_nameZ output_namer r r <00> sign_words<08> <08><08><02>
 <08>
<EFBFBD>
<08> <08>
<EFBFBD> <08>     
      
 <08> <08><04>
<08> 
 
<08> <08>

  <08>
&<08> <08> <08><08>
 <08><08>

  <08><08>
&<08> <08><08>

  

<08>
<08> <08><08>   <02> <06>**<08>
 <08> <04>

<08><08>
<08> 



<08><02><02> <08><08>rxTc Cstjddd<03><02> } | <09>|<02>| j}
Wd<00>n1s40Yz<>d} |r<>|dkr<>ddlm} | <0C>t<07>|<02><01>} | j \}}|r<>|||n|} t
j |||
| |||d<07>}|Wzt <0C> |
<EFBFBD>WSty<>YS0Szt <0C> |
<EFBFBD>Wnty<>Yn0n&zt <0C> |
<EFBFBD>Wnt<0E>yYn00dS)u<>插入签名图片到 marker 对应的 SET 域后。
``height_cm`` 为用户配置的目标高度(厘米)。若为 None则**透传 None 给
insert_image_after_field**,由后者根据插入位置的段落行高 + 字号自动推算
`_auto_size_height_cm`)。
``relax_layout`` 透传给 :func:`field_codes.insert_image_after_field`
控制是否自动放宽段落 / 表格行的固定高度约束以避免签名被裁剪。
z.pngF)<02>suffix<69>deleteNr)<01>Image)rr))<0F>tempfileZNamedTemporaryFilercr<00>PILr{rbrJrK<00>sizer<00>insert_image_after_fieldr
<00>unlinkrL)rkr*rorr r?r)rr<00>tmpZtmp_path<74>width_cmZPILImage<67>imgZimg_w<5F>img_h<5F>countr r r rds8 
$  

<04> <06> <08>rdc Cs<>|r^|dvrdSz0t|<02>}d|kr.dkr>nn t|d<04>WSWnttfyXYdS0dS|<00>d<05>}|dvr<>z0t|<03>}d|kr<>dkr<>nn t|d<04>WSWnttfy<>Yn0dS)N<>Nrg<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g$@r3r#)<05>float<61>round<6E>
ValueError<EFBFBD> TypeErrorr+)rn<00>
use_global<EFBFBD>
global_valrrr r r rYAs&
rYc Cs<>|r4z|dvrt|<02>ndWSttfy2YdS0|<00>d<03>}|dvr<>z*t|<03>}d|krddkrnnn|WSWnttfy<>Yn0dS)Nr<4E>rr%<00>
)<04>intr<74>r<>r+)rnr<>r<><00>nr r r rZWs

rZc Cs|r<>z|dvrt|<02>nd}Wnttfy6d}Yn0z|dvrJt|<03>nd}Wnttfyjd}Yn0tdtd|<04><02>tdtd|<05><02>fS|<00>dd<02>}|<00>dd<02>}ztdtdt|<06><01><02>}Wnttfy<>d}Yn0ztdtdt|<07><01><02>}Wnttf<02>y d}Yn0||fS)Nr<4E>riL<69><4C><EFBFBD><EFBFBD><EFBFBD>r'r()r<>r<>r<><00>max<61>minr+)rnr<>Z
global_minZ
global_maxZrminZrmaxZr_minZr_maxr r r r[hs*

   

r[)rNN)NTrN)rJr
<00>rerQ<00>loggingr|r<00>docxr<00> docx.sharedrZlib.dbrUZlib.image_processorr<00>libr<00> getLogger<65>__name__rErrxrdrYrZr[r r r r <00><module>s.      


<00>
$