以下の内容はhttps://end0tknr.hateblo.jp/entry/20231205/1701778970より取得しました。


pypdf for python で pdf のページへ javascriptイベント追加

adobe acrobat pro ver.2023+javascriptでpdfへの閲覧期限設定 - end0tknr's kipple - web写経開発

先程の上記entryの続き?として、 pypdf for python で pdf のページへ javascriptイベントを追加します。

pypdfのドキュメントには、add_js()の説明がありますが、 add_js()は、pdfのファイルを開いた際のイベント追加するものですので、 今回は、独自に追加します。

https://pypdf.readthedocs.io/en/latest/modules/PdfWriter.html?highlight=add_js#pypdf.PdfWriter.add_js

Step1 - pdfファイルの内部構造を確認

例えば、adobe acrobat pro では以下の手順で、pdfファイルの内部構造を確認できます。

Step2 - pypdf for python での実装

import sys
from pypdf import PdfReader, PdfWriter
from pypdf.generic import NameObject, create_string_object, DictionaryObject

new_pdf_path = "new.pdf"

js_code = """
var nowDate    = new Date();
var createDate = this.info.CreationDate;
var diffDays   = Math.floor((nowDate-createDate) / (1000*60*60*24));

if( diffDays > 60 ) {
    this.pageNum = 0;
    app.alert( "This pdf is expired." );
    this.closeDoc();
}
"""

def main():
    org_pdf_path = sys.argv[1]
    pdf_reader = PdfReader( open(org_pdf_path, "rb") )
    pdf_writer = PdfWriter()
    pdf_writer.add_metadata( pdf_reader.metadata )

    for page in pdf_reader.pages :
        js_obj = DictionaryObject()
        js_obj.update({ NameObject("/JS"): create_string_object(js_code),
                        NameObject("/S"): NameObject("/JavaScript") })
        o_obj = DictionaryObject()
        o_obj.update({ NameObject("/O"): js_obj})
        page[NameObject('/AA')] = o_obj

        pdf_writer.add_page(page)

    with open(new_pdf_path, "wb") as output_pdf:
        pdf_writer.write(output_pdf)

if __name__ == '__main__':
    main()



以上の内容はhttps://end0tknr.hateblo.jp/entry/20231205/1701778970より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14