
    9i;                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
Z
d dlmZmZmZ d Zd ZddZd Zd Zdd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#e$dk(  r e#        yy)    N)DictListSetTuple)TEXT_INHIBIT_SPACESTEXT_PRESERVE_LIGATURESTEXT_PRESERVE_WHITESPACEc                 ,    d| z  j                  dd      S )Nz %s K   -)center)xs    W/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/fitz/__main__.py<lambda>r      s    fqj((S1     c                    |d   }|d   }|dk(  r| j                  |      S d }t        j                  | |      }t        j                  | |      }	 |j                  |j                  k(  r1|j                  |j                  cxk(  rdk(  rn n|j
                  dk(  s%t        d||fz         t        |       d} ||      S t        j                  |      }|j                  |j                         dx}} ||      S )zReturn image for a given XREF.r      c                     | j                   j                  dk7  r| S t        j                  t        j                  |       }|S )N   )
colorspacenfitzPixmapcsRGB)pixtpixs     r   getimagezrecoverpix.<locals>.getimage    s2    >>q J{{4::s+r   z&Warning: unsupported /SMask %i for %i:N)	extract_imager   r   irectalphar   print	set_alphasamples)docitemr   sr   pix1pix2r   s           r   
recoverpixr)      s    QAQAAv  ## ;;sAD;;sAD
 JJ$**$tzz)FQ)F466UV;6!Q?@d~
++d
CMM$,,D4 C=r   c                 h   t        j                  |       }|j                  s|du rt        j                  d       d}|j
                  s|S |rC|j                  |      }|st        j                  d       |du rt        |dkD  rddz  nd       |S t        j                  d	|j                  z         |S )
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_filer;   =   s    
))H
C::#+78	B>>
h'HH234<R!V''1H J 	+chh67Jr   c                     t        | j                         D cg c]  }t        |       c}      dz   }| j                         D ]&  \  }}|j	                  |      d|}t        |       ( yc c}w )zPrint a Python dictionary.r   z: N)maxkeyslenitemsrjustr!   )r%   klvmsgs        r   
print_dictrF   P   sb    TYY[)SV)*Q.A

 1''!*a(c
 	 *s   A.c                 N   t        d|z         | j                  |      }t        |       | j                  |      rV|j                         }	 |j	                  d      dz   }||   }|j                  d      rd}t        d|z         t        d       t        d       y	#  d}Y +xY w)
zPrint 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!   xref_objectxref_is_streamsplitindexendswith)r$   xrefxref_strtempidxsizes         r   
print_xrefrU   Y   s     
*t
t$H	(O
$~~	**Y'!+C9D}}U#  	#d*+k	(O		Ds   ,B B$c           	      *   t        |dz
        }| j                  d|      j                  dd      } | j                  d      }g }t        |      D ]  \  }}|dz   }|j	                         rOt        |      }	d|	cxk  r|k  rn n|j                  t        |             nt        j                  d||fz         k	 |j                  d      \  }
}t        |
      }
t        |      }d
cxk  r|k  rn ndcxk  r|k  sn t        j                  d||fz         |
k(  r|j                  |
       |
|k  r|t        t        |
|dz               z  }|t        t        |
|dz
  d	            z  }" |S #  t        j                  d||fz         Y xY w)
aK  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replacerM   	enumerate	isdecimalintappendr1   r2   listrange)rlistlimitwhatrW   	rlist_arrout_listseqr%   r   ii1i2s               r   get_listrl   p   sw    	EAIAMM#q!))#r2EC IHy) 4	T!G>>D	AA~~D	*:dAYFG	JZZ_FBRBRB R%AOeOHH<ayHI8OOB7U2rAv.//HU2rAvr233H548 O	JHH<ayHIs   ;*E44Fc                    t        | j                  | j                  d      }t        j                  j                  | j                        dz  }d}|dkD  r|dz  }d}t        |d      }|j                  }t        d| j                  |j                  |j                         dz
  |||d   |d	   fz         |j                  }|d
kD  r'|j                         }t        d||dk7  rdndfz         |j                         }|d
kD  rt        d|z         t                | j                  r:t        t        d             |j!                         }t#        ||       t                | j                  r3t        t        d             t%        |j                         t                | j&                  rWt        t        d             t)        | j&                  |j                         d      }|D ]  }t#        ||       t                 | j*                  rxt        t        d             t)        | j*                  |j                  dz         }	|	D ]<  }
|
dz
  }|j-                  |      }t        d|
z         t#        ||       t                > | j.                  r7t        t        d             t        |j1                                t                |j3                          y )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 rY   z#document contains %i embedded fileszPDF catalogzPDF metadatazobject informationrP   )re   zpage informationzPage %i:zPDF trailer)r;   inputr7   ospathgetsizeroundmetadatar!   
page_countxref_lengthis_form_pdfget_sigflagsembfile_countcatalogmycenterpdf_catalogrU   rF   xrefsrl   pages	page_xreftrailerpdf_trailerclose)argsr$   rT   flagmetar   r&   rP   xreflpagelpnos              r   r8   r8      sW   
DJJt
4C77??4::&-DDd{q>D<<D	AJJNNOO!N
		
 	A1uCAF&+,	
 	A1u3a78	G||h}%& 3}}h~&'3<< zzh+,-S__%6VD 	DsD!G	 zzh)*+S^^a%78 	CaA==#D*s"#sD!G	 ||h}%&coo IIKr   c                    t        | j                  | j                  d      }| j                  }dj	                  |      }| j
                  s|j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  || j                  | j                  | j                          y t#        | j
                  |j$                  dz         }t'        j(                         }|D ]  }|dz
  }|j+                  |||        |j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  || j                  | j                  | j                          |j-                          |j-                          y )NTr9   keepnonezrc4-40zrc4-128zaes-128zaes-256)
garbagedeflateprettycleanasciilinearrq   owner_pwuser_pwpermissionsr   	from_pageto_page)r;   rs   r7   rq   rN   r   saveoutputr   compressr   sanitizer   r   r-   r.   
permissionrl   ry   r   r/   
insert_pdfr   )r   r$   rq   encryptr   outdocr   r   s           r   r   r      sb   
DJJ4
8CJIOOG ::KKLLMM;;--**;;ZZII 	 	
 	 TZZ!!34EYY[F 7!G#A67 KK{{mmjj{{		OO   IIK
LLN
r   c                 4   | j                   }t        j                         }|D ]  }|j                  d      }t	        |      dkD  r|d   nd}t        |d   |d      }dj                  |dd       }|r,t        dj                  |dd       |j                  dz         }nt        d|j                  dz         }|D ]  }	|j                  ||	dz
  |	dz
          |j                           |j                  | j                  d	d
       |j                          y)z&Join pages from several PDF documents.rZ   r   Nr   Tr   r,   r   r   )r   r   )rs   r   r/   rM   r?   r;   joinrl   ry   rb   r   r   r   r   )
r   doc_listr$   src_itemsrc_listr7   srcr   	page_listri   s
             r   doc_joinr     s    zzH
))+C >>#&"%h-!"38A;X48!"& (12,!7!9KLIa!!34I 	@ANN3!a%QN?	@		 HHT[[!TH2IIKr   c           	      <   t        | j                  | j                  d      }|j                         s:| j                  r| j                  | j                  k(  rt        j                  d       t        | j                  | j                        }| j                  rt        | j                        n	t               }t        |j                               }|r||k  st        j                  d       n|}|st        j                  d       |t        |j                               z  }|r!t        j                  dt        |      z         |D ]_  }|j                  |      }|j                  |      }|j                  |||d   |d   |d	   
       t!        d|d|j                  d       a |j#                          | j                  r7| j                  | j                  k7  r|j%                  | j                  d       n|j'                          |j#                          y)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: %sr6   	ufilenamedescr6   r   r   zcopied entry 'z' from ''rr   r   N)r;   rs   r7   can_save_incrementallyr   r1   r2   source	pwdsourcer5   setembfile_namesr[   embfile_infoembfile_getembfile_addr!   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 	 	
 	tSXX>?
@ IIK{{t{{djj0a(IIKr   c                 <   t        | j                  | j                  d      }|j                         s:| j                  r| j                  | j                  k(  rt        j                  d       	 |j                  | j                         | j                  r| j                  | j                  k(  r|j                          n|j                  | j                  d       |j                          y# t        $ r% t        j                  d| j                  z         Y w xY w)zDelete an embedded file entry.Tr   r   no such embedded file '%s'r   r   N)r;   rs   r7   r   r   r1   r2   embfile_delr5   
ValueError	save_incrr   r   )r   r$   s     r   embedded_delr   J  s    
DJJ4
8C%%'KK4;;$**401;		" ;;$++3a(IIK  ;-		9:;s   .C- -+DDc                    t        | j                  | j                  d      }	 |j                  | j                        }|j                  | j                        }| j                  r| j                  nd   }t        |d      }|j                         |j                          t        d| j                  d|d       |j                          y	# t        $ r% t        j                  d| j                  z         Y w xY w)
z&Retrieve contents of an embedded file.Tr   r   r6   wbzsaved entry 'z' as 'r   N)r;   rs   r7   r   r5   r   r   r1   r2   r   r/   writer   r!   )r   r$   streamdr6   r   s         r   embedded_getr   ]  s    
DJJ4
8C;+TYY' #kkt{{q}H(D!F
LL
LLN			8
<=IIK  ;-		9:;s   6C +C?>C?c                    t        | j                  | j                  d      }|j                         s:| j                  | j                  | j                  k(  rt        j                  d       	 |j                  | j                         t        j                  d| j                  z         t        j                  j                  | j                        r)t        j                  j                  | j                        s"t        j                  d| j                  z         t        | j                  d      j                         }| j                  }|}| j                  s|}n| j                  }|j!                  | j                  ||||       | j                  r| j                  | j                  k(  r|j#                          n|j%                  | j                  d	
       |j'                          y#  Y JxY w)zInsert a new embedded file.Tr   Nr   zentry '%s' already existszno such file '%s'rbr   rr   r   )r;   rs   r7   r   r   r1   r2   r   r5   rt   ru   existsisfiler/   readr   r   r   r   r   r   r$   r   r6   r   r   s         r   embedded_addr   m  sX   
DJJ4
8C%%'t{{djj801		",tyy89 77>>$))$BGGNN499,E$tyy01$))T"'')FyyHI99yyOO		6H	   ;;$++3a(IIK's   .=G0 0G5c                 L   t        | j                  | j                  d      }|j                         s:| j                  | j                  | j                  k(  rt        j                  d       	 |j                  | j                         | j                  wt        j                  j                  | j                        rNt        j                  j                  | j                        r%t        | j                  d      j                         }nd}| j                  r| j                  }nd}| j                   r| j                   }n| j                  r| j                  }nd}| j"                  r| j"                  }nd}|j%                  | j                  ||||       | j                  | j                  | j                  k(  r|j'                          n|j)                  | j                  d	       |j+                          y#  t        j                  d| j                  z         Y xY w)
z0Update contents or metadata of an embedded file.Tr   Nr   r   r   r   rr   r   )r;   rs   r7   r   r   r1   r2   r   r5   ru   rt   r   r   r/   r   r6   r   r   embfile_updr   r   r   r   s         r   embedded_updr     s   
DJJ4
8C%%'t{{djj801;#
 			GGNN499%GGNN499%dii&++-}}==~~NN		MM		yyyyOO		6H	   {{dkkTZZ7a(IIKI;-		9:s   .G< <$H#c                 R   t        | j                  | j                  d      }|j                         }| j                  | j                  |vr#t        j                  d| j                  z         nlt                t        dt        |      t        |      dkD  rdndfz         t                t        |j                  | j                               t                y|st        d	|j                  z         yt        |      dkD  rd
|j                  t        |      fz  }nd|j                  z  }t        |       t                |D ]O  }| j                  st        |       |j                  |      }t        |j                  |             t                Q |j                          y)zList embedded files.Tr   Nr   z!printing 1 of %i embedded file%s:r   r&   rY   z'%s' contains no embedded filesz-'%s' contains the following %i embedded filesz)'%s' contains the following embedded file)r;   rs   r7   r   r5   r1   r2   r!   r?   rF   r   detailr   )r   r$   r   rE   r5   _s         r   embedded_listr     sL   
DJJ4
8CEyy99E!HH1DII=>G3u:c%j1ns"=> Gs''		23G/#((:;
5zA~=3u:@VV9CHHD	#J	G {{$KT"3##D)* IIKr   c           
      L   | j                   s!| j                  st        j                  d       t	        | j
                  | j                  d      }| j                  r$t        | j                  |j                  dz         }nt        d|j                  dz         }| j                  s.t        j                  j                  t        j                        }nb| j                  }t        j                  j!                  |      rt        j                  j#                  |      st        j                  d|z         t%               }t%               }|D ]  }| j                   r|j'                  |dz
        }|D ]  }|d   }	|	|vs|j)                  |	       |j+                  |	      \  }
}}}|dk(  s|s<t        j                  j-                  ||
j/                  dd	       d	|	 d
|       }t1        |d      }|j3                  |       |j5                          d} | j                  s|j7                  |dz
        }|D ]  }|d   }	|	|vs|j)                  |	       t9        ||      }t;        |      t<        u r]|d   }|d   }t        j                  j-                  |d|	|fz        }t1        |d      }|j3                  |       |j5                          t        j                  j-                  |d|	z        }|j>                  j@                  dk  r|n#tC        jD                  tB        jF                  |      }|jI                  |         | j                   rtK        dtM        |      |fz         | j                  rtK        dtM        |      |fz         |j5                          y)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/arX   r   .r   Nextimagez	img-%i.%sz
img-%i.pngr   zsaved %i fonts to '%s'zsaved %i images to '%s')'fontsimagesr1   r2   r;   rs   r7   r   rl   ry   rb   r   rt   ru   abspathcurdirr   isdirr   get_page_fontsaddextract_fontr   r\   r/   r   r   get_page_imagesr)   typedictr   r   r   r   r   r   r!   r?   )r   r$   r   out_dir
font_xrefsimage_xrefsr   itemlistr%   rP   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HH9GCDJ%K &+::))#'2H  "Awz)NN4(/2/?/?/E,Hc1fe|6  ggllH$4$4S#$>#?qau!MG #7D1GMM&)MMO!F" ;;**373H  +Aw{*OOD)$S$/CCyD(!%j"%g,"$'',,wtSk8Q"R"&w"5g."$'',,wt8K"L  #~~//!3  !%TZZ!= 
 		'*'+'&+P zz&#j/7)CCD{{'3{+;W*EEFIIKr   c                     |rdnt        dg      }| j                  d|      }|s|s|j                  |       y |j                  |j                  dd             |j                  |       y )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                    |rdnt        dg      }| j                  d|      }|g k(  r|s|j                  |       y |j                  d        |D ]'  }	|j                  |	d   j	                  dd	
             ) |j                  |       y )Nr   r   blocksr   c                     | d   | d   fS )Nrr   r    )bs    r   r   z page_blocksort.<locals>.<lambda>:  s    qtQqTl r   keyr   r   r   r   )r  r  r   sortr  )
r  r  r  r  r  r	  r   r
  r  r  s
             r   page_blocksortr  3  s    %5";C]]85]1F|MM#
KK*K+ Cadkk&kABCMM#
r   c                   ! |rdnt        dg      }dt        t           dt        dt        fd}dt        t           dt        fd}	d	t        t           d
t
        j                  f!fd}
dt        dt        fd!d }| j                  d|      d	   } |
||       \  }}}}}|g k(  r|s|j                  |       y  |	||      }|j                  d        i }|D ]:  }|\  }}}} |||      }|j                  |g       }|j                  |       |||<   < t        |j                               }|j                          ||z
  }i }|D ]c  }||   }t        |      }|dk  rd||<   |D cg c]  }|d   	 }}|j                          t!        j"                  |      }||k  r|}|d   ||<   e ||d   |d   z
  z  |t        |      z  z  dz  }|d   }|j                  d       |D ]^  }||k  r|j                  d       ||z  }||k  r |||||   ||         } |j                  | dz   j%                  dd             ||z   }` |j                  |       y c c}w )Nr   r   valuesvaluereturnc                 b    t        j                  | |      }|r| |dz
     S t        d|| fz        )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  ri   s      r   find_line_indexz$page_layout.<locals>.find_line_indexE  s<     .!a%= 8E6?JKKr   rowsc                     t        |       } | j                          | d   g}| dd  D ]  }||d   |z   k\  s|j                  |       ! |S )Nr   r   r+   )ra   r  r`   )r  r  nrowshs       r   curate_rowsz page_layout.<locals>.curate_rowsT  sW    Dz		a	ab 	 AE"I$$Q	  r   r  r  c           
         t               }|j                  j                  }|j                  j                  }|}|}d}g }| D ]4  }	|	d   D ](  }
|
d   dk7  r|
d   \  }}}}|dk  s||j                  j                  kD  r6||z
  }||kD  r|}|
d   D ]  }|d   k  r|d   D ]  }|d   \  }}}}||z
  }|d	   \  }}t	        t        |            }|j                  |       |d
   }||kD  r|dk7  r|}||k  r|}|dk(  r\|g k7  rW|d   \  }}}}||k(  rH|t        d      k7  r ||z         }n$|dk(  rt        d      }n|dk(  rt        d      }n|}||||f|d<   |j                  ||||f         + 7 |||||fS )Nr   linesdir)r   r   bboxspansrT   charsorigincrX   r+      ri     rC     )	r   rectwidthheightr_   rw   r   chrr`   )r  r  r  
page_widthpage_height	rowheightleftrightr(  blocklinex0y0x1y1r0  spanr*  r   cwidthoxoychold_chold_oxold_oy
old_cwidthligr  joinligatures                               r   process_blocksz#page_layout.<locals>.process_blocks]  s   uYY__
ii&&	 )	;Eg (;;&(!%fBB6R$))"2"22bv% &I M ;DF|x/ !'] ;'(yAr1!#b!"8B r^sV"9s#%D 2:$&E!Q;5B;AFr>FFFJ%|#)S[#8*6v{*CC%'3Y*-f+C%'3Y*-f+C*0C-0&&*,Mb	 (b"b&%9:5;;(;)	;T dD%22r   rF  c                     | dk(  rt        d      S | dk(  rt        d      S | dk(  rt        d      S | dk(  rt        d      S | d	k(  rt        d
      S | dk(  rt        d      S | dk(  rt        d      S | S )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)
        ffr+  fii  fli  ffir,  fflr-  fti  sti  )r1  )rF  s    r   rG  z!page_layout.<locals>.joinligature  s     $;v;D[v;D[v;E\v;E\v;D[v;D[v;
r   c                    d}d}d}d}|t         j                  k  rt        d|z        |D ]  }|\  }	}
}}|
| z
  }
|
|z   }||	k(  r|
|z
  |dz  k  r%|	dk(  r||
z
  |z  dkD  r6|	}|
||z   k  r
||	z  }|}|
}J|	dk(  rPt        |
|z        t	        |      z
  }|
|kD  r|dkD  r|d|z  z  }||	z  }|}|
} |j                         S )a  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
        rY   r   z%program error: minslot too small = %gg?rX   g?r   )r   EPSILONr  r_   r?   rstrip)r5  slotminslotlcharsr   old_charold_x1rC  r*  charr?  r   r>  r;  deltas                  r   make_textlinez"page_layout.<locals>.make_textline  s$    dll"FPQQ  	A"#D"adBfB 4BK6C<$? s{v5;HFW$$
 s{T	NSY.EF{uqye#DLDFFA 	B {{}r   rawdictr   c                     | d   S )Nr   r  )r*  s    r   r   zpage_layout.<locals>.<lambda>  s
    QqT r   r  r,   r   rr   r   r+   g333333?
r   r   r   )r  r   r_   r   r   r   Pager[   r  r   r  getr`   ra   r>   r?   
statisticsmedianr  )"r  r  r  r  r  r	  r   r
  r  r"  rH  r[  r  r(  r  r5  r6  r4  r$  r*  r   r@  yrV  r>   rT  minslotsrB   ccountwidths	this_slotrowposr   rG  s"      `                             @r   page_layoutri  A  s   %5";CLS	 L# L# L#c( T 23tDz 23 23h# # 43l ]]9E]28<F*8*F'E4ui{MM#tT"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   -Ic           
         t        | j                  | j                  d      }t        | j                  |j
                  dz         }| j                  }|d k(  r1t        j                  j                  |j                        \  }}|dz   }t        |d      }t        t        z  }| j                  r	|t        z  }| j                  r	|t        z  }| j                   r	|t"        z  }t$        t&        t(        d}|D ]N  }	||	dz
     }
 || j*                     |
|| j,                  | j.                  | j0                  | j2                  |       P |j5                          y )NFr   r   z.txtr   simpler  layoutr   )r;   rs   r7   rl   r   ry   r   rt   ru   splitextr5   r/   r   r	   convert_whitenoligaturesextra_spacesr   r  r  ri  modegridr  r  r	  r   )r   r$   r   r   r6   r   r  r   funcr   r  s              r   gettextru  "  s*   
DJJ5
9CTZZ!!34E[[F~gg&&sxx0!F"64 G#&>>E))(($$ D
  

37|TYYIIMMOOOO	


 MMOr   c                  ,   t        j                  dt        d            } | j                  dd      }|j	                  dt        d      	      }|j                  d
t        d       |j                  dd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  dt        d       |j                  dt        d       |j                  t               |j	                  dt        d      	      }|j                  d
t        d       |j                  dt        d        |j                  dd       |j                  d!d"d#d$%       |j                  d&t        d'       |j                  d(t        d)       |j                  d*t        d+t        d,      d-.       |j                  d/dd0d12       |j                  d3dd0d42       |j                  d5dd0d62       |j                  d7t        d8d9:       |j                  d;dd0d<2       |j                  d=dd0d>2       |j                  dd?       |j                  t               |j	                  d@t        dA      dBC      }|j                  d
dDdEF       |j                  dGdHdIJ       |j                  t               |j	                  dKt        dL      	      }|j                  d
t        d       |j                  dMddN       |j                  dOddP       |j                  dGdQ       |j                  dd       |j                  dt        dR       |j                  t               |j	                  dSt        dT      	      }|j                  d
d       |j                  dUdV       |j                  dWddX       |j                  dd       |j                  t               |j	                  dYt        dZ      	      }|j                  d
d       |j                  dd       |j                  dGd[       |j                  dUdHd\J       |j                  d]dHd^J       |j                  d_d`       |j                  t               |j	                  dat        db      	      }|j                  d
d       |j                  dd       |j                  dGd[       |j                  dUdHdcJ       |j                  t                |j	                  ddt        de      dfC      }|j                  d
d       |j                  dUdHdgJ       |j                  dd       |j                  dGdh       |j                  d]di       |j                  djdk       |j                  dldm       |j                  d_dn       |j                  t"               |j	                  dot        dp      	      }	|	j                  d
t        d       |	j                  dUdHdgJ       |	j                  dd       |	j                  dGdq       |	j                  t$               |j	                  drt        ds      	      }
|
j                  d
t        dt       |
j                  ddu       |
j                  dGdv       |
j                  dwdHdxJ       |
j                  dydz       |
j                  dUdDd{F       |
j                  t&               |j	                  d|t        d}      	      }|j                  d
t        d~       |j                  dd       |j                  dt        ddd.       |j                  dt        dd       |j                  dddd0       |j                  dddd0       |j                  dddd0       |j                  dddd0       |j                  dddd0       |j                  dGd       |j                  dt(        dd       |j                  dt(        dd       |j                  t*               | j-                         }t/        |d      s| j1                          y|j3                  |       y)zDefine command configurations.r   zBasic PyMuPDF Functions)progdescriptionSubcommandsz/Enter 'command -h' for subcommand specific help)titlehelpr8   zdisplay PDF information)rx  rs   zPDF filename)r   r{  z	-passwordr7   )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)rt  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]]')rx  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 entriesru  z(extract text in various formatting modeszinput document filenamezpassword for input documentz-modez-mode: simple, block sort, or layout (default)rk  rm  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)rr   rt  N)argparseArgumentParserr   add_subparsers
add_parseradd_argumentr[   set_defaultsr8   r_   rb   r   r   r   r   r   r   r   r   r   floatru  
parse_argshasattr
print_helprt  )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_gettextr   s                r   mainr  E  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	   )
 D4 		$r   __main__)FT)r  )%r  r  rt   r1   ra  typingr   r   r   r   r   	fitz.fitzr   r   r	   r   r)   r;   rF   rU   rl   r8   r   r   r   r   r   r   r   r   r   r  r  ri  ru  r  __name__r  r   r   <module>r     s      	 
  ) )   2!H&.,^<~,^*%P& B.b!HAH	^B FgT	 zF r   