
    ]Wi                         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  S3R                  SS5      $ )N K   -)center)xs    P/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/pymupdf/__main__.pymycenterr      s    s!HR%%    c                 2   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U SU S3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 z for :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;6qcqcCD~
..
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(       aX  UR                  U5      nU(       d  [        R                  " S5        USL a#  SnUS:  a  Sn[         R                  " SU 35        U$ [        R                  " S	UR                   S
35        U$ )z!Open and authenticate a document.Tz$this command supports PDF files onlyzauthentication unsuccessfuluser   ownerzauthenticated as 'z' requires a password)	r   openis_pdfsysexit
needs_passauthenticater    name)filenamepasswordshowpdfr#   rc
auth_levels          r   	open_filer<   9   s    
,,x
 C::#+78	B>>
h'HH234<JAv$
OO/
|<= J 	1SXXJ345Jr   c                    [        U R                  5        Vs/ s H  n[        U5      PM     sn5      S-   nU R                  5        H1  u  pUR	                  U5       SU 3n[
        R                  " U5        M3     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_dictrH   O   se    TYY[)[SV[)*Q.A

Bqc"  *s   A=c                    [         R                  " US S35        U R                  U5      n[         R                  " U5        U R                  U5      (       aq  UR	                  5       n UR                  S5      S-   nX4   nUR                  S5      (       a  Sn[         R                  " SU S35        [         R                  " S	5        [         R                  " S
5        g! [         a    Sn NUf = f)zuPrint an object given by XREF number.

Simulate the PDF source in "pretty" format.
For a stream also print its size.
dz 0 objz/Lengthr   z0 Runknownz
stream
...z bytes	endstreamendobjN)r   r    xref_objectxref_is_streamsplitindexendswith	Exception)r#   xrefxref_strtempidxsizes         r   
print_xrefrY   W   s     OOtAhf%&t$HOOH
$~~	**Y'!+C9D}}U##  	+dV623$OOH	  	D	s   )0C   C/.C/c           	      h   [        US-
  5      nU R                  SU5      R                  SS5      n U R                  S5      n/ n[        U5       GH1  u  pgUS-   nUR	                  5       (       aU  [        U5      n	SU	s=::  a  U:  a  O  OUR                  [        U5      5        O[        R                  " SU SUS 35        Mu   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U S
US 3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M4     U$ ! [         a     [        R                  " SU S
US 3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   Nr	    ,zbad z specification at item rJ   r   z range specification at item r*   )strreplacerP   	enumerate	isdecimalintappendr1   r2   rS   listrange)rlistlimitwhatr[   	rlist_arrout_listseqr$   r   ii1i2s               r   get_listro   n   s    	EAIAMM#q!))#r2EC IHy)	!G>>D	AA~~D	*4v%<QqEBC	FZZ_FBRBRB R%AOeOHHtD6!>qeDE8OOB7U2Av.//HU2Avr233H5 *8 O  	FHHtD6!>qeDE	Fs   )F'F10F1c                 X   [        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
:  a7  UR                  5       nSnUS:w  a  Sn[        R                  " SU SU S35        UR                  5       nUS
:  a  [        R                  " SUS S3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
 HT  nUS-
  nUR/                  U5      n[        R                  " SUS S35        [%        X5        [        R                  " 5         MV     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   r\      znot zdocument contains z root form fields and is signedrJ    embedded fileszPDF catalogzPDF metadatazobject informationrT   )rh   zpage informationzPage r   zPDF trailer)r<   inputr7   ospathgetsizeroundmetadatar   r    
page_countxref_lengthis_form_pdfget_sigflagsembfile_countcatalogr   pdf_catalogrY   rH   xrefsro   pages	page_xreftrailerpdf_trailerclose)argsr#   rX   flagmetar   r%   sign_strrT   xreflpagelpnos               r   r8   r8      s   
DJJt
4C77??4::&-DDd{q>D<<DOOAJJNNOO!N
		
 	A1u6H,QC/H
RXYZA1u,QqE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OOeC7!,-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r9   keepnonezrc4-40zrc4-128zaes-128zaes-256)
garbagedeflateprettycleanasciilinearrt   owner_pwuser_pwpermissionsr   	from_pageto_page)r<   rx   r7   rt   rQ   r   saveoutputr   compressr   sanitizer   r   r-   r+   
permissionro   r~   r   r/   
insert_pdfr   )r   r#   rt   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.r]   r   Nr   Tr   r,   r   r   )r   r   )rx   r   r/   rP   rA   r<   joinro   r~   re   r   r   r   r   )
r   doc_listr#   src_itemsrc_listr7   srcr   	page_listrl   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       35        U Hh  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        Mj     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 copyz0following names already exist in receiving PDF: r6   	ufilenamedescr6   r   r   zcopied entry 'z' from 'r.   ru   r   N)r<   rx   r7   can_save_incrementallyr   r1   r2   source	pwdsourcer5   setembfile_namesr^   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CC	NCSTU%t$*%;'f 	 	
 	.hsxxjBC  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   )r<   rx   r7   r   r   r1   r2   embfile_delr5   
ValueErrorr   mupdfFzErrorBaser   r   r   )r   r#   es      r   embedded_delr   H  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 R                  (       d  U R                  (       d  [        R                  R!                  U5      (       a  [        R                  " SU 35        [        R                  R#                  U5      nUR%                  [        R&                  " 5       [        R(                  -   5      (       d  [        R                  " SU 35        [+        US	5       nUR-                  W5        SSS5        [        R.                  " S
U R                   SU S35        UR1                  5         g! [        [        R                  R                  4 a2  n[        R                  " SU R                  < SU 35         SnAGNSnAff = f! , (       d  f       N= f)z&Retrieve contents of an embedded file.Tr   r   r>   Nr6   z6refusing to overwrite existing file with stored name: z9refusing to write stored name outside current directory: wbzsaved entry 'z' as 'r.   )r<   rx   r7   r   r5   r   r   r   r   r   r1   r2   r   unsafery   rz   existsabspath
startswithgetcwdsepr/   writer    r   )r   r#   streamrJ   r   r6   filename_absr   s           r   embedded_getr   [  sf   
DJJ4
8C>+TYY' #kkt{{q}H;;t{{77>>(##HHMhZXYwwx0&&ryy{RVV';<<HHPQYPZ[\	h	V 
OOmDII;fXJa@AIIK 112 >)$))b<==> 
	s#   6F( H($G>'G99G>
Hc                 h   [        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                   S35        [        R                  R                  U R                  5      (       a.  [        R                  R                  U R                  5      (       d$  [
        R                  " SU R                   S3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Nmf = f! , (       d  f       N= f)zInsert a new embedded file.Tr   Nr   zentry 'z' already existszno such file 'r.   rbr   ru   r   )r<   rx   r7   r   r   r1   r2   r   r5   rS   ry   rz   r   isfiler/   readr   r   r   r   r   r   r#   fr   r6   r   r   s          r   embedded_addr   p  s   
DJJ4
8C%%''t{{djj801		"7499+%567 77>>$))$$BGGNN499,E,E>$))A./	dii	! 
yyHI99yyOO		6H   ;;$++3a(IIK)  
 
	s   3?H H#
H H #
H1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                   S35         GNf = f! , (       d  f       GNA= f)z0Update contents or metadata of an embedded file.Tr   Nr   no such embedded file 'r.   r   r   ru   r   )r<   rx   r7   r   r   r1   r2   r   r5   rS   rz   ry   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9#
 			GGNN499%%GGNN499%%$))T"aVVXF #" }}==~~NN		MM		yyyyOO		6H   {{dkkTZZ7a(IIKK  9*499+Q789 #"s   3H& I&.II
I*c                 N   [        U R                  U R                  SS9nUR                  5       nU R                  b  U R                  U;  a%  [
        R                  " SU R                   S35        O[        R                  " 5         Sn[        U5      S:  a  Sn[        R                  " S	[        U5      S
 SU S35        [        R                  " 5         [        UR                  U R                  5      5        [        R                  " 5         gU(       d%  [        R                  " SUR                   S35        g[        U5      S:  a  SUR                   S[        U5      S
 S3nOSUR                   S3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   r.   r\   r   r%   zprinting 1 of rJ   z embedded filer   z' contains no embedded filesz' contains the following rw   z&' contains the following embedded file)r<   rx   r7   r   r5   r1   r2   r   r    rA   rH   r   detailr   )r   r#   r   pluralrG   r5   _s          r   embedded_listr     s   
DJJ4
8CEyy99E!HH.tyyk;<OOF5zA~OOnSZN.PQRSOOs''		23OO!CHH:%ABC
5zA~#((4SZN/R#((ABOOCOO{{OOD!T"3##D)*  IIKr   c           
      B   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OnU R                  n[        R                  R!                  U5      (       a$  [        R                  R#                  U5      (       d  [        R                  " SU S3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 aY  US   nUS   n[        R                  R-                  USU	S SU 35      n[1        US5       nUR3                  U5        SSS5        M  [        R                  R-                  USU	S S3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      S SU S35        U R                  (       a'  [@        RH                  " S[K        U5      S SU S3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 z does not existr   zn/ar	   r   .r   Nextimagezimg-rJ   z.pngr   zsaved z fonts to 'r.   z images to ')'fontsimagesr1   r2   r<   rx   r7   r   ro   r~   re   r   ry   rz   r   curdirr   isdirr   get_page_fontsaddextract_fontr   r_   r/   r   get_page_imagesr(   typedictr   r   r   r   r   r   r    rA   r   )r   r#   r   out_dir
font_xrefsimage_xrefsr   itemlistr$   rT   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(	AB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$tAhau8M"N!'40G#MM'2 10 #%'',,w$tAhd8K"L  #~~//!3  !(s!C 
 		'*% !% L zz&Z 3;wiqIJ{{&[!1! 4L	KLIIK; -, 10s   O<P<
P
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$ )Nru   r    )bs    r   <lambda> page_blocksort.<locals>.<lambda>>  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#  7  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                 n    [         R                  " X5      nU(       a  XS-
     $ [        SUS SU  3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 gz not found in )bisectbisect_rightRuntimeError)r%  r&  rl   s      r   find_line_index$page_layout.<locals>.find_line_indexI  s=     .a%= YuQi~fXFGGr   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*   )rd   r"  rc   )r/  r  nrowshs       r   curate_rows page_layout.<locals>.curate_rowsX  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spansrX   charsorigincr	   r*      rl     rE     )	r   rectwidthheightrb   r|   r   chrrc   )r  r  r/  
page_widthpage_height	rowheightleftrightr:  blocklinex0y0x1y1rB  spanr<  r   cwidthoxoychold_chold_oxold_oy
old_cwidthligr  joinligatures                               r   process_blocks#page_layout.<locals>.process_blocksa  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   rX  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)
ffr=  fii  fli  ffir>  fflr?  fti  sti  )rC  )rX  s    r   rY  !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S 3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
r\   r   z#program error: minslot too small = r)  g?r	   g?r   )r   EPSILONr,  rb   rA   rstrip)rG  slotminslotlcharsr  old_charold_x1rU  r<  charrQ  r   rP  rM  deltas                  r   make_textline"page_layout.<locals>.make_textline  s    goo%!DWQK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  )r<  s    r   r  page_layout.<locals>.<lambda>  s    QqTr   r   r,   r   ru   r   r*   g333333?
r
  r  r  )r  r   rb   r   r   r   Pager^   r  r   r"  getrc   rd   r@   rA   
statisticsmedianr  )"r  r  r  r  r  r  r	  r  r-  r3  rZ  ro  r  r:  r/  rG  rH  rF  r6  r<  r   rR  yrj  r@   rh  minslotsrD   ccountwidths	this_slotrowposr  rY  s"      `                             @r   page_layoutr  E  s   %5";CHS	 H# H# H#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  )r<   rx   r7   ro   r   r~   r   ry   rz   splitextr5   r/   r   TEXT_PRESERVE_LIGATURESTEXT_PRESERVE_WHITESPACEconvert_whitenoligaturesextra_spacesTEXT_INHIBIT_SPACESr  r#  r  modegridr  r  r  )r   r#   r   r   r6   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  G  s    OO56KK-.r   c                  n   [         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                  SqS0SSrSs9  U	R                  SGStS9  U	R                  [$        S9  UR	                  Su[        Sv5      S	9n
U
R                  S
[        SwS9  U
R                  SSxS9  U
R                  SGSyS9  U
R                  SzSHS{SJ9  U
R                  S|S}S9  U
R                  SUSDS~SF9  U
R                  [&        S9  UR	                  S[        S5      S	9nUR                  S
[        SS9  UR                  SSS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helpr8   zdisplay PDF information)r  rx   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)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-unsafezPallow write to stored name even if an existing file or outside current directory)r  r  r  z'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)r  r  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)ru   internalzinternal testingr  N)argparseArgumentParserr   add_subparsers
add_parseradd_argumentr^   set_defaultsr8   rb   re   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  K  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!?!!)U<_ "  !!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*  ry   r1   rw  typingr   r   r   r\   r   r   r(   r<   rH   rY   ro   r8   r   r   r   r   r   r   r   r   r  r  r#  r  r  r  r  __name__r  r   r   <module>r     s      	 
  " " &!H,.,^<~,^*%P&*D/d"J?D	^BB/rj	 zF r   