o
    ¾Ùøi9  ã                   @   sn  d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlZddlmZmZmZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z' e (¡  e )e*¡Z+e ,d¡Z-de.e/B de.fdd„Z0d4dede1de.dB ddfdd„Z2	d5dedede3ddfdd„Z4		d6dedede.dB de3ddf
dd„Z5				d7ded e.d!ed"e	e6 d#e.d$e3de.dB d%e.dB ddfd&d'„Z7e#d(ƒZ8e#d)ƒZ9d e.d#e.d%e.ddfd*d+„Z:					d8ded e.d!e
e6 d"e	e6 d#e.d$e3de.dB d%e.dB de3ddfd,d-„Z;defd.d/„Z<d4d0e=e. dB ddfd1d2„Z>e*d3k�r5e>ƒ  dS dS )9z#Extract pdf structure in XML formaté    N)ÚArgumentParser)Ú	ContainerÚIterable)ÚAnyÚTextIOÚcast)ÚPDFDocumentÚPDFNoOutlinesÚPDFXRefFallback)Ú
PDFIOErrorÚPDFObjectNotFoundÚPDFTypeErrorÚPDFValueError)ÚPDFPage)Ú	PDFParser)Ú	PDFObjRefÚ	PDFStreamÚresolve1Ústream_value)ÚLITÚ	PSKeywordÚ	PSLiteral)Úisnumberz&[\000-\037&<>()"\042\047\134\177-\377]ÚsÚreturnc                 C   s(   t | tƒr
t| dƒn| }t dd„ |¡S )Nzlatin-1c                 S   s   dt |  d¡ƒ› d�S )Nz&#r   ú;)ÚordÚgroup)Úm© r   úa/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/../../../bin/dumppdf.pyÚ<lambda>"   s    zescape.<locals>.<lambda>)Ú
isinstanceÚbytesÚstrÚESC_PATÚsub)r   Úusr   r   r    Úescape    s   r(   ÚoutÚobjÚcodecc                 C   s0  |d u r|   d¡ d S t|tƒrC|   dt|ƒ› d�¡ | ¡ D ]\}}|   d|› d�¡ |   d¡ t| |ƒ |   d¡ q|   d¡ d S t|tƒri|   d	t|ƒ› d�¡ |D ]}t| |ƒ |   d
¡ qU|   d¡ d S t|ttfƒr‚|   dt|ƒ› dt	|ƒ› d�¡ d S t|t
ƒrÐ|dkr”|   | ¡ ¡ d S |dkr¡|   | ¡ ¡ d S |   d¡ t| |jƒ |   d¡ |dkrÉ| ¡ }|   dt|ƒ› dt	|ƒ› d�¡ |   d¡ d S t|tƒrá|   d|j› d�¡ d S t|tƒrò|   d|j› d�¡ d S t|tƒ�r|   d|j› d�¡ d S t|ƒ�r|   d|› d�¡ d S t|ƒ‚)Nz<null />z<dict size="ú">
z<key>z</key>
z<value>z	</value>
z</dict>z<list size="Ú
z</list>z<string size="z">z	</string>ÚrawÚbinaryz<stream>
<props>
z

</props>
Útextz<data size="z</data>
z	</stream>z	<ref id="z" />z	<keyword>z
</keyword>z	<literal>z
</literal>z<number>z	</number>)Úwriter"   ÚdictÚlenÚitemsÚdumpxmlÚlistr$   r#   r(   r   Úget_rawdataÚget_dataÚattrsr   Úobjidr   Únamer   r   r   )r)   r*   r+   ÚkÚvÚdatar   r   r    r5   %   sd   







 
õ	
ù
 



r5   FÚdocÚshow_fallback_xrefc                 C   sr   |j D ]}t|tƒr|r|  d¡ t| | ¡ ƒ |  d¡ qtdd„ |j D ƒƒ}|r5|s7d}t |¡ d S d S d S )Nz
<trailer>
z
</trailer>

c                 s   s   � | ]}t |tƒV  qd S ©N)r"   r
   )Ú.0Úxrefr   r   r    Ú	<genexpr>p   s   € zdumptrailers.<locals>.<genexpr>z‰This PDF does not have an xref. Use --show-fallback-xref if you want to display the content of a fallback xref that contains all objects.)	Úxrefsr"   r
   r1   r5   Úget_trailerÚallÚloggerÚwarning)r)   r?   r@   rC   Úno_xrefsÚmsgr   r   r    Údumptrailersf   s   


€ÿúrL   c           	      C   sÎ   t ƒ }|  d¡ |jD ]N}| ¡ D ]G}||v rq| |¡ z"| |¡}|d u r)W q|  d|› d�¡ t| ||d� |  d¡ W q tyX } ztd|›�ƒ W Y d }~qd }~ww qt	| ||ƒ |  d¡ d S )Nz<pdf>z<object id="r,   ©r+   z
</object>

znot found: z</pdf>)
Úsetr1   rE   Ú
get_objidsÚaddÚgetobjr5   r   ÚprintrL   )	r)   r?   r+   r@   ÚvisitedrC   r:   r*   Úer   r   r    Údumpallobjsz   s*   



€ÿõrU   Ú ÚoutfpÚfnameÚobjidsÚpagenosÚpasswordÚdumpallÚ
extractdirc              	      sœ  t |dƒ�¿}t|ƒ}	t|	|ƒ‰ dd„ tt ˆ ¡dƒD ƒ}
dtdtf‡ fdd„}z‡ˆ  ¡ }|  	d	¡ |D ]t\}}}}}d }|rJ||ƒ}|
|d
 j
 }n(|rr|}t|tƒrr| d¡}|rrt|ƒdkrr| d¡rr||d ƒ}|
|d
 j
 }t|ƒ}|  	d|›d|› d�¡ |d ur•|  	d¡ t| |ƒ |  	d¡ |d ur¢|  	d|›d�¡ |  	d¡ q3|  	d¡ W n	 ty·   Y nw |	 ¡  W d   ƒ d S 1 sÇw   Y  d S )NÚrbc                 S   s   i | ]\}}|j |“qS r   )Úpageid)rB   ÚpagenoÚpager   r   r    Ú
<dictcomp>¡   s    ÿÿzdumpoutline.<locals>.<dictcomp>é   Údestr   c                    s`   t | ttfƒrtˆ  | ¡ƒ} nt | tƒrtˆ  | j¡ƒ} t | tƒr%| d } t | tƒr.|  	¡ } | S )NÚD)
r"   r$   r#   r   Úget_destr   r;   r2   r   Úresolve)rd   ©r?   r   r    Úresolve_dest¦   s   


z!dumpoutline.<locals>.resolve_destz<outlines>
r   ÚSz/'GoTo're   z<outline level="z	" title="r,   z<dest>z</dest>
z<pageno>z
</pageno>
z</outline>
z</outlines>
)Úopenr   r   Ú	enumerater   Úcreate_pagesÚobjectr   Úget_outlinesr1   r:   r"   r2   ÚgetÚreprr(   r5   r	   Úclose)rW   rX   rY   rZ   r[   r\   r+   r]   ÚfpÚparserÚpagesri   ÚoutlinesÚlevelÚtitlerd   ÚaÚ_ser`   ÚactionÚsubtyper   r   rh   r    Údumpoutline”   sJ   

þ





ÿ
"Òr}   ÚFilespecÚEmbeddedFilec           
         sÄ   dt dtttf dd f‡ ‡fdd„}t| dƒ�A}t|ƒ}t||ƒ‰ tƒ }ˆ jD ](}| 	¡ D ]!}ˆ  
|¡}	||vrNt|	tƒrN|	 d¡tu rN| |¡ |||	ƒ q-q'W d   ƒ d S 1 s[w   Y  d S )Nr:   r*   r   c                    s   t j | d¡ptt| d¡ƒ ¡ ¡}|d  d¡p |d  d¡}ˆ  |j¡}t	|t
ƒs6d|›d�}t|ƒ‚| d¡turEtd|›d�ƒ‚t j ˆ| d›d	|› �¡}t j |¡r_td
|›�ƒ‚td|›�ƒ t jt j |¡dd� t|dƒ�}| | ¡ ¡ W d   ƒ d S 1 s‰w   Y  d S )NÚUFÚFÚEFz%unable to process PDF: reference for z is not a PDFStreamÚTypez is not an EmbeddedFileÚ06dú-zfile exists: zextracting: T)Úexist_okÚwb)ÚosÚpathÚbasenamerp   r   r#   ÚdecoderQ   r:   r"   r   r   ÚLITERAL_EMBEDDEDFILEÚjoinÚexistsr   rR   ÚmakedirsÚdirnamerk   r1   r8   )r:   r*   ÚfilenameÚfilerefÚfileobjÚ	error_msgr‰   r)   ©r?   r]   r   r    Úextract1Ô   s&   &

ÿ
ÿ"ÿz!extractembedded.<locals>.extract1r^   rƒ   )Úintr2   r$   r   rk   r   r   rN   rE   rO   rQ   r"   rp   ÚLITERAL_FILESPECrP   )
rX   r[   r]   r–   rs   rt   Úextracted_objidsrC   r:   r*   r   r•   r    ÚextractembeddedÓ   s$   $


ÿ

€øÿ"ürš   c	                 C   sþ   t |dƒ�e}	t|	ƒ}
t|
|ƒ}|r"|D ]}| |¡}t| ||d� q|rNtt |¡ƒD ]"\}}||v rM|rG|jD ]}t	|ƒ}t| ||d� q8q+t| |j
ƒ q+|rWt| |||ƒ |sc|sc|sct| ||ƒ W d   ƒ n1 smw   Y  |dvr}|  d¡ d S d S )Nr^   rM   )r.   r/   r-   )rk   r   r   rQ   r5   rl   r   rm   Úcontentsr   r9   rU   rL   r1   )rW   rX   rY   rZ   r[   r\   r+   r]   r@   rs   rt   r?   r:   r*   r`   ra   r   r   r    Údumppdfú   s4   


þ€€íÿrœ   c                  C   sd  t tdd�} | jdtd ddd� | jddd	d
tj› �d� | jdddddd� |  ¡ }|jdddddd� |jddtdd� | jddd�}|jdtd ddd� |jddtd d� |jd!d"td#d� |jd$d%ddd&d� |jd'dd(d)� |jd*d+td,d-d.� | jd/d0d�}|jd1d2td3d4d.� | ¡ }|jd5d6ddd7d� |jd8d9ddd:d� |jd;d<ddd=d� | S )>NT)ÚdescriptionÚadd_helpÚfilesú+zOne or more paths to PDF files.)ÚtypeÚdefaultÚnargsÚhelpz	--versionz-vÚversionzpdfminer.six v)r{   r¥   z--debugz-dFÚ
store_truezUse debug logging level.)r¢   r{   r¤   z--extract-tocz-TzExtract structure of outlinez--extract-embeddedz-EzExtract embedded files)r¡   r¤   ÚParserzUsed during PDF parsing)r�   z--page-numbersz0A space-seperated list of page numbers to parse.z	--pagenosz-pzˆA comma-separated list of page numbers to parse. Included for legacy applications, use --page-numbers for more idiomatic argument entry.z	--objectsz-iz1Comma separated list of object numbers to extractz--allz-az3If the structure of all objects should be extractedz--show-fallback-xrefz¡Additionally show the fallback xref. Use this if the PDF has zero or only invalid xref's. This setting is ignored if --extract-toc or --extract-embedded is used.)r{   r¤   z
--passwordz-PrV   z,The password to use for decrypting PDF file.)r¡   r¢   r¤   ÚOutputzUsed during output generation.z	--outfilez-or…   zJPath to file where output is written. Or "-" (default) to write to stdout.z--raw-streamz-rz%Write stream objects without encodingz--binary-streamz-bz)Write stream objects with binary encodingz--text-streamz-tz"Write stream objects as plain text)	r   Ú__doc__Úadd_argumentr$   ÚpdfminerÚ__version__Úadd_mutually_exclusive_groupÚadd_argument_groupr—   )rt   Úprocedure_parserÚparse_paramsÚoutput_paramsÚcodec_parserr   r   r    Úcreate_parser  sÞ   û
üûûüþûüüûýûþûûûûr³   Úargvc           	      C   sX  t ƒ }|j| d�}|jrt ¡  tj¡ |jr"dd„ |j d¡D ƒng }|j	r0dd„ |j	D ƒ}n|j
r?dd„ |j
 d¡D ƒ}ntƒ }|j}|jrKd}n|jrQd	}n|jrWd
}nd }|jdkratjnt|jdƒ�;}|jD ].}|jr~t||||||j|d d� qk|jrŠt|||jd� qkt||||||j|d |jd�	 qkW d   ƒ d S 1 s¥w   Y  d S )N)Úargsc                 S   s   g | ]}t |ƒ‘qS r   ©r—   ©rB   Úxr   r   r    Ú
<listcomp>Ÿ  ó    zmain.<locals>.<listcomp>ú,c                 S   s   h | ]}|d  ’qS ©rc   r   r·   r   r   r    Ú	<setcomp>¢  rº   zmain.<locals>.<setcomp>c                 S   s   h | ]}t |ƒd  ’qS r¼   r¶   r·   r   r   r    r½   ¤  s    r.   r/   r0   r…   Úw)r[   r\   r+   r]   )r[   r]   )r[   r\   r+   r]   r@   )r³   Ú
parse_argsÚdebugÚloggingÚ	getLoggerÚsetLevelÚDEBUGÚobjectsÚsplitÚpage_numbersrZ   rN   r[   Ú
raw_streamÚbinary_streamÚtext_streamÚoutfileÚsysÚstdoutrk   rŸ   Úextract_tocr}   rG   Úextract_embeddedrš   rœ   r@   )	r´   rt   rµ   rY   rZ   r[   r+   rW   rX   r   r   r    Úmain˜  s`    
ø
ÿ÷ï"ÿrÐ   Ú__main__rA   )F)NF)rV   FNN)rV   FNNF)?r©   rÁ   Úos.pathrˆ   ÚrerÌ   Úargparser   Úcollections.abcr   r   Útypingr   r   r   r«   Úpdfminer.pdfdocumentr   r	   r
   Úpdfminer.pdfexceptionsr   r   r   r   Úpdfminer.pdfpager   Úpdfminer.pdfparserr   Úpdfminer.pdftypesr   r   r   r   Úpdfminer.psparserr   r   r   Úpdfminer.utilsr   ÚbasicConfigrÂ   Ú__name__rH   Úcompiler%   r$   r#   r(   rn   r5   ÚboolrL   rU   r—   r}   r˜   rŒ   rš   rœ   r³   r6   rÐ   r   r   r   r    Ú<module>   sÊ   

 Dýÿþý
üüÿþýü
ûøÿþýüûúùø	
÷;,÷ÿþýüûúùø	÷

ö#{
;
ÿ