
    9iL                         S SK r S SKrS SKrS SKrS SKrS SKJrJrJr  SSK	J
r
  S rS rSS jrS rS	 rSS
 jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r \!S:X  a  \ " 5         gg)    N)DictListSet   )pymupdfc                 ,    SU -  R                  SS5      $ )Nz %s K   -)center)xs    P/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/pymupdf/__main__.pymycenterr      s    QJr3''    c                 ,   US   nUS   nUS:X  a  U R                  U5      $ S n[        R                  " X5      n[        R                  " X5      n UR                  UR                  :X  a4  UR                  UR                  s=:X  a  S:X  a  O  OUR
                  S:X  d:  [        R                  " SX24-  5        [        R                  " U5        SnU" U5      $ [        R                  " U5      nUR                  UR                  5        S=pVU" U5      $ )zReturn image for a given XREF.r   r   c                     U R                   R                  S:w  a  U $ [        R                  " [        R                  U 5      nU$ )N   )
colorspacenr   PixmapcsRGB)pixtpixs     r   getimagerecoverpix.<locals>.getimage   s2    >>q J~~gmmS1r   z&Warning: unsupported /SMask %i for %i:N)	extract_imager   r   irectalphar   message	set_alphasamples)docitemr   sr   pix1pix2r   s           r   
recoverpixr&      s    QAQAAv  ## >>#!D>>#!D
 JJ$**$tzz)FQ)F466UV;@A6IJ~
..
CMM$,,D C=r   c                    [         R                  " U 5      nUR                  (       d  USL a  [        R                  " S5        SnUR
                  (       d  U$ U(       aV  UR                  U5      nU(       d  [        R                  " S5        USL a!  [         R                  " US:  a  SS-  OS5        U$ [        R                  " S	UR                  -  5        U$ )
z!Open and authenticate a document.Tz$this command supports PDF files onlyzauthentication unsuccessful   zauthenticated as %sowneruserz'%s' requires a password)	r   openis_pdfsysexit
needs_passauthenticater   name)filenamepasswordshowpdfr!   rcs         r   	open_filer8   9   s    
,,x
 C::#+78	B>>
h'HH234<OOrAv1G;6R J 	+chh67Jr   c                    [        U R                  5        Vs/ s H  n[        U5      PM     sn5      S-   nU R                  5        H3  u  pUR	                  U5      < SU< 3n[
        R                  " U5        M5     gs  snf )zPrint a Python dictionary.r   : N)maxkeyslenitemsrjustr   r   )r"   klvmsgs        r   
print_dictrD   L   s_    TYY[)[SV[)*Q.A

''!*a(  *s   A?c                    [         R                  " SU-  5        U R                  U5      n[         R                  " U5        U R                  U5      (       ap  UR	                  5       n UR                  S5      S-   nX4   nUR                  S5      (       a  Sn[         R                  " SU-  5        [         R                  " S5        [         R                  " S5        g	! [         a    Sn NTf = f)
zuPrint an object given by XREF number.

Simulate the PDF source in "pretty" format.
For a stream also print its size.
z%i 0 objz/Lengthr   z0 Runknownzstream
...%s bytes	endstreamendobjN)r   r   xref_objectxref_is_streamsplitindexendswith	Exception)r!   xrefxref_strtempidxsizes         r   
print_xrefrT   T   s     OOJ%&t$HOOH
$~~	**Y'!+C9D}}U##  	-45$OOH	  	D	s   (0C C-,C-c           	      V   [        US-
  5      nU R                  SU5      R                  SS5      n U R                  S5      n/ n[        U5       GH+  u  pgUS-   nUR	                  5       (       aR  [        U5      n	SU	s=::  a  U:  a  O  OUR                  [        U5      5        O[        R                  " SX(4-  5        Mr   UR                  S5      u  p[        U
5      n
[        U5      nSW
s=::  a  U:  a  O  OSWs=::  a  U:  d  O  [        R                  " SX(4-  5        U
W:X  a  UR                  U
5        M  X:  a  U[        [        XS-   5      5      -  nGM  U[        [        XS-
  S	5      5      -  nGM.     U$ ! [         a    [        R                  " SX(4-  5         Nf = f)
a'  Transform a page / xref specification into a list of integers.

Args
----
    rlist: (str) the specification
    limit: maximum number, i.e. number of pages, number of objects
    what: a string to be used in error messages
Returns
-------
    A list of integers representing the specification.
r   N  ,zbad %s specification at item %ir
   z%bad %s range specification at item %ir(   )strreplacerK   	enumerate	isdecimalintappendr.   r/   rN   listrange)rlistlimitwhatrV   	rlist_arrout_listseqr"   r   ii1i2s               r   get_listrk   k   sp    	EAIAMM#q!))#r2EC IHy)	!G>>D	AA~~D	*:dYFG	JZZ_FBRBRB R%AOeOHH<yHI8OOB7U2Av.//HU2Avr233H5 *8 O  	JHH<yHI	Js   )F$F('F(c                 F   [        U R                  U R                  S5      n[        R                  R                  U R                  5      S-  nSnUS:  a  US-  nSn[        US5      nUR                  n[        R                  " SU R                  UR                  UR                  5       S-
  UUUS   US	   4-  5        UR                  nUS
:  a2  UR                  5       n[        R                  " SXVS:w  a  SOS4-  5        UR                  5       nUS
:  a  [        R                  " SU-  5        [        R                  " 5         U R                  (       aO  [        R                  " [!        S5      5        UR#                  5       n[%        X5        [        R                  " 5         U R                  (       aI  [        R                  " [!        S5      5        ['        UR                  5        [        R                  " 5         U R(                  (       ak  [        R                  " [!        S5      5        [+        U R(                  UR                  5       SS9nU H#  n[%        X5        [        R                  " 5         M%     U R,                  (       a  [        R                  " [!        S5      5        [+        U R,                  UR                  S-   5      n	U	 HR  n
U
S-
  nUR/                  U5      n[        R                  " SU
-  5        [%        X5        [        R                  " 5         MT     U R0                  (       aX  [        R                  " [!        S5      5        [        R                  " UR3                  5       5        [        R                  " 5         UR5                  5         g )NTi   KBi  MBr   z7'%s', pages: %i, objects: %i, %g %s, %s, encryption: %sformat
encryptionr   z5document contains %i root form fields and is %ssigned   znot rX   z#document contains %i embedded fileszPDF catalogzPDF metadatazobject informationrO   )rd   zpage informationzPage %i:zPDF trailer)r8   inputr4   ospathgetsizeroundmetadatar   r   
page_countxref_lengthis_form_pdfget_sigflagsembfile_countcatalogr   pdf_catalogrT   rD   xrefsrk   pages	page_xreftrailerpdf_trailerclose)argsr!   rS   flagmetar   r#   rO   xreflpagelpnos              r   r5   r5      s   
DJJt
4C77??4::&-DDd{q>D<<DOOAJJNNOO!N
		
 	A1uCF&+,	
 	A1u=ABOO||/0 3}}013<< zz!567S__%6VDDs!OO  zz!345S^^a%78CaA==#DOOJ,-s!OO  ||/0)*IIKr   c                    [        U R                  U R                  SS9nU R                  nSR	                  U5      nU R
                  (       d~  UR                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  UU R                  U R                  U R                   S9  g [#        U R
                  UR$                  S-   5      n[&        R(                  " 5       nU H  nUS-
  nUR+                  XUS9  M     UR                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  UU R                  U R                  U R                   S9  UR-                  5         UR-                  5         g )NTr6   keepnonezrc4-40zrc4-128zaes-128zaes-256)
garbagedeflateprettycleanasciilinearrp   owner_pwuser_pwpermissionsr   	from_pageto_page)r8   rr   r4   rp   rL   r   saveoutputr   compressr   sanitizer   r   r*   r+   
permissionrk   rx   r   r,   
insert_pdfr   )r   r!   rp   encryptr   outdocr   r   s           r   r   r      s[   
DJJ4
8CJIOOG ::KKLLMM;;--**;;ZZII 	 	
 	 TZZ!!34E\\^F!G#A6  KK{{mmjj{{		OO   IIK
LLN
r   c                 6   U R                   n[        R                  " 5       nU H  nUR                  S5      n[	        U5      S:  a  US   OSn[        US   USS9nSR                  USS 5      nU(       a,  [        SR                  USS 5      UR                  S-   5      nO[        SUR                  S-   5      nU H  n	UR                  XiS-
  U	S-
  S9  M     UR                  5         M     UR                  U R                  S	SS
9  UR                  5         g)z&Join pages from several PDF documents.rY   r   Nr   Tr   r)   r   r   )r   r   )rr   r   r,   rK   r=   r8   joinrk   rx   ra   r   r   r   r   )
r   doc_listr!   src_itemsrc_listr4   srcr   	page_listrh   s
             r   doc_joinr     s    zzH
,,.C>>#&"%h-!"38A;X48!"& (12,!7!9KLIa!!34IANN3a%QN? 		  HHT[[!TH2IIKr   c           	         [        U R                  U R                  SS9nUR                  5       (       dA  U R                  (       a  U R                  U R                  :X  a  [
        R                  " S5        [        U R                  U R                  5      nU R                  (       a  [        U R                  5      O	[        5       n[        UR                  5       5      nU(       a  X4::  d  [
        R                  " S5        OUnU(       d  [
        R                  " S5        U[        UR                  5       5      -  nU(       a"  [
        R                  " S[        U5      -  5        U Hj  nUR                  U5      nUR                  U5      nUR                  UUUS   US   US	   S
9  [         R"                  " SU< SUR                  < S35        Ml     UR%                  5         U R                  (       a5  U R                  U R                  :w  a  UR'                  U R                  SS9  OUR)                  5         UR%                  5         g)z!Copy embedded files between PDFs.Tr   cannot save PDF incrementallyz%not all names are contained in sourceznothing to copyz2following names already exist in receiving PDF: %sr3   	ufilenamedescr3   r   r   zcopied entry 'z' from ''rq   r   N)r8   rr   r4   can_save_incrementallyr   r.   r/   source	pwdsourcer2   setembfile_namesrZ   embfile_infoembfile_getembfile_addr   r   r   r   saveIncr)	r   r!   r   names	src_names	intersectr"   infobuffs	            r   embedded_copyr     s   
DJJ4
8C%%''KK4;;$**401
DKK
0C"iiC		NSUEC%%'(I!HH<="#C--/00IEIVW%t$*%;'f 	 	
 	sxxHI  IIK{{t{{djj0a(IIKr   c                    [        U R                  U R                  SS9nUR                  5       (       dA  U R                  (       a  U R                  U R                  :X  a  [
        R                  " S5         UR                  U R                  5        U R                  (       a  U R                  U R                  :X  a  UR                  5         OUR                  U R                  SS9  UR                  5         g! [        [        R                  R                  4 a1  n[
        R                  " SU R                  < SU 35         SnANSnAff = f)	zDelete an embedded file entry.Tr   r   no such embedded file r:   Nr   r   )r8   rr   r4   r   r   r.   r/   embfile_delr2   
ValueErrorr   mupdfFzErrorBaser   r   r   )r   r!   es      r   embedded_delr   E  s    
DJJ4
8C%%''KK4;;$**401>		" ;;$++3a(IIK 112 >)$))b<==>s   7C9 9$E'E		Ec                    [        U R                  U R                  SS9n UR                  U R                  5      nUR                  U R                  5      nU R                  (       a  U R                  OWS   n[        US5       nUR                  W5        SSS5        [        R                  " SU R                  < S	U< S
35        UR!                  5         g! [        [        R                  R                  4 a1  n[        R                  " SU R                  < SU 35         SnANSnAff = f! , (       d  f       N= f)z&Retrieve contents of an embedded file.Tr   r   r:   Nr3   wbzsaved entry 'z' as 'r   )r8   rr   r4   r   r2   r   r   r   r   r   r.   r/   r   r,   writer   r   )r   r!   streamdr   r3   r   s          r   embedded_getr   X  s    
DJJ4
8C>+TYY' #kkt{{q}H	h	V 
OO$))XFGIIK 112 >)$))b<==> 
	s#   6C D1$D.='D))D.1
D?c                 d   [        U R                  U R                  SS9nUR                  5       (       d=  U R                  b  U R                  U R                  :X  a  [
        R                  " S5         UR                  U R                  5        [
        R                  " SU R                  -  5        [        R                  R                  U R                  5      (       a.  [        R                  R                  U R                  5      (       d#  [
        R                  " SU R                  -  5        [        U R                  S5       nUR                  5       nSSS5        U R                  nUnU R                   (       d  UnOU R                   nUR#                  U R                  WXEUS9  U R                  (       a  U R                  U R                  :X  a  UR%                  5         OUR'                  U R                  S	S
9  UR)                  5         g! [         a     GNlf = f! , (       d  f       N= f)zInsert a new embedded file.Tr   Nr   zentry '%s' already existszno such file '%s'rbr   rq   r   )r8   rr   r4   r   r   r.   r/   r   r2   rN   rs   rt   existsisfiler,   readr   r   r   r   r   r   r!   fr   r3   r   r   s          r   embedded_addr   g  sy   
DJJ4
8C%%''t{{djj801		",tyy89 77>>$))$$BGGNN499,E,E$tyy01	dii	! 
yyHI99yyOO		6H   ;;$++3a(IIK)  
 
	s   3>H H!
HH!
H/c                    [        U R                  U R                  SS9nUR                  5       (       d=  U R                  b  U R                  U R                  :X  a  [
        R                  " S5         UR                  U R                  5        U R                  b  [        R                  R                  U R                  5      (       a^  [        R                  R                  U R                  5      (       a0  [        U R                  S5       nUR                  5       nSSS5        OSnU R                   (       a  U R                   nOSnU R"                  (       a  U R"                  nO U R                   (       a  U R                   nOSnU R$                  (       a  U R$                  nOSnUR'                  U R                  WXEUS9  U R                  b  U R                  U R                  :X  a  UR)                  5         OUR+                  U R                  SS	9  UR-                  5         g! [         a'    [
        R                  " SU R                  -  5         GNf = f! , (       d  f       GN@= f)
z0Update contents or metadata of an embedded file.Tr   Nr   no such embedded file '%s'r   r   rq   r   )r8   rr   r4   r   r   r.   r/   r   r2   rN   rt   rs   r   r   r,   r   r3   r   r   embfile_updr   r   r   r   s          r   embedded_updr     s   
DJJ4
8C%%''t{{djj801;#
 			GGNN499%%GGNN499%%$))T"aVVXF #" }}==~~NN		MM		yyyyOO		6H   {{dkkTZZ7a(IIKK  ;-		9:; #"s   3H& I&-II
I)c                 8   [        U R                  U R                  SS9nUR                  5       nU R                  b  U R                  U;  a$  [
        R                  " SU R                  -  5        O[        R                  " 5         [        R                  " S[        U5      [        U5      S:  a  SOS4-  5        [        R                  " 5         [        UR                  U R                  5      5        [        R                  " 5         gU(       d$  [        R                  " S	UR                  -  5        g[        U5      S:  a  S
UR                  [        U5      4-  nOSUR                  -  n[        R                  " U5        [        R                  " 5         U Hl  nU R                  (       d  [        R                  " U5        M,  UR                  U5      n[        UR                  U5      5        [        R                  " 5         Mn     UR                  5         g)zList embedded files.Tr   Nr   z!printing 1 of %i embedded file%s:r   r#   rX   z'%s' contains no embedded filesz-'%s' contains the following %i embedded filesz)'%s' contains the following embedded file)r8   rr   r4   r   r2   r.   r/   r   r   r=   rD   r   detailr   )r   r!   r   rC   r2   _s         r   embedded_listr     sr   
DJJ4
8CEyy99E!HH1DII=>OOOO3u:c%j1ns"=> OOs''		23OO9CHHDE
5zA~=3u:@VV9CHHDOOCOO{{OOD!T"3##D)*  IIKr   c           
      *   U R                   (       d'  U R                  (       d  [        R                  " S5        [	        U R
                  U R                  SS9nU R                  (       a$  [        U R                  UR                  S-   5      nO[        SUR                  S-   5      nU R                  (       d.  [        R                  R                  [        R                  5      nOmU R                  n[        R                  R!                  U5      (       a$  [        R                  R#                  U5      (       d  [        R                  " SU-  5        [%        5       n[%        5       nU GH  nU R                   (       a  UR'                  US-
  5      nU H  nUS   n	X;  d  M  UR)                  U	5        UR+                  U	5      u  ppUS:X  d  U(       d  MC  [        R                  R-                  X:R/                  SS	5       S	U	 S
U 35      n[1        US5       nUR3                  U5        SSS5        SnM     U R                  (       d  M  UR5                  US-
  5      nU GH	  nUS   n	X;  d  M  UR)                  U	5        [7        X5      n[9        U5      [:        L aV  US   nUS   n[        R                  R-                  USX4-  5      n[1        US5       nUR3                  U5        SSS5        M  [        R                  R-                  USU	-  5      nUR<                  R>                  S:  a  UO$[@        RB                  " [@        RD                  U5      nURG                  U5        GM     GM     U R                   (       a$  [@        RH                  " S[K        U5      U4-  5        U R                  (       a$  [@        RH                  " S[K        U5      U4-  5        URM                  5         g! , (       d  f       GN= f! , (       d  f       GM  = f)z)Extract images and / or fonts from a PDF.z"neither fonts nor images requestedTr   r   z"output directory %s does not existr   zn/arW   r
   .r   Nextimagez	img-%i.%sz
img-%i.pngr   zsaved %i fonts to '%s'zsaved %i images to '%s')'fontsimagesr.   r/   r8   rr   r4   r   rk   rx   ra   r   rs   rt   abspathcurdirr   isdirr   get_page_fontsaddextract_fontr   r[   r,   r   get_page_imagesr&   typedictr   r   r   r   r   r   r   r=   r   )r   r!   r   out_dir
font_xrefsimage_xrefsr   itemlistr"   rO   fontnamer   r   bufferoutnameoutfiler   imgdatar%   s                      r   extract_objectsr     s   ::dkk56
DJJ4
8CzzS^^a%78a!+,;;''//")),++w''BGGMM',B,BHH9GCDJ%K::))#'2H Aw)NN4(/2/?/?/E,H1e|6  ggll$4$4S#$>#?qau!MG gt,f- -!F ! ;;;**373H Aw*OOD)$S/CCyD(!%j"%g,"$'',,wtk8Q"R!'40G#MM'2 10 #%'',,wt8K"L  #~~//!3  !(s!C 
 		'*% !% L zz0C
OW3MMN{{1S5Ew4OOPIIK; -, 10s   O0P0
O?
Pc                     U(       a  SO[        S/5      nU R                  SUS9nU(       d  U(       d  UR                  U5        g UR                  UR                  SSS95        UR                  U5        g )N   
   textflagsutf8surrogatepasserrors)bytesget_textr   encode)	pagetextoutGRIDfontsize
noformfeed
skip_emptyr   eopr   s	            r   page_simpler  !  s`    %5";C==u=-DMM#MM$++f_+=>MM#
r   c                 $   U(       a  SO[        S/5      nU R                  SUS9nU/ :X  a  U(       d  UR                  U5        g UR                  S S9  U H%  n	UR                  U	S   R	                  SS	S
95        M'     UR                  U5        g )Nr   r   blocksr   c                     U S   U S   4$ )Nrq   r    )bs    r   <lambda> page_blocksort.<locals>.<lambda>4  s    qtQqTlr   keyr   r   r   r  )r  r  r   sortr  )
r  r  r  r	  r
  r  r   r  r  r  s
             r   page_blocksortr  -  s    %5";C]]85]1F|MM#
KK*K+adkk&kAB MM#
r   c                   ^^! U(       a  SO[        S/5      nS[        [           S[        S[        4S jnS[        [           S[        4S jn	S	[        [           S
[
        R                  4UU!4S jjn
S[        S[        4S jm!S nU R                  SUS9S	   nU
" X5      u  pnnnU/ :X  a  U(       d  UR                  U5        g U	" X5      nUR                  S S9  0 nU H;  nUu    nnnU" UU5      nUR                  U/ 5      nUR                  U5        UUU'   M=     [        UR                  5       5      nUR                  5         UU-
  n0 nU Hk  nUU   n[        U5      nUS:  a  SUU'   M   U Vs/ s H  nUS   PM
     nnUR                  5         [         R"                  " U5      nUU:  a  UnUS   UU'   Mm     UUS   US   -
  -  U[        U5      -  -  S-  nUS   nUR                  S5        U H_  nUU:  a  UR                  S5        UU-  nUU:  a  M  U" UUUU   UU   5      n UR                  U S-   R%                  SSS95        UU-   nMa     UR                  U5        g s  snf )Nr   r   valuesvaluereturnc                 h    [         R                  " X5      nU(       a  XS-
     $ [        SX4-  5      e)zFind the right row coordinate.

Args:
    values: (list) y-coordinates of rows.
    value: (int) lookup for this value (y-origin of char).
Returns:
    y-ccordinate of appropriate line for value.
r   zLine for %g not found in %s)bisectbisect_rightRuntimeError)r  r  rh   s      r   find_line_index$page_layout.<locals>.find_line_index?  s6     .a%= 8E?JKKr   rowsc                     [        U 5      n U R                  5         U S   /nU SS   H!  nX2S   U-   :  d  M  UR                  U5        M#     U$ )Nr   r   r(   )r`   r  r_   )r#  r  nrowshs       r   curate_rows page_layout.<locals>.curate_rowsN  sP    Dz		a	abA"I$$Q  r   r  r  c           
      $  > [        5       nUR                  R                  nUR                  R                  nUnUnSn/ nU  GHF  n	U	S    GH8  n
U
S   S:w  a  M  U
S   u  ppUS:  d  XR                  R                  :  a  M8  X-
  nX_:  a  UnU
S    H  nUS   T::  a  M  US    H  nUS   u  nnnnX-
  nUS	   u  nn[	        [        U5      5      nUR                  U5        US
   nUU:  a  US:w  a  UnX}:  a  UnUS:X  ab  U/ :w  a\  US   u  nnnnUU:X  aL  U[        S5      :w  a  T" UU-   5      nO&US:X  a  [        S5      nOUS:X  a  [        S5      nOUnUUUU4US'   M  UR                  UUUU45        M     M     GM;     GMI     XXgU4$ )Nr   linesdir)r   r   bboxspansrS   charsorigincrW   r(      rh     rA     )	r   rectwidthheightr^   rv   r   chrr_   )r  r  r#  
page_widthpage_height	rowheightleftrightr.  blocklinex0y0x1y1r6  spanr0  r   cwidthoxoychold_chold_oxold_oy
old_cwidthligr	  joinligatures                               r   process_blocks#page_layout.<locals>.process_blocksW  s   uYY__
ii&&	Eg;&(!%f6R))"2"22% &I MDF|x/ !']'(yAr1!#!"8B r^sV"9s#%D :$&E!Q;5B;AFr>FFFJ%|#)S[#8*6v{*CC%'3Y*-f+C%'3Y*-f+C*0C-0&&*,Mb	 (b"b&%9:5 + * ' T D22r   rL  c                     U S:X  a  [        S5      $ U S:X  a  [        S5      $ U S:X  a  [        S5      $ U S:X  a  [        S5      $ U S	:X  a  [        S
5      $ U S:X  a  [        S5      $ U S:X  a  [        S5      $ U $ )zReturn ligature character for a given pair / triple of characters.

Args:
    lig: (str) 2/3 characters, e.g. "ff"
Returns:
    Ligature, e.g. "ff" -> chr(0xFB00)
ffr1  fii  fli  ffir2  fflr3  fti  sti  )r7  )rL  s    r   rM  !page_layout.<locals>.joinligature  s     $;v;D[v;D[v;E\v;E\v;D[v;D[v;
r   c                    SnSnSnSnU[         R                  ::  a  [        SU-  5      eU H  nUu  ppX-
  n
X-   nXY:X  a  X-
  US-  ::  a  M"  U	S:X  a  Xj-
  U-  S:  a  M5  U	nXU-   :  a
  XI-  nUnU
nMI  U	S:X  a  MQ  [        X-  5      [	        U5      -
  nX:  a  US:  a  USU-  -  nXI-  nUnU
nM     UR                  5       $ )aF  Produce the text of one output line.

Args:
    left: (float) left most coordinate used on page
    slot: (float) avg width of one character in any font in use.
    minslot: (float) min width for the characters in this line.
    chars: (list[tuple]) characters of this line.
Returns:
    text: (str) text string for this line
rX   r   z%program error: minslot too small = %gg?rW   g?r   )r   EPSILONr   r^   r=   rstrip)r;  slotminslotlcharsr   old_charold_x1rI  r0  charrE  r   rD  rA  deltas                  r   make_textline"page_layout.<locals>.make_textline  s    goo%FPQQA"#DaBB BK6C<$? s{v5;HW$$
 s{	NSY.E{uqye#LDFFA B {{}r   rawdictr   c                     U S   $ )Nr   r  )r0  s    r   r  page_layout.<locals>.<lambda>  s    QqTr   r  r)   r   rq   r   r(   g333333?
r   r   r  )r  r   r^   r   r   r   PagerZ   r  r   r  getr_   r`   r<   r=   
statisticsmedianr  )"r  r  r  r	  r
  r  r   r  r!  r'  rN  rc  r  r.  r#  r;  r<  r:  r*  r0  r   rF  yr^  r<   r\  minslotsr@   ccountwidths	this_slotrowposr   rM  s"      `                             @r   page_layoutrs  ;  s   %5";CLS	 L# L# L#c( T 23tDz 23 23 23h# # 43l ]]9E]28<F*8*F'Eui{MM#t"D 
JJ>J" E1b!D"%1b!aa  

DIIK 4<DHqVA:HQK &'1!A$'%%f-	tDQi  T"XQ/0ID	4IJSPI!WFMM%qjMM% iF qj T4!eAh?td{**6/*JKY  MM#' (s   8I0c                 0   [        U R                  U R                  SS9n[        U R                  UR
                  S-   5      nU R                  nUc0  [        R                  R                  UR                  5      u  pEUS-   n[        US5       n[        R                  [        R                  -  nU R                  (       a  U[        R                  -  nU R                   (       a  U[        R                  -  nU R"                  (       a  U[        R$                  -  n[&        [(        [*        S.nU HJ  n	XS-
     n
XR,                     " U
UU R.                  U R0                  U R2                  U R4                  US9  ML     S S S 5        g ! , (       d  f       g = f)NFr   r   z.txtr   simpler  layoutr   )r8   rr   r4   rk   r   rx   r   rs   rt   splitextr2   r,   r   TEXT_PRESERVE_LIGATURESTEXT_PRESERVE_WHITESPACEconvert_whitenoligaturesextra_spacesTEXT_INHIBIT_SPACESr  r  rs  modegridr	  r
  r  )r   r!   r   r   r3   r   r  r   funcr   r  s              r   gettextr    s6   
DJJ5
9CTZZ!!34E[[F~gg&&sxx0F"	fd	w//'2R2RRW555EW444EW000E!$!

 CQw<DO		  
		s   C0F
Fc                 \    [         R                  " S5        [         R                  " S5        g )NzThis is from PyMuPDF message().zThis is from PyMuPDF log().)r   r   log)r   s    r   	_internalr  =  s    OO56KK-.r   c                  J   [         R                  " S[        S5      S9n U R                  SSS9nUR	                  S[        S5      S	9nUR                  S
[        SS9  UR                  SSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  S[        SS9  UR                  S[        SS9  UR                  [        S9  UR	                  S[        S5      S	9nUR                  S
[        SS9  UR                  S[        S S9  UR                  SSS9  UR                  S!S"S#S$S%9  UR                  S&[        S'S9  UR                  S([        S)S9  UR                  S*[        S+[        S,5      S-S.9  UR                  S/SS0S1S29  UR                  S3SS0S4S29  UR                  S5SS0S6S29  UR                  S7[        S8S9S:9  UR                  S;SS0S<S29  UR                  S=SS0S>S29  UR                  SS?S9  UR                  [        S9  UR	                  S@[        SA5      SBSC9nUR                  S
SDSESF9  UR                  SGSHSISJ9  UR                  [        S9  UR	                  SK[        SL5      S	9nUR                  S
[        SS9  UR                  SMSSNS9  UR                  SOSSPS9  UR                  SGSQS9  UR                  SSS9  UR                  S[        SRS9  UR                  [        S9  UR	                  SS[        ST5      S	9nUR                  S
SS9  UR                  SUSVS9  UR                  SWSSXS9  UR                  SSS9  UR                  [        S9  UR	                  SY[        SZ5      S	9nUR                  S
SS9  UR                  SSS9  UR                  SGS[S9  UR                  SUSHS\SJ9  UR                  S]SHS^SJ9  UR                  S_S`S9  UR                  [        S9  UR	                  Sa[        Sb5      S	9nUR                  S
SS9  UR                  SSS9  UR                  SGS[S9  UR                  SUSHScSJ9  UR                  [         S9  UR	                  Sd[        Se5      SfSC9nUR                  S
SS9  UR                  SUSHSgSJ9  UR                  SSS9  UR                  SGShS9  UR                  S]SiS9  UR                  SjSkS9  UR                  SlSmS9  UR                  S_SnS9  UR                  ["        S9  UR	                  So[        Sp5      S	9n	U	R                  S
[        SS9  U	R                  SUSHSgSJ9  U	R                  SSS9  U	R                  SGSqS9  U	R                  [$        S9  UR	                  Sr[        Ss5      S	9n
U
R                  S
[        StS9  U
R                  SSuS9  U
R                  SGSvS9  U
R                  SwSHSxSJ9  U
R                  SySzS9  U
R                  SUSDS{SF9  U
R                  [&        S9  UR	                  S|[        S}5      S	9nUR                  S
[        S~S9  UR                  SSS9  UR                  S[        SSSS.9  UR                  S[        SSS9  UR                  SSSS0S9  UR                  SSSS0S9  UR                  SSSS0S9  UR                  SSSS0S9  UR                  SSSS0S9  UR                  SGSS9  UR                  S[(        SSS9  UR                  S[(        SSS9  UR                  [*        S9  UR	                  S[        S5      S	9nUR                  [,        S9  U R/                  5       n[1        US5      (       d  U R3                  5         gUR5                  U5        g)zDefine command configurations.r   zBasic PyMuPDF Functions)progdescriptionSubcommandsz/Enter 'command -h' for subcommand specific help)titlehelpr5   zdisplay PDF information)r  rr   zPDF filename)r   r  z	-passwordr4   )r  z-catalog
store_truezshow PDF catalog)actionr  z-trailerzshow PDF trailerz	-metadatazshow PDF metadataz-xrefsz&show selected objects, format: 1,5-7,Nz-pagesz'show selected pages, format: 1,5-7,50-N)r  r   z.optimize PDF, or create sub-PDF if pages givenr   zoutput PDF filenamez-encryptionzencryption methodr   r   )r  choicesdefaultz-ownerzowner passwordz-userzuser passwordz-garbagezgarbage collection level   r   )r   r  r  r  z	-compressFzcompress (deflate) output)r  r  r  z-asciizASCII encode binary dataz-linearzformat for fast web displayz-permissionr(   zinteger with permission levels)r   r  r  z	-sanitizezsanitize / clean contentsz-prettyzprettify PDF structurez/output selected pages pages, format: 1,5-7,50-Nr   zjoin PDF documentsz3specify each input as 'filename[,password[,pages]]')r  epilog*zinput filenames)nargsr  z-outputTzoutput filename)requiredr  extractz extract images and fonts to diskz-imageszextract imagesz-fontszextract fontsz-folder to receive output, defaults to currentz-consider these pages only, format: 1,5-7,50-Nz
embed-infozlist embedded filesz-namezif given, report only this onez-detailzdetail informationz	embed-addzadd embedded filez-output PDF filename, incremental save if nonezname of new entryz-pathzpath to data for new entryz-desczdescription of new entryz	embed-delzdelete embedded filezname of entry to deletez	embed-updzupdate embedded filez*except '-name' all parameters are optionalzname of entryz-Output PDF filename, incremental save if nonezpath to new data for entryz	-filenameznew filename to store in entryz
-ufilenamez&new unicode filename to store in entryz!new description to store in entryzembed-extractzextract embedded file to diskz'output filename, default is stored namez
embed-copyz copy embedded files between PDFszPDF to receive embedded fileszpassword of inputz2output PDF, incremental save to 'input' if omittedz-sourcezcopy embedded files from herez
-pwdsourcezpassword of 'source' PDFzrestrict copy to these entriesr  z(extract text in various formatting modeszinput document filenamezpassword for input documentz-modez-mode: simple, block sort, or layout (default)ru  rw  z select pages, format: 1,5-7,50-Nz1-N)r   r  r  z-noligaturesz*expand ligature characters (default False))r  r  r  z-convert-whitez6convert whitespace characters to white (default False)z-extra-spacesz%fill gaps with spaces (default False)z-noformfeedz-write linefeeds, no formfeeds (default False)z-skip-emptyz+suppress pages with no text (default False)z3store text in this file (default inputfilename.txt)z-gridz+merge lines if closer than this (default 2)r)   z	-fontsizez4only include text with a larger fontsize (default 3)rq   internalzinternal testingr  N)argparseArgumentParserr   add_subparsers
add_parseradd_argumentrZ   set_defaultsr5   r^   ra   r   r   r   r   r   r   r   r   r   floatr  r  
parse_argshasattr
print_helpr  )parsersubpsps_showps_cleanps_join
ps_extractps_embed_addps_embed_delps_embed_updps_embed_extractps_embed_copy
ps_gettextps_internalr   s                 r   mainr  A  s
   $$67F !!"S " E v8<U3VWGs@:6L?QRL?QR\@STs!I   s!J   d#
 X&VW   H '.A(3HI+J7 K	   (3CD'/B'a   (	   u;U   *	   C2R   (	   ,<T   H   u%
 12D  G
 2CDT8IJh'
 !!x(JK " J G#NCIlAQRH\PG   Kj9s!P   1
 (+@"A  G ~6'GH<>RS:6m,
 ##*=!> $ L gN;k
;G   g;NOg;WXg,FG<0
 ##*@!A $ L gN;k
;G   g;TU<0
 ##34; $ L
 gN;g?Kk
;G   g,HIk0PQC   g,OP<0
 ''X.M%N (  !!'.!I!!'D!O!!+J!?!!A "  !!|!4
 $$(+M"N % M wS7VW{1DEL   D'F   |2LMs!A   M2
 !!x(RS " J G#4MNK.KL<.   /	   9	   E	   4	   <	   :	   B   :	   C	   )
 ""); < # K ),
 D4  		$r   __main__)FT)r  )"r  r  rs   r.   rk  typingr   r   r   rX   r   r   r&   r8   rD   rT   rk   r5   r   r   r   r   r   r   r   r   r   r  r  rs  r  r  r  __name__r  r   r   <module>r     s      	 
  " " (!H&.,^<~,^*%P&D/d!H?D	^BB/od	 zF r   