U
    M»{j;›  ã                   @   s  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d„ Zdd„ Zd2d
d„Zdd„ Zdd„ Zd3dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Z d+d,„ Z!d-d.„ Z"d/d0„ Z#e$d1k�re#ƒ  dS )4é    N)ÚDictÚListÚSetÚTuple)ÚTEXT_INHIBIT_SPACESÚTEXT_PRESERVE_LIGATURESÚTEXT_PRESERVE_WHITESPACEc                 C   s   d|    dd¡S )Nz %s éK   ú-)Úcenter)Úx© r   úL/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fitz/__main__.pyÚ<lambda>   ó    r   c                 C   s¾   |d }|d }|dkr"|   |¡S dd„ }t | |¡}t | |¡}|j|jkrt|j|j  krfdkrtn n
|jdks˜td||f ƒ t|ƒ d}||ƒS t |¡}| |j¡ d }}||ƒS )zReturn image for a given XREF.r   é   c                 S   s"   | j jdkr| S t tj| ¡}|S )Né   )Ú
colorspaceÚnÚfitzÚPixmapÚcsRGB)ÚpixZtpixr   r   r   Úgetimage    s    zrecoverpix.<locals>.getimagez&Warning: unsupported /SMask %i for %i:N)	Zextract_imager   r   ZirectÚalphar   ÚprintZ	set_alphaZsamples)ÚdocÚitemr   Úsr   Zpix1Úpix2r   r   r   r   Ú
recoverpix   s     
2
r    FTc                 C   s‚   t  | ¡}|js"|dkr"t d¡ d}|js0|S |rn| |¡}|sLt d¡ |dkr~t|dkrfdd ndƒ nt d	|j ¡ |S )
z!Open and authenticate a document.Tz$this command supports PDF files onlyéÿÿÿÿzauthentication unsuccessfulé   zauthenticated as %sÚownerÚuserz'%s' requires a password)	r   ÚopenZis_pdfÚsysÚexitZ
needs_passZauthenticater   Úname)ÚfilenameÚpasswordÚshowÚpdfr   Úrcr   r   r   Ú	open_file=   s    



r.   c                 C   sJ   t dd„ |  ¡ D ƒƒd }|  ¡ D ]"\}}d| |¡|f }t|ƒ q"dS )zPrint a Python dictionary.c                 S   s   g | ]}t |ƒ‘qS r   )Úlen)Ú.0Úkr   r   r   Ú
<listcomp>R   s     zprint_dict.<locals>.<listcomp>r   z%s: %sN)ÚmaxÚkeysÚitemsÚrjustr   )r   Úlr1   ÚvÚmsgr   r   r   Ú
print_dictP   s
    
r:   c                 C   sŠ   t d| ƒ |  |¡}t |ƒ |  |¡r~| ¡ }z(| d¡d }|| }| d¡rVd}W n   d}Y nX t d| ƒ t dƒ t dƒ d	S )
z�Print 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 bytesZ	endstreamZendobjN)r   Zxref_objectZxref_is_streamÚsplitÚindexÚendswith)r   ÚxrefZxref_strÚtempÚidxÚsizer   r   r   Ú
print_xrefY   s    



rC   Úpagec              	   C   sr  t |d ƒ}|  d|¡ dd¡} |  d¡}g }t|ƒD �]4\}}|d }| ¡ r”t|ƒ}	d|	  krl|k r€n n| t|ƒ¡ q6t d||f ¡ q6z"| d¡\}
}t|
ƒ}
t|ƒ}W n   t d||f ¡ Y nX d|
  krì|k �r
n nd|  k�r|k �sn t d||f ¡ |
|k�r2| |
¡ q6|
|k �rT|t	t
|
|d ƒƒ7 }q6|t	t
|
|d d	ƒƒ7 }q6|S )
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Úreplacer<   Ú	enumerateÚ	isdecimalÚintÚappendr&   r'   ÚlistÚrange)ZrlistÚlimitÚwhatrE   Z	rlist_arrZout_listÚseqr   r   ÚiÚi1Úi2r   r   r   Úget_listp   s6    
4


rW   c              
   C   sð  t | j| jdƒ}tj | j¡d }d}|dkr:|d }d}t|dƒ}|j}td| j|j	| 
¡ d |||d |d	 f ƒ |j}|d
krª| ¡ }td||dkr dndf ƒ | ¡ }|d
krÆtd| ƒ tƒ  | jröttdƒƒ | ¡ }t||ƒ tƒ  | j�rttdƒƒ t|jƒ tƒ  | j�r^ttdƒƒ t| j| 
¡ dd�}|D ]}t||ƒ tƒ  �qF| j�r¾ttdƒƒ t| j|j	d ƒ}	|	D ]4}
|
d }| |¡}td|
 ƒ t||ƒ tƒ  �qˆ| j�rättdƒƒ t| ¡ ƒ tƒ  | ¡  d S )NTi   Z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 rG   z#document contains %i embedded fileszPDF catalogzPDF metadatazobject informationr?   )rR   zpage informationzPage %i:zPDF trailer)r.   Úinputr*   ÚosÚpathÚgetsizeÚroundÚmetadatar   Ú
page_countZxref_lengthZis_form_pdfZget_sigflagsZembfile_countÚcatalogÚmycenterZpdf_catalogrC   r:   ZxrefsrW   ÚpagesZ	page_xrefÚtrailerZpdf_trailerÚclose)Úargsr   rB   ÚflagÚmetar   r   r?   ZxreflÚpagelÚpnor   r   r   r+   Ÿ   sz    

ùÿÿÿÿ






r+   c                 C   sä   t | j| jdd�}| j}d |¡}| js`|j| j| j| j	| j
| j| j| j|| j| j| jd� d S t| j|jd ƒ}t ¡ }|D ]}|d }|j|||d� q~|j| j| j| j	| j
| j| j| j|| j| j| jd� | ¡  | ¡  d S )NT©r,   ©ZkeepÚnonezrc4-40zrc4-128zaes-128zaes-256)
ÚgarbageÚdeflateÚprettyÚcleanÚasciiÚlinearrZ   Zowner_pwZuser_pwZpermissionsr   ©Z	from_pageZto_page)r.   r\   r*   rZ   r=   re   ÚsaveÚoutputrp   Úcompressrr   Úsanitizert   ru   r#   r$   Z
permissionrW   rb   r   r%   Ú
insert_pdfrg   )rh   r   rZ   Zencryptre   Zoutdocrl   r   r   r   r   rs   Þ   sR    ÿõõrs   c           
      C   sÚ   | j }t ¡ }|D ]¨}| d¡}t|ƒdkr4|d nd}t|d |dd�}d |dd… ¡}|r€td |dd… ¡|jd ƒ}nt	d|jd ƒ}|D ]}	|j
||	d |	d d� q”| ¡  q|j| jd	dd
� | ¡  dS )z&Join pages from several PDF documents.rH   r   Nr   Trm   r"   rv   r   )rp   rq   )r\   r   r%   r<   r/   r.   ÚjoinrW   rb   rP   r{   rg   rw   rx   )
rh   Zdoc_listr   Zsrc_itemZsrc_listr*   Úsrcre   Z	page_listrT   r   r   r   Údoc_join  s    
 
r~   c           	      C   sJ  t | j| jdd�}| ¡ s6| jr,| j| jkr6t d¡ t | j| jƒ}| j	rTt
| j	ƒnt
ƒ }t
| ¡ ƒ}|r~||ks‚t d¡ n|}|s�t d¡ |t
| ¡ ƒ@ }|r¶t dt|ƒ ¡ |D ]J}| |¡}| |¡}|j|||d |d |d	 d
� td||j	f ƒ qº| ¡  | j�r6| j| jk�r6|j| jdd� n| ¡  | ¡  dS )z!Copy embedded files between PDFs.Trm   úcannot save PDF incrementallyz%not all names are contained in sourceznothing to copyz2following names already exist in receiving PDF: %sr)   Ú	ufilenameÚdesc©r)   r€   r�   zcopied entry '%s' from '%s'r[   ©rp   N)r.   r\   r*   Úcan_save_incrementallyrx   r&   r'   ÚsourceZ	pwdsourcer(   ÚsetÚembfile_namesrI   Úembfile_infoÚembfile_getÚembfile_addr   rg   rw   ÚsaveIncr)	rh   r   r}   ÚnamesZ	src_namesZ	intersectr   ÚinfoZbuffr   r   r   Úembedded_copy"  sF    ÿ
ÿ



ûrŽ   c                 C   s¤   t | j| jdd�}| ¡ s6| jr,| j| jkr6t d¡ z| | j¡ W n$ t	k
rj   t d| j ¡ Y nX | jr~| j| jkrˆ| 
¡  n|j| jdd� | ¡  dS )zDelete an embedded file entry.Trm   r   úno such embedded file '%s'r   rƒ   N)r.   r\   r*   r„   rx   r&   r'   Úembfile_delr(   Ú
ValueErrorZ	save_incrrw   rg   )rh   r   r   r   r   Úembedded_delJ  s    ÿ
ÿ

r’   c                 C   s¢   t | j| jdd�}z| | j¡}| | j¡}W n$ tk
rR   t d| j ¡ Y nX | j	r`| j	n|d }t
|dƒ}| |¡ | ¡  td| j|f ƒ | ¡  dS )z&Retrieve contents of an embedded file.Trm   r�   r)   Úwbzsaved entry '%s' as '%s'N)r.   r\   r*   r‰   r(   rˆ   r‘   r&   r'   rx   r%   Úwriterg   r   )rh   r   ÚstreamÚdr)   rx   r   r   r   Úembedded_get]  s    

r—   c                 C   s  t | j| jdd�}| ¡ s:| jdks0| j| jkr:t d¡ z | | j¡ t d| j ¡ W n   Y nX t	j
 | j
¡r„t	j
 | j
¡s”t d| j
 ¡ t| j
dƒ ¡ }| j
}|}| jsº|}n| j}|j| j||||d� | jrè| j| jkrò| ¡  n|j| jd	d
� | ¡  dS )zInsert a new embedded file.Trm   Nr   zentry '%s' already existszno such file '%s'Úrbr‚   r[   rƒ   )r.   r\   r*   r„   rx   r&   r'   r�   r(   r]   r^   ÚexistsÚisfiler%   Úreadr�   rŠ   r‹   rw   rg   ©rh   r   r•   r)   r€   r�   r   r   r   Úembedded_addm  s>    ÿ
ÿ
    ÿ
r�   c                 C   s>  t | j| jdd�}| ¡ s:| jdks0| j| jkr:t d¡ z| | j¡ W n   t d| j ¡ Y nX | j	dk	r t
j	 | j	¡r t
j	 | j	¡r t| j	dƒ ¡ }nd}| jr²| j}nd}| jrÄ| j}n| jrÒ| j}nd}| jrä| j}nd}|j| j||||d� | jdk�s| j| jk�r"| ¡  n|j| jdd	� | ¡  dS )
z0Update contents or metadata of an embedded file.Trm   Nr   r�   r˜   r‚   r[   rƒ   )r.   r\   r*   r„   rx   r&   r'   rˆ   r(   r^   r]   r™   rš   r%   r›   r)   r€   r�   Zembfile_updr‹   rw   rg   rœ   r   r   r   Úembedded_updŽ  sR    ÿ
ÿ
ÿþý    ÿ
rž   c                 C   s  t | j| jdd�}| ¡ }| jdk	rŠ| j|kr@t d| j ¡ nJtƒ  tdt|ƒt|ƒdkr`dndf ƒ tƒ  t	| 
| j¡ƒ tƒ  dS |s td	|j ƒ dS t|ƒdkrÀd
|jt|ƒf }n
d|j }t|ƒ tƒ  |D ]2}| jsðt|ƒ qÜ| 
|¡}t	| 
|¡ƒ tƒ  qÜ| ¡  dS )zList embedded files.Trm   Nr�   z!printing 1 of %i embedded file%s:r   r   rG   z'%s' contains no embedded filesz-'%s' contains the following %i embedded filesz)'%s' contains the following embedded file)r.   r\   r*   r‡   r(   r&   r'   r   r/   r:   rˆ   Údetailrg   )rh   r   rŒ   r9   r(   Ú_r   r   r   Úembedded_list¿  s>    

ÿÿ

r¡   c              
   C   sf  | j s| jst d¡ t| j| jdd�}| jrBt| j|j	d ƒ}nt
d|j	d ƒ}| jshtj tj¡}n,| j}tj |¡r†tj |¡s”t d| ¡ tƒ }tƒ }|D �]z}| j �rL| |d ¡}|D ]†}|d }	|	|krÄ| |	¡ | |	¡\}
}}}|dksÄ|�sqÄtj ||
 dd	¡› d	|	› d
|› �¡}t|dƒ}| |¡ | ¡  d}qÄ| jr¤| |d ¡}|D ]º}|d }	|	|k�rd| |	¡ t||ƒ}t|ƒtk�rà|d }|d }tj |d|	|f ¡}t|dƒ}| |¡ | ¡  n<tj |d|	 ¡}|jj dk �r|nt! "t!j#|¡}| $|¡ �qdq¤| j �r>t%dt&|ƒ|f ƒ | j�rZt%dt&|ƒ|f ƒ | ¡  dS )z)Extract images and / or fonts from a PDF.z"neither fonts nor images requestedTrm   r   z"output directory %s does not existr   zn/arF   r
   Ú.r“   NÚextÚimagez	img-%i.%sz
img-%i.pngr   zsaved %i fonts to '%s'zsaved %i images to '%s')'ZfontsZimagesr&   r'   r.   r\   r*   re   rW   rb   rP   rx   r]   r^   ÚabspathÚcurdirr™   Úisdirr†   Zget_page_fontsÚaddZextract_fontr|   rJ   r%   r”   rg   Zget_page_imagesr    ÚtypeÚdictr   r   r   r   r   rw   r   r/   )rh   r   re   Zout_dirZ
font_xrefsZimage_xrefsrl   Zitemlistr   r?   Zfontnamer£   r    ÚbufferÚoutnameÚoutfiler   Zimgdatar   r   r   r   Úextract_objectsã  sp    


 ÿ








ÿýr®   c           	      C   sX   |rdnt dgƒ}| jd|d�}|s6|s2| |¡ d S | |jddd�¡ | |¡ d S )Nó   
é   Útext©ÚflagsÚutf8Úsurrogatepass©Úerrors)ÚbytesÚget_textr”   Úencode)	rD   ÚtextoutÚGRIDÚfontsizeÚ
noformfeedÚ
skip_emptyr³   Úeopr±   r   r   r   Úpage_simple'  s    

rÁ   c           
      C   sz   |rdnt dgƒ}| jd|d�}|g kr:|s6| |¡ d S |jdd„ d� |D ]}	| |	d jd	d
d�¡ qN| |¡ d S )Nr¯   r°   Úblocksr²   c                 S   s   | d | d fS )Nr[   r   r   )Úbr   r   r   r   :  r   z page_blocksort.<locals>.<lambda>©Úkeyr   r´   rµ   r¶   )r¸   r¹   r”   Úsortrº   )
rD   r»   r¼   r½   r¾   r¿   r³   rÀ   rÂ   rÃ   r   r   r   Úpage_blocksort3  s    

rÇ   c           !         s>  |rdnt dgƒ}tt ttdœdd„}tt tdœdd„}	tt tjd	œ‡ ‡fd
d„}
ttdœdd„‰dd„ }| jd|d�d }|
|| ƒ\}}}}}|g kr°|s¬| 	|¡ d S |	||ƒ}|j
dd„ d� i }|D ]8}|\}}}}|||ƒ}| |g ¡}| |¡ |||< qÒt| ¡ ƒ}| 
¡  || }i }|D ]f}|| }t|ƒ}|dk �rZd||< �q0dd„ |D ƒ}| 
¡  t |¡}||k �rˆ|}|d ||< �q0||d |d   |t|ƒ  d }|d }| 	d¡ |D ]\}||k �rö| 	d¡ ||7 }�qÖ||||| || ƒ} | 	| d jdd d!�¡ || }�qÒ| 	|¡ d S )"Nr¯   r°   )ÚvaluesÚvalueÚreturnc                 S   s0   t  | |¡}|r| |d  S td|| f ƒ‚dS )zôFind 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 %sN)ÚbisectÚbisect_rightÚRuntimeError)rÈ   rÉ   rT   r   r   r   Úfind_line_indexE  s    	z$page_layout.<locals>.find_line_index)ÚrowsrÊ   c                 S   sJ   t | ƒ} |  ¡  | d g}| dd … D ]}||d | kr&| |¡ q&|S )Nr   r   r!   )rO   rÆ   rN   )rÏ   r¼   ZnrowsÚhr   r   r   Úcurate_rowsT  s    
z page_layout.<locals>.curate_rows)rÂ   rD   c              
      sÈ  t ƒ }|jj}|jj}|}|}d}g }| D �]Œ}	|	d D �]|}
|
d dkrLq8|
d \}}}}|dk s8||jjkrrq8|| }||kr†|}|
d D �]$}|d ˆ kr¢qŽ|d D �]}|d \}}}}|| }|d	 \}}tt|ƒƒ}| |¡ |d
 }||k�r
|dk�r
|}||k �r|}|dk�r |g k�r |d \}}}}||k�r |tdƒk�rbˆ|| ƒ}n,|dk�rvtdƒ}n|dk�rŠtdƒ}n|}||||f|d< qª| ||||f¡ qªqŽq8q*|||||fS )Nr   ÚlinesÚdir)r   r   ZbboxÚspansrB   ÚcharsÚoriginÚcrF   r!   é û  rT   éû  r7   éû  )	r†   ÚrectÚwidthÚheightrM   r`   r¨   ÚchrrN   )rÂ   rD   rÏ   Z
page_widthZpage_heightÚ	rowheightÚleftÚrightrÕ   ÚblockÚlineZx0Zy0Úx1Úy1rÝ   Úspanr×   r    ÚcwidthÚoxÚoyÚchZold_chÚold_oxZold_oyZ
old_cwidthÚlig©r½   Újoinligaturer   r   Úprocess_blocks]  sZ    







z#page_layout.<locals>.process_blocks)rì   rÊ   c                 S   st   | dkrt dƒS | dkr t dƒS | dkr0t dƒS | dkr@t dƒS | d	krPt d
ƒS | dkr`t dƒS | dkrpt dƒS | S )zËReturn 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û  )rÞ   )rì   r   r   r   rî   ‘  s    	z!page_layout.<locals>.joinligaturec                 S   sô   d}d}d}d}|t jkr&td| ƒ‚|D ]À}|\}	}
}}|
|  }
|
| }||	krd|
| |d krdq*|	dkr~||
 | dkr~q*|	}|
|| k r ||	7 }|}|
}q*|	dkrªq*t|
| ƒt|ƒ }|
|krÚ|dkrÚ|d| 7 }||	7 }|}|
}q*| ¡ 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
        rG   r   z%program error: minslot too small = %ggš™™™™™É?rF   gš™™™™™é?r   )r   ZEPSILONrÍ   rM   r/   Úrstrip)rà   ÚslotZminslotÚlcharsr±   Zold_charZold_x1rë   r×   Úcharrè   r    rç   rä   Údeltar   r   r   Úmake_textline«  s:    
z"page_layout.<locals>.make_textlineZrawdictr²   rÂ   c                 S   s   | d S )Nr   r   )r×   r   r   r   r   í  r   zpage_layout.<locals>.<lambda>rÄ   r"   r   c                 S   s   g | ]}|d  ‘qS )r[   r   )r0   r×   r   r   r   r2     s     zpage_layout.<locals>.<listcomp>r   r!   g333333ó?Ú
r´   rµ   r¶   )r¸   r   rM   r   r   r   ZPagerI   r¹   r”   rÆ   ÚgetrN   rO   r4   r/   Ú
statisticsZmedianrº   )!rD   r»   r¼   r½   r¾   r¿   r³   rÀ   rÎ   rÑ   rï   rü   rÂ   rÕ   rÏ   rà   rá   rß   rÒ   r×   r    ré   Úyrù   r4   rø   Zminslotsr1   ZccountÚwidthsZ	this_slotZrowposr±   r   rí   r   Úpage_layoutA  s`    	46








$


r  c              
   C   sÚ   t | j| jdd�}t| j|jd ƒ}| j}|d krLtj 	|j
¡\}}|d }t|dƒ}ttB }| jrl|tN }| jrz|tN }| jrˆ|tN }tttdœ}|D ]4}	||	d  }
|| j |
|| j| j| j| j|d� q˜| ¡  d S )NFrm   r   z.txtr“   ©ÚsimplerÂ   Úlayoutr²   )r.   r\   r*   rW   re   rb   rx   r]   r^   Úsplitextr(   r%   r   r   Zconvert_whiteZnoligaturesZextra_spacesr   rÁ   rÇ   r  ÚmodeÚgridr½   r¾   r¿   rg   )rh   r   rk   rx   r)   r    r»   r³   Úfuncrl   rD   r   r   r   Úgettext"  s<    
ýù
r
  c                  C   s  t jdtdƒd�} | jddd�}|jdtdƒd	�}|jd
tdd� |jddd� |jdddd� |jdddd� |jdddd� |jdtdd� |jdtdd� |jtd� |jdtdƒd	�}|jd
tdd� |jdtd d� |jddd� |jd!d"d#d$d%� |jd&td'd� |jd(td)d� |jd*t	d+t
d,ƒd-d.� |jd/dd0d1d2� |jd3dd0d4d2� |jd5dd0d6d2� |jd7t	d8d9d:� |jd;dd0d<d2� |jd=dd0d>d2� |jdd?d� |jtd� |jd@tdAƒdBdC�}|jd
dDdEdF� |jdGdHdIdJ� |jtd� |jdKtdLƒd	�}|jd
tdd� |jdMddNd� |jdOddPd� |jdGdQd� |jddd� |jdtdRd� |jtd� |jdStdTƒd	�}|jd
dd� |jdUdVd� |jdWddXd� |jddd� |jtd� |jdYtdZƒd	�}|jd
dd� |jddd� |jdGd[d� |jdUdHd\dJ� |jd]dHd^dJ� |jd_d`d� |jtd� |jdatdbƒd	�}|jd
dd� |jddd� |jdGd[d� |jdUdHdcdJ� |jtd� |jddtdeƒdfdC�}|jd
dd� |jdUdHdgdJ� |jddd� |jdGdhd� |jd]did� |jdjdkd� |jdldmd� |jd_dnd� |jtd� |jdotdpƒd	�}	|	jd
tdd� |	jdUdHdgdJ� |	jddd� |	jdGdqd� |	jtd� |jdrtdsƒd	�}
|
jd
tdtd� |
jddud� |
jdGdvd� |
jdwdHdxdJ� |
jdydzd� |
jdUdDd{dF� |
jtd� |jd|td}ƒd	�}|jd
td~d� |jddd� |jd€td�d‚dƒd.� |jdtd„d…d†� |jd‡ddˆd0d‰� |jdŠdd‹d0d‰� |jdŒdd�d0d‰� |jdŽdd�d0d‰� |jd�dd‘d0d‰� |jdGd’d� |jd“td”d•d†� |jd–td—d˜d†� |jtd� |  ¡ }t|d™ƒ�s|  ¡  n
| |¡ dšS )›zDefine command configurations.r   zBasic PyMuPDF Functions)ÚprogÚdescriptionZSubcommandsz/Enter 'command -h' for subcommand specific help)ÚtitleÚhelpr+   zdisplay PDF information)r  r\   zPDF filename)r©   r  z	-passwordr*   )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	  rs   z.optimize PDF, or create sub-PDF if pages givenrx   zoutput PDF filenamez-encryptionzencryption methodrn   ro   )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)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)r[   r	  N)ÚargparseÚArgumentParserrd   Úadd_subparsersÚ
add_parserÚadd_argumentrI   Úset_defaultsr+   rM   rP   rs   r~   r®   r¡   r�   r’   rž   r—   rŽ   Úfloatr
  Ú
parse_argsÚhasattrÚ
print_helpr	  )ÚparserZsubpsZps_showZps_cleanZps_joinZ
ps_extractZps_embed_addZps_embed_delZps_embed_updZps_embed_extractZps_embed_copyZ
ps_gettextrh   r   r   r   ÚmainE  s"   þ ÿ  ÿ  ÿ ÿüûü   ÿü   ÿü   ÿ ÿý ÿ ÿ  ÿ ÿ ÿ ÿ ÿ ÿý ÿ ÿ ÿ ÿ ÿ ÿ  ÿ  ÿ ÿûüüüüüüþüü
r$  Ú__main__)FT)rD   )%r  rË   r]   r&   rÿ   Útypingr   r   r   r   r   Z	fitz.fitzr   r   r   rd   r    r.   r:   rC   rW   r+   rs   r~   rŽ   r’   r—   r�   rž   r¡   r®   rÁ   rÇ   r  r
  r$  Ú__name__r   r   r   r   Ú<module>   sB   $
	
/?/(!1$D b#  ,
