Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 ©«jó1ã@s¬ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z mZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZddlm Z m!Z!dd l"m#Z#dd l$m%Z%m&Z&m'Z'dd l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/dd l0m1Z1dd l0m2Z3ddl0m4Z4ddl0m5Z6ddl0m7Z8ddl0m9Z9m:Z:m;Z;mZ?ddl0m@ZAddl0mBZCddl0mDZEddl0mFZFmGZGddlHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ddlm]Z]m^Z^m_Z_m`Z`maZambZbmcZcejdeeƒZfe:dƒZgeGd(ƒZhGdd„dƒZieeejefejekeefeVdœdd „ZleRejeeemememfejdfeneneZd!œd"d#„ZoGd$d%„d%eiƒZpdS))éN)Úmd5)ÚBufferedReaderÚBufferedWriterÚBytesIOÚFileIO)ÚPath)Ú TracebackType) ÚAnyÚCallableÚDequeÚDictÚListÚOptionalÚTupleÚTypeÚUnionÚcasté)Ú PageObjectÚ _VirtualList)Ú PdfReader)Ú_alg33Ú_alg34Ú_alg35)Ú StrByteTypeÚ StreamTypeÚ_get_max_pdf_version_headerÚb_Údeprecate_bookmarkÚdeprecate_with_replacementÚlogger_warning)ÚAnnotationDictionaryAttributes)ÚCatalogAttributes)ÚCatalogDictionary)ÚCore)ÚEncryptionDictAttributes)ÚFieldDictionaryAttributesÚ FieldFlagÚ"FileSpecificationDictionaryEntriesÚGoToActionArgumentsÚInteractiveFormDictEntries)ÚPageAttributes)ÚPagesAttributes)ÚStreamAttributes)Ú TrailerKeys)ÚTypFitArgumentsÚUserAccessPermissions)ÚAnnotationBuilderÚ ArrayObjectÚ BooleanObjectÚByteStringObjectÚ ContentStreamÚDecodedStreamObjectÚ DestinationÚDictionaryObjectÚ FloatObjectÚIndirectObjectÚ NameObjectÚ NullObjectÚ NumberObjectÚ PdfObjectÚRectangleObjectÚ StreamObjectÚTextStringObjectÚ TreeObjectÚcreate_string_objectÚ hex_to_rgb)ÚBorderArrayTypeÚFitTypeÚ LayoutTypeÚOutlineItemTypeÚ PagemodeTypeÚ ZoomArgsTypeÚ ZoomArgTypeéééc @s” eZdZdZdýeddœdd„Zddœdd „Zeee ee ee dd œd d „Z e e dœd d„ƒZeje ddœdd„ƒZeedœdd„Zdþeeeeedœdd„Zeedœdd„Zeeeegdfddœdd„Zddœdd„Zeddœd d!„Zeddœd"d#„Zdÿeedd%œd&d'„Z�deedd%œd(d)„Z�deeeeed*œd+d,„Zeed-œd.d/„Z edœd0d1„Z!edœd2d3„Z"e e#edœd4d5„ƒZ$�dee%ee%ed6œd7d8„Z&�dee%ee%ed6œd9d:„Z'�dee(j)ee(j)eed;œdd?„Z+e e,de-e.e/fdœd@dA„ƒZ0e0je,de1e-efddBœdCdA„ƒZ0e1ddDœdEdF„Z2e1ddDœdGdH„Z3e1e,e1e fddIœdJdK„Z4e1e,e1e fddLœdMdN„Z5�de6eeegdfddOœdPdQ„Z7�de6eeegdfddOœdRdS„Z8e9fee:e1efe;ddTœdUdV„Ze6ddYœd\d]„Z?�de6eeegdfddOœd^d_„Z@�d e6eeegdfddOœd`da„ZAdddbeBddfee1ee1eCeDee1ee1ddcœddde„ZEeFddfœdgdh„ZGe,eHefeIeCe,eJeKeLeMffdfœdidj„ZNeFe#edfœdkdl„ZOeFe#eedmœdndo„ZPeFddfœdpdq„ZQe:e1efddrœdsdt„ZRe:e1efddrœdudv„ZSe,eTeUeVeWeeXeeYe.eZf ddwœdxdy„Z[eedzœd{d|„Z\eedœd}d~„Z]eedœdd€„Z^e_dœd�d‚„Z`eTdœdƒd„„Zae eTdœd…d†„ƒZbe_dœd‡dˆ„ZceTdœd‰dŠ„ZdeTdœd‹dŒ„Ze�d e,dee_fe,de_efe,dee_fed�œdŽd�„Zf�d e,ee_fe,de_efed�œd‘d’„Zg�d eee_ed�œd“d”„Zheid•d–��d ejee_ed—œd˜d™„ƒZkeid•d–��dejee_ed—œdšd›„ƒZleid•d–��dejee_ed—œdœd�„ƒZm�ddd œe1eee,de_efee,eIe%e%e%fe1feCeCeneoeeed¡œ d¢d£„Zp�de1ee,de_efeeIe%e%e%feCeCeneoed¤œ d¥d¦„Zq�de1ee,de_efeeIe%e%e%feCeCeneoed¤œ d§d¨„Zrddœd©dª„Zs�deeeeed«œd¬d­„ZteedBœd®d¯„Zu�de1eeeeed°œd±d²„Zve1eed³œd´dµ„Zwddœd¶d·„Zxddœd¸d¹„Zy�deCddºœd»d¼„Zz�deCdd½œd¾d¿„Z{�deCddºœdÀdÁ„Z|�deCdd½œdÂdÄZ}�dee1e~eeTeeddÄœdÅdÆ„Z�dee1e~eeTddÇœdÈdÉ„Z€�deee~eeTeneoddÊœdËdÌ„Z��deee~eeTeneoddÊœdÍd΄Z‚�dZƒee„dœdÖdׄZ…ee„dœdØdÙ„Z†e,eXe„fddÚœdÛdÜ„Z‡e„ddÚœdÝdÞ„Zˆe ee„dœdßdà„ƒZ‰e‰je„ddÚœdádà„ƒZ‰e ee„dœdâd㄃ZŠeŠje„ddÚœdäd㄃ZŠ�dZ‹eeŒdœdëdì„Z�eeŒdœdídî„ZŽeŒddïœdðdñ„Z�eŒddïœdòdó„Z�e eeŒdœdôdõ„ƒZ‘e‘jeŒddïœdödõ„ƒZ‘e eeŒdœd÷dø„ƒZ’e’jeŒddïœdùdø„ƒZ’ee:e1efddúœdûdü„Z“dS(Ú PdfWriterz� This class supports writing PDF files out, given pages produced by another class (typically :class:`PdfReader`). ÚN)ÚfileobjÚreturncCsÒd|_g|_i|_tƒ}|jttjƒtdƒttjƒt dƒttj ƒt ƒiƒ|j |ƒ|_ tƒ}|jtdƒttjdjdƒƒiƒ|j |ƒ|_tƒ}|jttjƒttjƒttjƒ|j iƒd|_||_||_d|_dS)Ns%PDF-1.3z/Pagesrz /ProducerZPyPDF2zutf-16beF)Ú_headerÚ_objectsÚ _idnum_hashr8Úupdater;ÚPAÚTYPEÚCOUNTr=ÚKIDSr2Ú _add_objectÚ_pagesrCÚcodecsÚ BOM_UTF16_BEÚencodeÚ_infoÚCOZCATALOGZPAGESÚ_rootÚ _root_objectrQÚ with_as_usage)ÚselfrQÚpagesÚinfoÚroot©riú0/tmp/pip-build-vnmlutbd/PyPDF2/PyPDF2/_writer.pyÚ__init__‚s,  zPdfWriter.__init__)rRcCs d|_|S)z+Store that writer is initialized by 'with'.T)rd)reririrjÚ __enter__ªszPdfWriter.__enter__)Úexc_typeÚexcÚ tracebackrRcCs|jr|j|jƒdS)zWrite data to the fileobj.N)rQÚwrite)rermrnroririrjÚ__exit__¯szPdfWriter.__exit__cCs|jS)zì Header of the PDF document that is written. This should be something like b'%PDF-1.5'. It is recommended to set the lowest version that supports all features which are used within the PDF file. )rS)reririrjÚ pdf_header¹s zPdfWriter.pdf_header)Ú new_headerrRcCs ||_dS)N)rS)rersririrjrrÄs)ÚobjrRcCs|jj|ƒtt|jƒd|ƒS)Nr)rTÚappendr:Úlen)rertririrjr[Ès zPdfWriter._add_object)Úindirect_referenceÚidorRcCsX|dk r*|dk rtdƒ‚n|}tjdtƒ|dk s6t‚|j|krHtdƒ‚|j|jdS)NzGPlease only set 'indirect_reference'. The 'ido' argument is deprecated.zGThe parameter 'ido' is depreciated and will be removed in PyPDF2 3.0.0.zpdf must be selfr)Ú ValueErrorÚwarningsÚwarnÚDeprecationWarningÚAssertionErrorÚpdfrTÚidnum)rerwrxririrjÚ get_objectÌs  zPdfWriter.get_object)rxrRcCstddƒ|j|ƒS)zU .. deprecated:: 1.28.0 Use :meth:`get_object` instead. Ú getObjectr€)rr€)rerxririrjr�ãs zPdfWriter.getObject)ÚpageÚactionrRcCs²tt|tjƒtjkst‚|jdk rL|jj}t |tƒr>|j ƒ}t |j|ƒ|_|j |t tjƒ<|j|ƒ}tt|j|j ƒƒ}||tj|ƒtt|tjƒ}t|dƒ|t tjƒ<dS)Nr)rÚstrrWrXraZPAGEr}r~rrÚ isinstancer_rr\r;ÚPARENTr[r8r€rZÚintrYr=)rer‚rƒÚotherZpage_indrfZ page_countririrjÚ _add_pageìs   zPdfWriter._add_pagecCsŽyV|j}tj|kr6|jjttjƒtt|jƒd|ƒiƒttj ƒ}t dƒ|jtj|<Wn2t k rˆ}zt j dt|ƒƒWYdd}~XnXdS)NrTz&set_need_appearances_writer() catch : )rcr#Z ACRO_FORMrVr;r:rvrTr*ZNeedAppearancesr3Ú ExceptionÚloggerÚerrorÚrepr)reÚcatalogZneed_appearancesrnririrjÚset_need_appearances_writerüs   z%PdfWriter.set_need_appearances_writer)r‚rRcCs|j|tjƒdS)a& Add a page to this PDF file. The page is usually acquired from a :class:`PdfReader` instance. :param PageObject page: The page to add to the document. Should be an instance of :class:`PageObject` N)r‰Úlistru)rer‚ririrjÚadd_pages zPdfWriter.add_pagecCstddƒ|j|ƒdS)zS .. deprecated:: 1.28.0 Use :meth:`add_page` instead. ÚaddPager‘N)rr‘)rer‚ririrjr’s zPdfWriter.addPager)r‚ÚindexrRcs|j|‡fdd„ƒdS)a Insert a page in this PDF file. The page is usually acquired from a :class:`PdfReader` instance. :param PageObject page: The page to add to the document. :param int index: Position at which the page will be inserted. cs |jˆ|ƒS)N)Úinsert)ÚlÚp)r“rirjÚ-sz'PdfWriter.insert_page..N)r‰)rer‚r“ri)r“rjÚ insert_page%szPdfWriter.insert_pagecCstddƒ|j||ƒdS)zV .. deprecated:: 1.28.0 Use :meth:`insert_page` instead. Ú insertPager˜N)rr˜)rer‚r“ririrjr™/s zPdfWriter.insertPage)Ú page_numberÚ pageNumberrRcCsr|dk r(|dk rtdƒ‚tdddƒ|}|dkr@|dkr@tdƒ‚ttttf|j|jƒƒ}tt|t j |jƒƒS)zÜ Retrieve a page by number from this PDF file. :param int page_number: The page number to retrieve (pages begin at zero) :return: the page at the index given by *page_number* Nz)Please only use the page_number parameterzget_page(pageNumber)zget_page(page_number)z4.0.0zPlease specify the page_number) ryrrr r„r r€r\rrWrZ)reršr›rfririrjÚget_page8s  zPdfWriter.get_page)r›rRcCstddƒ|j|ƒS)zd .. deprecated:: 1.28.0 Use :code:`writer.pages[page_number]` instead. ÚgetPagezwriter.pages[page_number])rrœ)rer›ririrjr�Os zPdfWriter.getPagecCs*ttttf|j|jƒƒ}t|tdƒƒS)Nz/Count)rr r„r r€r\r‡r;)rerfririrjÚ_get_num_pagesXszPdfWriter._get_num_pagescCstddƒ|jƒS)z\ .. deprecated:: 1.28.0 Use :code:`len(writer.pages)` instead. Ú getNumPageszlen(writer.pages))rrž)reririrjrŸ\s zPdfWriter.getNumPagescCst|j|jƒS)zNProperty that emulates a list of :class:`PageObject`.)rržrœ)reririrjrfeszPdfWriter.pages)ÚwidthÚheightrRcCstj|||ƒ}|j|ƒ|S)a Append a blank page to this PDF file and returns it. If no page size is specified, use the size of the last page. :param float width: The width of the new page expressed in default user space units. :param float height: The height of the new page expressed in default user space units. :return: the newly appended page :raises PageSizeNotDefinedError: if width and height are not defined and previous page does not exist. )rÚcreate_blank_pager‘)rer r¡r‚ririrjÚadd_blank_pagejs zPdfWriter.add_blank_pagecCstddƒ|j||ƒS)zY .. deprecated:: 1.28.0 Use :meth:`add_blank_page` instead. Ú addBlankPager£)rr£)rer r¡ririrjr¤}s zPdfWriter.addBlankPage)r r¡r“rRcCsX|dks |dkr:|jƒd|kr:|j|}|jj}|jj}tj|||ƒ}|j||ƒ|S)a8 Insert a blank page to this PDF file and returns it. If no page size is specified, use the size of the last page. :param float width: The width of the new page expressed in default user space units. :param float height: The height of the new page expressed in default user space units. :param int index: Position to add the page. :return: the newly appended page :raises PageSizeNotDefinedError: if width and height are not defined and previous page does not exist. Nr)ržrfZmediaboxr r¡rr¢r˜)rer r¡r“Zoldpager‚ririrjÚinsert_blank_pageˆs   zPdfWriter.insert_blank_pagecCstddƒ|j|||ƒS)zZ .. deprecated:: 1.28.0 Use :meth:`insertBlankPage` instead. ÚinsertBlankPager¥)rr¥)rer r¡r“ririrjr¦£s zPdfWriter.insertBlankPagec Cs˜d|jkrdS|jd}t|ttfƒr2tt|ƒƒSt|tƒr�y.|dd…\}}|dd…}td||f|žŽStk rŒtd|›�ƒ‚Yq”XndSdS)a� Property to access the opening destination ("/OpenAction" entry in the PDF catalog). it returns `None` if the entry does not exist is not set. :param destination:. the property can be set to a Destination, a Page or an string(NamedDest) or None (to remove "/OpenAction") (value stored in "/OpenAction" entry in the Pdf Catalog) z /OpenActionNrrLZ OpenActionzInvalid Destination )rcr…r„ÚbytesrCr2r7rŠ)reZoar‚ÚtypÚarrayririrjÚopen_destination±s     zPdfWriter.open_destination)ÚdestrRc Cs¢|dkr,y |jd=Wqžtk r(YqžXnrt|tƒrJt|ƒ|jtdƒ<nTt|tƒrf|j|jtdƒ<n8t|tƒržtd|j dk r„|j nt ƒtdƒƒj|jtdƒ<dS)Nz /OpenActionZOpeningz/Fit) rcÚKeyErrorr…r„rAr;r7Ú dest_arrayrrwr<)rer«ririrjrªÏs    )Ú javascriptrRcCsÊd|jkrtƒ|jttjƒ<tt|jtjƒ}d|krPttdƒtƒiƒ|tdƒ<tttt|dƒdƒ}tƒ}|jttj ƒtdƒtdƒtdƒtdƒt |›ƒiƒ|j t t tjƒƒƒƒ|j |j|ƒƒdS)a Add Javascript which will launch upon opening this PDF. :param str javascript: Your Javascript. >>> output.add_js("this.print({bUI:true,bSilent:false,bShrinkToFit:true});") # Example: This will launch the print window when the PDF is opened. z/Namesz /JavaScriptz/Actionz/Sz/JSN)rcr8r;ÚCAÚNAMESrr2rVrWrXrArurCr„ÚuuidÚuuid4r[)rer®ÚnamesZjs_listZjsririrjÚadd_jsãs  zPdfWriter.add_jscCstddƒ|j|ƒS)zQ .. deprecated:: 1.28.0 Use :meth:`add_js` instead. ÚaddJSr´)rr´)rer®ririrjrµs zPdfWriter.addJS)ÚfilenameÚdatarRcCsÎtƒ}|j|ƒ|jttjƒtdƒiƒtƒ}|jtdƒ|iƒtƒ}|jttjƒtdƒttjƒt |ƒttj ƒ|iƒtƒ}|jtt j ƒt t |ƒ|gƒiƒtƒ}|jtdƒ|iƒ|jjtt j ƒ|iƒdS)a Embed a file inside the PDF. :param str filename: The filename to display. :param str data: The data in the file. Reference: https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf Section 7.11.3 z /EmbeddedFilez/Fz /Filespecz/EmbeddedFilesN)r6Úset_datarVr;rWrXr8r(ÚFrCZEFr¯r°r2rc)rer¶r·Z file_entryZef_entryZfilespecZembedded_files_names_dictionaryZembedded_files_dictionaryririrjÚadd_attachments&    zPdfWriter.add_attachment)ÚfnameÚfdatarRcCstddƒ|j||ƒS)zY .. deprecated:: 1.28.0 Use :meth:`add_attachment` instead. Ú addAttachmentrº)rrº)rer»r¼ririrjr½`s zPdfWriter.addAttachment)ÚreaderÚafter_page_appendrRcCs\t|jƒ}t|jƒ}xBt|ƒD]6}|j|}|j|ƒ|j||}t|ƒr||ƒqWdS)aÆ Copy pages from reader to writer. Includes an optional callback parameter which is invoked after pages are appended to the writer. :param PdfReader reader: a PdfReader object from which to copy page annotations to this writer object. The writer's annots will then be updated :param Callable[[PageObject], None] after_page_append: Callback function that is invoked after each page is appended to the writer. Signature includes a reference to the appended page (delegates to append_pages_from_reader). The single parameter of the callback is a reference to the page just appended to the document. N)rvrfÚranger‘Úcallable)rer¾r¿Zreader_num_pagesZwriter_num_pagesZreader_page_numberZ reader_pageZ writer_pageririrjÚappend_pages_from_readerks    z"PdfWriter.append_pages_from_readercCstddƒ|j||ƒdS)zc .. deprecated:: 1.28.0 Use :meth:`append_pages_from_reader` instead. ÚappendPagesFromReaderrÂN)rrÂ)rer¾r¿ririrjrÊs zPdfWriter.appendPagesFromReader)r‚ÚfieldsÚflagsrRcCs|jƒtj|kr tdtƒdSxôtt|tjƒƒD]Þ}|tj|jƒ}i}tj|krb|tj}x®|D]¦}|j t j ƒ|krâ|j t j ƒdkr¨|j ttjƒt||ƒiƒ|j tt jƒt||ƒiƒ|rà|j tt jƒt|ƒiƒqh|j t j ƒ|krh|j tt jƒt||ƒiƒqhWq4WdS)a• Update the form field values for a given page from a fields dictionary. Copy field texts and values from fields to page. If the field links to a parent object, add the information to the parent. :param PageObject page: Page reference from PDF writer where the annotations and field data will be updated. :param dict fields: a Python dictionary of field names (/T) and text values (/V) :param int flags: An integer (0 to 7). The first bit sets ReadOnly, the second bit sets Required, the third bit sets NoExport. See PDF Reference Table 8.70 for details. z No fields to update on this pageNz/Btn)r�ÚPGÚANNOTSr Ú__name__rÀrvr€r†Úgetr&ÚTZFTrVr;r!ZASÚVrAZFfr=)rer‚rÄrÅÚjZ writer_annotZwriter_parent_annotÚfieldririrjÚupdate_page_form_field_values—s6         z'PdfWriter.update_page_form_field_valuescCstddƒ|j|||ƒS)zh .. deprecated:: 1.28.0 Use :meth:`update_page_form_field_values` instead. ÚupdatePageFormFieldValuesrÎ)rrÎ)rer‚rÄrÅririrjrÏØs z#PdfWriter.updatePageFormFieldValues)r¾rRcCstt|jtjƒ|_dS)zŠ Copy the reader document root to the writer. :param reader: PdfReader from the document root should be copied. N)rr8ÚtrailerÚTKÚROOTrc)rer¾ririrjÚclone_reader_document_rootèsz$PdfWriter.clone_reader_document_rootcCstddƒ|j|ƒdS)ze .. deprecated:: 1.28.0 Use :meth:`clone_reader_document_root` instead. ÚcloneReaderDocumentRootrÓN)rrÓ)rer¾ririrjrÔðsz!PdfWriter.cloneReaderDocumentRootcCs|j|ƒ|j||ƒdS)a) Create a copy (clone) of a document from a PDF file reader :param reader: PDF file reader instance from which the clone should be created. :param Callable[[PageObject], None] after_page_append: Callback function that is invoked after each page is appended to the writer. Signature includes a reference to the appended page (delegates to append_pages_from_reader). The single parameter of the callback is a reference to the page just appended to the document. N)rÓrÂ)rer¾r¿ririrjÚclone_document_from_readerûs z$PdfWriter.clone_document_from_readercCstddƒ|j||ƒdS)ze .. deprecated:: 1.28.0 Use :meth:`clone_document_from_reader` instead. ÚcloneDocumentFromReaderrÕN)rrÕ)rer¾r¿ririrjrÖs z!PdfWriter.cloneDocumentFromReaderT)Ú user_passwordÚowner_passwordÚ use_128bitÚpermissions_flagÚuser_pwdÚ owner_pwdrRcCsò|dk r(|dk rtdƒ‚ntjdƒ|}|dkr8tdƒ‚|dk rv|dk rRtdƒ‚n$d}d}tj|›d|›d �d �|}|dkr‚|}|r˜d } d } tdƒ} nd} d } tdƒ} |} tt||| | ƒƒ} ttttjƒƒj dƒƒj ƒƒ}tttt j ƒƒj dƒƒj ƒƒ}t ||fƒ|_ | d k�r&t|| | |ƒ\}}n&| d k�s4t‚t|| | | | |dƒ\}}tƒ}tdƒ|ttjƒ<t| ƒ|tdƒ<| d k�r”t| dƒ|ttjƒ<t| ƒ|ttjƒ<t| ƒ|ttjƒ<t|ƒ|ttjƒ<t| ƒ|ttjƒ<|j|ƒ|_||_dS)a Encrypt this PDF file with the PDF Standard encryption handler. :param str user_password: The "user password", which allows for opening and reading the PDF file with the restrictions provided. :param str owner_password: The "owner password", which allows for opening the PDF files without any restrictions. By default, the owner password is the same as the user password. :param bool use_128bit: flag as to whether to use 128bit encryption. When false, 40bit encryption will be used. By default, this flag is on. :param unsigned int permissions_flag: permissions as described in TABLE 3.20 of the PDF 1.7 specification. A bit value of 1 means the permission is grantend. Hence an integer value of -1 will set all flags. Bit position 3 is for printing, 4 is for modifying content, 5 and 6 control annotations, 9 for form fields, 10 for extraction of text and graphics. NzGPlease only set 'user_password'. The 'user_pwd' argument is deprecated.z}Please use 'user_password' instead of 'user_pwd'. The 'user_pwd' argument is deprecated and will be removed in PyPDF2==3.0.0.zuser_password may not be NonezIThe argument owner_pwd of encrypt is deprecated. Use owner_password only.rÜrØz# is deprecated as an argument. Use z instead)ÚmessagerLrNé€éré(Úutf8Fz /Standardz/Vg0@g@)ryrzr{r‡r4rrr�Útimer_ÚdigestÚrandomr2Ú_IDrr}rr8r;ÚSAZFILTERr=ZLENGTHÚEDÚRÚOÚUÚPr[Ú_encryptÚ _encrypt_key)rer×rØrÙrÚrÛrÜÚold_termÚnew_termrËÚrevZkeylenrëréZID_1ZID_2rêÚkeyÚencryptririrjròs^    zPdfWriter.encrypt)ÚstreamrRcCs‚t|dƒr(d|jkr(td|j›d�tƒ|js<|j|jƒ|_|j|jƒ|j |ƒ}|j ||ƒ}|j |ƒ|j t d|›d�ƒƒdS)NÚmodeÚbzFile to write to is not in binary mode. It may not be written to correctly.z startxref z %%EOF )Úhasattrrôr ÚnamerÈrbr[rcÚ_sweep_indirect_referencesÚ _write_headerÚ_write_xref_tableÚ_write_trailerrpr)reróÚobject_positionsÚ xref_locationririrjÚ write_streamys     zPdfWriter.write_streamcCsXd}|dkrtd|›d�ƒ‚t|ttfƒr8t|dƒ}d}|j|ƒ|jrP|jƒ||fS)ae Write the collection of pages added to this object out as a PDF file. :param stream: An object to write the file to. The object can support the write method and the tell method, similar to a file object, or be a file path, just like the fileobj, just named it stream to keep existing workflow. FrPzOutput(stream=z ) is empty.ÚwbT)ryr…r„rrrþrdÚclose)reróZmy_fileririrjrp“s   zPdfWriter.writec Cs(g}|j|jdƒ|jdƒ�xt|jƒD]ô\}}|j|}|dk r,|d}|j|jƒƒ|jtt|ƒƒdƒd}t|dƒoŠ||j j k�r t j d|dƒdd…}t j ddƒdd …}|j ||}t|ƒt|j ƒd ksât‚t|ƒjƒ} | dtd t|j ƒd ƒ…}|j||ƒ|jd ƒq,W|S) Nó s%âãÏÓ rs 0 obj rìz10ú iÿÿz0>5z f z n )rrprrvrT)rerórürýÚoffsetririrjrúÅs   "zPdfWriter._write_xref_tablecCsŽ|jdƒtƒ}|jttjƒtt|jƒdƒttj ƒ|j ttj ƒ|j iƒt |dƒrd|j|ttjƒ<t |dƒr~|j|ttjƒ<|j|dƒdS)Nstrailer rrårì)rpr8rVr;rÑZSIZEr=rvrTrÒrbÚINFOr`röråZIDrìZENCRYPTr )rerórÐririrjrûÎs    zPdfWriter._write_trailer)ÚinfosrRcCsDi}x(t|jƒƒD]\}}t|ƒ|t|ƒ<qW|j|jƒj|ƒdS)z¯ Add custom metadata to the output. :param dict infos: a Python dictionary where each key is a field and each value is your new metadata. N)r�ÚitemsrCr;r€r`rV)rerÚargsrñÚvalueririrjÚ add_metadataÞszPdfWriter.add_metadatacCstddƒ|j|ƒdS)zW .. deprecated:: 1.28.0 Use :meth:`add_metadata` instead. Ú addMetadatarN)rr)rerririrjrês zPdfWriter.addMetadata)rhrRcCs‚tjƒ}g}d}g}d}|j||||fƒ�xPt|ƒ�r||jƒ\}}}}t|ttfƒr’x~|jƒD],\}} |j| |||dk r„||gngfƒq`WnDt|t ƒrÖ|j |ƒ}t |ƒ|krÖ|jt |ƒƒ|j|j ƒddgfƒt|ttfƒr.t|t ƒ�r|j |j|ƒƒ}g} |||k�r2|jƒgdd„|Dƒ} |||<xF| D]>} |jj| dƒ} | dk �r8| j ƒ} | dk �r8| |j| jƒ<�q8Wq.WdS)NcSsg|] }|jƒ‘qSri)Ú hash_value)Ú.0Z grant_parentririrjú 3sz8PdfWriter._sweep_indirect_references..)Ú collectionsÚdequerurvÚpopr…r2r8rr:Ú_resolve_indirect_objectr„r€r@r[rrU)rerhÚstackZ discoveredÚparentZ grant_parentsZ key_or_idr·rñrZ update_hashesZold_hashrwZindirect_reference_objririrjrøósD        z$PdfWriter._sweep_indirect_references)r·rRcCs¶t|jdƒr*|jjjr*td|jjj›�ƒ‚|jj|ƒ}|dkr`td|jj ›d|›d�t ƒt ƒ}|j ƒ}||j kr||j |S|j|krœt |jd|ƒ|j |<n|j|ƒ|j |<|j |S)zÄ Resolves indirect object to this pdf indirect objects. If it is a new object then it is added to self._objects and new idnum is given and generation is always 0. rózI/O operation on closed file: NzUnable to resolve [z: z], returning NullObject insteadr)rör~róÚclosedryr÷r€r Ú __class__rÈr<rrUr:rr[)rer·Zreal_objrririrjrCs    z"PdfWriter._resolve_indirect_objectcCs0|jj|ƒd}t|d|ƒ}|jƒ|ks,t‚|S)Nrr)rTr“r:r€r})rertrÚrefririrjÚ get_referencefs zPdfWriter.get_referencecCstddƒ|j|ƒS)zX .. deprecated:: 1.28.0 Use :meth:`get_reference` instead. Ú getReferencer!)rr!)rertririrjr"ls zPdfWriter.getReferencecCsztj|jkrLtt|jtjƒ}|jj|ƒd}t|d|ƒ}|jƒ|ksvt ‚n*tƒ}|j iƒ|j |ƒ}||jt tjƒ<|S)Nrr) raZOUTLINESrcrrBrTr“r:r€r}rVr[r;)reÚoutlinerZ outline_refririrjÚget_outline_rootus    zPdfWriter.get_outline_rootcCs:tj|jkr tt|jtjƒ}ntƒ}||jttjƒ<|S)u¥ the list of threads see §8.3.2 from PDF 1.7 spec :return: an Array (possibly empty) of Dictionaries with "/F" and "/I" properties )raZTHREADSrcrr2r;)reÚthreadsririrjÚget_threads_root„s  zPdfWriter.get_threads_rootcCs|jƒS)u´ Read-only property for the list of threads see §8.3.2 from PDF 1.7 spec :return: an Array (possibly empty) of Dictionaries with "/F" and "/I" properties )r&)reririrjr%’szPdfWriter.threadscCstddƒ|jƒS)z[ .. deprecated:: 1.28.0 Use :meth:`get_outline_root` instead. ÚgetOutlineRootr$)rr$)reririrjr'›s zPdfWriter.getOutlineRootcCsptj|jkot|jtjtƒ�rtt|jtjƒ}|jj|ƒd}t|d|ƒ}|j ƒ|ks^t ‚tj |kræt|tj tƒrætt|tj ƒ}|jj|ƒd}t|d|ƒ}|j ƒ|ks´t ‚tj|krÐtt |tjƒ}nt ƒ}||t tjƒ<n2tƒ}|j|ƒ}||t tj ƒ<t ƒ}||t tjƒ<nRtƒ}|j|ƒ}||jt tjƒ<tƒ}|j|ƒ}||t tj ƒ<t ƒ}||t tjƒ<|S)Nrr)r¯r°rcr…r8rrTr“r:r€r}ZDESTSr2r;r[)rer³rZ names_refZdestsZ dests_refÚndririrjÚget_named_dest_root¤s:      zPdfWriter.get_named_dest_rootcCstddƒ|jƒS)z^ .. deprecated:: 1.28.0 Use :meth:`get_named_dest_root` instead. ÚgetNamedDestRootr))rr))reririrjr*Ës zPdfWriter.getNamedDestRoot)Úpage_destinationrr«rRcCsŒ|dk r|dk rtdƒ‚|dk rDd}d}tj|›d|›d�d�|}|dkrTtdƒ‚|dkrd|jƒ}tt|jƒƒ}|j|ƒ}|j||ƒ|S)Nz[The argument dest of add_outline_item_destination is deprecated. Use page_destination only.r«r+z# is deprecated as an argument. Use z instead)rÝz page_destination may not be None) ryrzr{r$rrBr€r[Z add_child)rer+rr«rîrïÚpage_destination_refririrjÚadd_outline_item_destinationÔs"  z&PdfWriter.add_outline_item_destination)r«rrRcCstddƒ|j||ƒS)zf .. deprecated:: 2.9.0 Use :meth:`add_outline_item_destination` instead. Úadd_bookmark_destinationr-)rr-)rer«rririrjr.ôs z"PdfWriter.add_bookmark_destinationcCstddƒ|j||ƒS)zg .. deprecated:: 1.28.0 Use :meth:`add_outline_item_destination` instead. ÚaddBookmarkDestinationr-)rr-)rer«rririrjr/sz PdfWriter.addBookmarkDestinationÚ outline_item)Úbookmark)r0rrRc Cs¢tƒ}x(t|jƒƒD]\}}||tt|ƒƒ<qW|j|ƒd|kr–tƒ}tt|dƒ}x(t|jƒƒD]\}}||tt|ƒƒ<qdW|j|ƒ}||tdƒ<|j ||ƒS)Nz/A) rBr�rr;r„rVr8rr[r-) rer0rZoutline_item_objectÚkÚvrƒZa_dictÚ action_refririrjÚadd_outline_item_dicts   zPdfWriter.add_outline_item_dictcCstddƒ|j||ƒS)z_ .. deprecated:: 2.9.0 Use :meth:`add_outline_item_dict` instead. Úadd_bookmark_dictr5)rr5)rer0rririrjr6#s zPdfWriter.add_bookmark_dictcCstddƒ|j||ƒS)z` .. deprecated:: 1.28.0 Use :meth:`add_outline_item_dict` instead. ÚaddBookmarkDictr5)rr5)rer0rririrjr7/s zPdfWriter.addBookmarkDictFú/Fit)Úpagenum) ÚtitleršrÚcolorÚboldÚitalicÚfitrr9rRcGsà|dk r|dk rtdƒ‚|dk rDd} d} tj| ›d| ›d�d�|}|dkrTtdƒ‚t|ƒ} d d „| Dƒ} ttd |d ƒ| t|ƒf| žŽ}|jtttj ƒ|j ttj ƒtd ƒiƒƒ}t |||||ƒ}|dkrÔ|j ƒ}|j||ƒS)aà Add an outline item (commonly referred to as a "Bookmark") to this PDF file. :param str title: Title to use for this outline item. :param int page_number: Page number this outline item will point to. :param parent: A reference to a parent outline item to create nested outline items. :param tuple color: Color of the outline item's font as a red, green, blue tuple from 0.0 to 1.0 or as a Hex String (#RRGGBB) :param bool bold: Outline item font is bold :param bool italic: Outline item font is italic :param str fit: The fit of the destination page. See :meth:`add_link()` for details. NzMThe argument pagenum of add_outline_item is deprecated. Use page_number only.r9ršz# is deprecated as an argument. Use z instead)rÝzpage_number may not be NonecSs"g|]}|dkrtƒnt|ƒ‘qS)N)r<r=)rÚaririrjrfsz.PdfWriter.add_outline_item..ú/z outline itemz/GoTo)ryrzr{r=r7r;r[r8r)ÚDr­ÚSÚ_create_outline_itemr$r-)rer:ršrr;r<r=r>r9rrîrïÚpage_refZ zoom_argsr«r4r0ririrjÚadd_outline_item;s4 zPdfWriter.add_outline_item) r:r9rr;r<r=r>rrRc Gs&tddƒ|j|||||||f|žŽS)zZ .. deprecated:: 2.9.0 Use :meth:`add_outline_item` instead. Ú add_bookmarkrE)rrE) rer:r9rr;r<r=r>rririrjrF}s zPdfWriter.add_bookmarkc Gs&tddƒ|j|||||||f|žŽS)z[ .. deprecated:: 1.28.0 Use :meth:`add_outline_item` instead. Ú addBookmarkrE)rrE) rer:r9rr;r<r=r>rririrjrG’s zPdfWriter.addBookmarkcCs tdƒ‚dS)NzIThis method is not yet implemented. Use :meth:`add_outline_item` instead.)ÚNotImplementedError)reririrjÚ add_outline§szPdfWriter.add_outline)r+r«rRcCs||dk r|dk rtdƒ‚|dk rDd}d}tj|›d|›d�d�|}|dkrTtdƒ‚|j|ƒ}|jƒ}|j|d|gƒ|S) Nz[The argument dest of add_named_destination_object is deprecated. Use page_destination only.r«r+z# is deprecated as an argument. Use z instead)rÝz page_destination may not be Nonez/Title)ryrzr{r[r)Úextend)rer+r«rîrïr,r(ririrjÚadd_named_destination_object¬s z&PdfWriter.add_named_destination_objectcCstddƒ|j|ƒS)zg .. deprecated:: 1.28.0 Use :meth:`add_named_destination_object` instead. ÚaddNamedDestinationObjectrK)rrK)rer«ririrjrLÇsz#PdfWriter.addNamedDestinationObject)r:ršr9rRc CsÊ|dk r|dk rtdƒ‚|dk rDd}d}tj|›d|›d�d�|}|dkrTtdƒ‚|j|jƒtj|}tƒ}|jt t j ƒt |t t jƒtdƒgƒt t jƒt d ƒiƒ|j|ƒ}|jƒ} | j||gƒ|S) NzMThe argument pagenum of add_outline_item is deprecated. Use page_number only.r9ršz# is deprecated as an argument. Use z instead)rÝzpage_number may not be Nonei:z/GoTo)ryrzr{r€r\rWrZr8rVr;r)rAr2r/ZFIT_Hr=rBr[r)rJ) rer:ršr9rîrïrDr«Zdest_refr(ririrjÚadd_named_destinationÔs*  zPdfWriter.add_named_destination)r:r9rRcCstddƒ|j||ƒS)z` .. deprecated:: 1.28.0 Use :meth:`add_named_destination` instead. ÚaddNamedDestinationrM)rrM)rer:r9ririrjrNùs zPdfWriter.addNamedDestinationcCsVtt|j|jƒƒ}tt|tjƒ}x.|D]&}tt|j|ƒƒ}tj|kr(|tj=q(WdS)z.Remove links and annotations from this output.N) rr8r€r\r2rWrZrÆrÇ)reÚpg_dictrfr‚rDririrjÚ remove_linkss   zPdfWriter.remove_linkscCstddƒ|jƒS)zW .. deprecated:: 1.28.0 Use :meth:`remove_links` instead. Ú removeLinksrP)rrP)reririrjrQ s zPdfWriter.removeLinks)Úignore_byte_string_objectrRcCs˜tt|j|jƒƒ}tt|tjƒ}d'}�xj|D�]`}tt|j|ƒƒ}|djƒ}t|tƒsdt||ƒ}g}d} �x |j D�]þ\} } | d(kr¬| d} |rªt| t ƒ rªt ƒ| d<n‚| dk�rÞ| d } |�r.t| t ƒ �r.t ƒ| d <nP| d!k�r.xDt t | dƒƒD]0} |�rút| d| t ƒ �rút ƒ| d| <�qúW| d"k�r          zPdfWriter.remove_textcCstddƒ|j|ƒS)zV .. deprecated:: 1.28.0 Use :meth:`remove_text` instead. Ú removeTextr{)rr{)rerxririrjr|šs zPdfWriter.removeText)ršÚuriÚrectÚborderr9rRc Cs’|dk rtjdƒ|}|j|jƒtj|}tttt f|j|ƒƒ}|dk r�dd„|dd…Dƒ}t |ƒdkržt dd„|dDƒƒ} |j | ƒnt dƒgd}t|tƒr²t|ƒ}nt|tƒr¾nt|ƒ}tƒ} | jtd ƒtd ƒtd ƒt|ƒiƒtƒ} | jttjƒttjƒttjƒtd ƒttjƒ|ttjƒ|td ƒtd ƒttjƒt |ƒtdƒ| iƒ|j| ƒ} tj|k�rz|tjj | ƒnt | gƒ|ttjƒ<dS)aç Add an URI from a rectangular area to the specified page. This uses the basic structure of :meth:`add_link` :param int page_number: index of the page on which to place the URI action. :param str uri: URI of resource to link to. :param Tuple[int, int, int, int] rect: :class:`RectangleObject` or array of four integers specifying the clickable rectangular area ``[xLL, yLL, xUR, yUR]``, or string in the form ``"[ xLL yLL xUR yUR ]"``. :param ArrayObject border: if provided, an array describing border-drawing properties. See the PDF spec for details. No border will be drawn if this argument is omitted. NzKThe 'pagenum' argument of add_uri is deprecated. Use 'page_number' instead.cSsg|] }t|ƒ‘qSri)r;)rÚnririrjrÄsz%PdfWriter.add_uri..rNécSsg|] }t|ƒ‘qSri)r;)rr€ririrjrÆsrLz/Sz/URIz/Linkz/Hz/Iz/A)rzr{r€r\rWrZrr r„r rvr2rur=r…r;r?r8rVrAr!rrÆrÇZSubtyperëZRectZBorderr[) reršr}r~rr9Z page_linkrDZ border_arrZ dash_patternZlnk2ZlnkZlnk_refririrjÚadd_uri¥sF            zPdfWriter.add_uri)r9r}r~rrRcCstddƒ|j||||ƒS)zR .. deprecated:: 1.28.0 Use :meth:`add_uri` instead. ÚaddURIr‚)rr‚)rer9r}r~rririrjrƒîs zPdfWriter.addURI)r9r+r~rr>rrRcGsttddƒt|tƒr>|jƒdd …}tdd„|jdƒDƒƒ}nt|tƒrJnt|ƒ}tj|||||d�}|j||d�S) NÚadd_linkz+add_annotation(AnnotationBuilder.link(...))rcSs g|]}t|ƒdkrt|ƒ‘qS)r)rvÚfloat)rÚnumririrjr sz&PdfWriter.add_link..r )r~rÚtarget_page_indexr>Úfit_args)ršÚ annotationéÿÿÿÿ) rr…r„Ústripr?Úsplitr1ÚlinkÚadd_annotation)rer9r+r~rr>rr‰ririrjr„ýs   zPdfWriter.add_linkcGs$tdddƒ|j|||||f|žŽS)zS .. deprecated:: 1.28.0 Use :meth:`add_link` instead. ÚaddLinkz+add_annotation(AnnotationBuilder.link(...))z4.0.0)rr„)rer9r+r~rr>rririrjr�s zPdfWriter.addLinkú /NoLayoutú /SinglePageú /OneColumnú/TwoColumnLeftú/TwoColumnRightú /TwoPageLeftú /TwoPageRightc Cs*ytt|jdƒStk r$dSXdS)Nz /PageLayout)rrGrcr¬)reririrjÚ_get_page_layout:szPdfWriter._get_page_layoutcCstddƒ|jƒS)zY .. deprecated:: 1.28.0 Use :py:attr:`page_layout` instead. Ú getPageLayoutÚ page_layout)rr—)reririrjr˜@s zPdfWriter.getPageLayout)ÚlayoutrRcCsPt|tƒs8||jkr0tdddj|jƒf›�tƒt|ƒ}|jjtdƒ|iƒdS)a Set the page layout. :param str layout: The page layout to be used. .. list-table:: Valid ``layout`` arguments :widths: 50 200 * - /NoLayout - Layout explicitly not specified * - /SinglePage - Show one page at a time * - /OneColumn - Show one column at a time * - /TwoColumnLeft - Show pages in two columns, odd-numbered pages on the left * - /TwoColumnRight - Show pages in two columns, odd-numbered pages on the right * - /TwoPageLeft - Show two pages at a time, odd-numbered pages on the left * - /TwoPageRight - Show two pages at a time, odd-numbered pages on the right zLayout should be one of: rPz /PageLayoutN)r…r;Ú_valid_layoutsr ÚjoinrÈrcrV)reršririrjÚ_set_page_layoutIs  zPdfWriter._set_page_layoutcCstddƒ|j|ƒS)zY .. deprecated:: 1.28.0 Use :py:attr:`page_layout` instead. zwriter.setPageLayout(val)zwriter.page_layout = val)rr�)reršririrjÚ setPageLayoutjszPdfWriter.setPageLayoutcCs|jƒS)aÛ Page layout property. .. list-table:: Valid ``layout`` values :widths: 50 200 * - /NoLayout - Layout explicitly not specified * - /SinglePage - Show one page at a time * - /OneColumn - Show one column at a time * - /TwoColumnLeft - Show pages in two columns, odd-numbered pages on the left * - /TwoColumnRight - Show pages in two columns, odd-numbered pages on the right * - /TwoPageLeft - Show two pages at a time, odd-numbered pages on the left * - /TwoPageRight - Show two pages at a time, odd-numbered pages on the right )r—)reririrjr™uszPdfWriter.page_layoutcCs|j|ƒdS)N)r�)reršririrjr™ŽscCstddƒ|jS)zY .. deprecated:: 1.28.0 Use :py:attr:`page_layout` instead. Ú pageLayoutr™)rr™)reririrjrŸ’s zPdfWriter.pageLayoutcCstddƒ||_dS)zY .. deprecated:: 1.28.0 Use :py:attr:`page_layout` instead. rŸr™N)rr™)reršririrjrŸœs ú/UseNoneú /UseOutlinesú /UseThumbsú /FullScreenú/UseOCú/UseAttachmentsc Cs*ytt|jdƒStk r$dSXdS)Nz /PageMode)rrIrcr¬)reririrjÚ_get_page_mode¯szPdfWriter._get_page_modecCstddƒ|jƒS)zW .. deprecated:: 1.28.0 Use :py:attr:`page_mode` instead. Ú getPageModeÚ page_mode)rr¦)reririrjr§µs zPdfWriter.getPageMode)rôrRcCsRt|tƒr|}n*||jkr2tddj|jƒ›�tƒt|ƒ}|jjtdƒ|iƒdS)zW .. deprecated:: 1.28.0 Use :py:attr:`page_mode` instead. zMode should be one of: z, z /PageModeN)r…r;Ú _valid_modesr rœrÈrcrV)rerôZ mode_nameririrjÚ set_page_mode¾s  zPdfWriter.set_page_modecCstddƒ|j|ƒdS)zW .. deprecated:: 1.28.0 Use :py:attr:`page_mode` instead. zwriter.setPageMode(val)zwriter.page_mode = valN)rrª)rerôririrjÚ setPageModeÎs zPdfWriter.setPageModecCs|jƒS)a Page mode property. .. list-table:: Valid ``mode`` values :widths: 50 200 * - /UseNone - Do not show outline or thumbnails panels * - /UseOutlines - Show outline (aka bookmarks) panel * - /UseThumbs - Show page thumbnails panel * - /FullScreen - Fullscreen view * - /UseOC - Show Optional Content Group (OCG) panel * - /UseAttachments - Show attachments panel )r¦)reririrjr¨×szPdfWriter.page_modecCs|j|ƒdS)N)rª)rerôririrjr¨îscCstddƒ|jS)zW .. deprecated:: 1.28.0 Use :py:attr:`page_mode` instead. ÚpageModer¨)rr¨)reririrjr¬òs zPdfWriter.pageModecCstddƒ||_dS)zW .. deprecated:: 1.28.0 Use :py:attr:`page_mode` instead. r¬r¨N)rr¨)rerôririrjr¬üs )ršr‰rRcCsÐttt|ƒƒ}|j|jƒd||tdƒ<|j|}|jdkrLtƒ|tdƒ<|jdk sZt ‚|j dƒdkr¶tdƒ|kr¶tt |tdƒƒ}t tdƒ|d|d f|d žŽ}|j |tdƒ<|j|ƒ}|jj|ƒdS) Nz/Kidsz/Pz/Annotsz/Subtypez/Linkz/Destz /LinkNamer‡r>rˆ)rr8Ú_pdf_objectifyr€r\r;rfÚ annotationsr2r}rÉÚdictr7r­r[ru)reršr‰Úto_addr‚Útmpr«Zind_objririrjrŽs     zPdfWriter.add_annotation)rP)NN)r)r)NN)NN)NN)NNr)NNr)N)N)N)N)NNN)N)N)N)N)N)NNNFFr8)NNFFr8)NNFFr8)NN)NN)F)F)F)F)NN)N)Nr8)Nr8)r�r‘r’r“r”r•r–)r r¡r¢r£r¤r¥)”rÈÚ __module__Ú __qualname__Ú__doc__rrkrlrrÚ BaseExceptionrrqÚpropertyr§rrÚsetterr>r:r[r€r�rr r r‰r�r‘r’r‡r˜r™rœr�ržrŸr rfr…r£r¤ÚdecimalÚDecimalr¥r¦rr7rAr4rªr„r´rµrºr½rrÂrÃÚOPTIONAL_READ_WRITE_FIELDr r'rÎrÏrÓrÔrÕrÖÚALL_DOCUMENT_PERMISSIONSÚboolr0ròrrþrrrrrrrprùrúrûrrr2r3r8r9r;r=r<rørr!r"rBr$r&r%r'r)r*r-r.r/rrHr5r6r7rFrKrErFrGrIrKrLrMrNrPrQrwryr{r|r?r‚rƒr„r�r›rGr—r˜r�ržr™rŸr©rIr¦r§rªr«r¨r¬rŽriririrjrO|s¦(           " S   @   T "   B#  ' (       @;** !   N -G  !       rO)rtrRcCsÔt|tƒr|St|tƒrPtƒ}x,|jƒD] \}}t|ƒ}t|ƒ}|||<q(W|St|tƒr€tƒ}x|D]}|j t|ƒƒqfW|St|t ƒr¦|j dƒrœt|ƒSt |ƒSn*t|t tfƒr¼t|ƒStdt|ƒ›d�ƒ‚dS)Nr@z type(obj)=z! could not be casted to PdfObject)r…r>r¯r8rr;r­r�r2rur„Ú startswithrAr‡r…r9rHÚtype)rtr°rñrZname_keyZ casted_valueZarrÚelririrjr­s,        r­)r4r:r;r=r<rRcs¦tƒ}|jtdƒ|tdƒt|ƒiƒ|rht|tƒr:t|ƒ}tjdƒ‰|jtdƒt ‡fdd„|Dƒƒiƒ|sp|r¢d}|r€|d7}|rŒ|d 7}|jtd ƒt |ƒiƒ|S) Nz/Az/Titlez1.00000z/Ccs g|]}ttj|ƒjˆƒƒ‘qSri)r9r¸r¹Úquantize)rÚc)ÚprecrirjrPsz(_create_outline_item..rrrLz/F) rBrVr;rCr…r„rDr¸r¹r2r=)r4r:r;r=r<r0Z format_flagri)rÂrjrC;s&  rCcs&eZdZeeddœ‡fdd„ Z‡ZS)Ú PdfFileWriterN)rÚkwargsrRcstddƒtƒj||ŽdS)NrÃrO)rÚsuperrk)rerrÄ)rrirjrk_s zPdfFileWriter.__init__)rÈr²r³r rkÚ __classcell__riri)rrjrÃ^srÃliÿÿÿiüÿÿ)qr]rr¸Úloggingrärrâr±rzÚhashlibrÚiorrrrZpathlibrÚtypesrÚtypingr r r r r rrrrrZ_pagerrZ_readerrZ _securityrrrÚ_utilsrrrrrrr Ú constantsr!r"r¯r#r$rar%rçr&r'r(r)r*r+rÆr,rWr-rær.rÑr/r0Zgenericr1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKÚ getLoggerrÈr‹rºr»rOr„r‡r­r…r¼rCrÃriririrjÚsr   0  $         X$ 2(