「App」カテゴリーアーカイブ

枚数抜きで pdf ファイルを作ってしまった

ときには片面のカードが 10 枚も遭ったりすると、qsl 枚数は熟しているのにファイル数は 1 しか増えない。
baobab はフォルダ数もカウントするから、500 アイテムあってもそこからサブフォルダ数を引いたのがファイルっ数になる。でもカードは 700 を超えているハズと思う。
そこで pdf のページ数を調べなくってはならない。単体なら pdfinfo でわかる。

LibreOffice でもマクロでできるらしいが、フォルダのファイル群から取得するというのは見当たらなかった。
そこで ChatGPT に相談した。こちらは特定フォルダから、ファイラーを開かずにサブフォルダ名を入力して、ページ数を得たかった。

import os
import PyPDF2

def count_pages(pdf_path):
    with open(pdf_path, 'rb') as pdf_file:
        pdf_reader = PyPDF2.PdfFileReader(pdf_file)
        return pdf_reader.numPages

def process_subfolders(root_folder):
    for subdir, _, files in os.walk(root_folder):
        for filename in files:
            if filename.endswith('.pdf'):
                pdf_path = os.path.join(subdir, filename)
                page_count = count_pages(pdf_path)
                print(f'ファイルパス: {pdf_path}, ページ数: {page_count}')

if __name__ == "__main__":
    relative_folder = input("基準フォルダの相対パスを入力してください: ")
    base_folder = os.path.join("/home/NAME/Documents/XYZ", relative_folder)
    
    if os.path.exists(base_folder):
        process_subfolders(base_folder)
    else:
        print("指定されたフォルダは存在しません。")

で ChatGPT は python count_pages.py と走らせればよいと言った。
が、python3 がインストールしてあるので、python3 count_pages.py とした。
しかし、出力はタイムスタンプのようで、参照するには使いにくい。

$ python3 count_pages.py | sed -e "s/基準フォルダの相対パス を入力してください: //" | sort -k 2 -t ' '

とすれば、ファイル名ソートされて出てくる。

どうせならソートまで python で完結させたいともう一度 ChatGPT に相談。

import os
import PyPDF2

def count_pages(pdf_path):
    with open(pdf_path, 'rb') as pdf_file:
        pdf_reader = PyPDF2.PdfFileReader(pdf_file)
        return pdf_reader.numPages

def process_subfolder(base_folder, subfolder_name):
    subfolder_path = os.path.join(base_folder, subfolder_name)
    pdf_files = []  # ファイル情報を保存するリスト
    for filename in os.listdir(subfolder_path):
        if filename.endswith('.pdf'):
            pdf_path = os.path.join(subfolder_path, filename)
            page_count = count_pages(pdf_path)
            pdf_files.append((pdf_path, page_count))  # ファイル情報をリストに追加

    # ファイル名でソート
    pdf_files.sort(key=lambda x: x[0])

    for pdf_info in pdf_files:
        pdf_path, page_count = pdf_info
        print(f'ファイルパス: {pdf_path}, ページ数: {page_count}')

if __name__ == "__main__":
    base_folder = "/home/NAME/Documents/XYZ"  # 基準フォルダのパス
    subfolder_name = input("サブフォルダ名を入力してください: ")
    process_subfolder(base_folder, subfolder_name)

と結果を得た。

これで枚数を引数としたファイル名にリネームすれば、カード枚数もカウントできるだろう。

QSL カードをスキャン

今までも DX の分はスキャンしていた。
重い腰を上げ、国内分も考えた。

DX QSL にはレポート面タテ型は殆どないが、国内 QSL では圧倒的。
なのでタテ型・ヨコ型、そして片面・両面とミックスに仕分け。更にDX サイズも。

スキャンするにタテ型・片面から始めるが、困るのがタテ型・両面で天地が逆になってるのがそこそこある。恐らく長編の中央から回せばということなんだろうが、オノウエ・ナカニシ・新栄高速のタテ型・両面は覿面だ。まれにオノウエに正常なのがある。
ミックスもお構いなしにスキャンするが、回転加工まではしない。まとまった量を一気にやろうということを優先するから。

半月も LOTW に振り回され

6/23 LOTW にアップロードできなくなり、ひょっとして期限切れたかと思った。
リクエストすればいいだけのことだが、週末も絡んでたが 6/29 でまだ Please watch for an email from LoTW with the corresponding TQ6 file.と KA1RWY kathy から来るだけ。

p12 ファイルがあれば問題ない話なんだが、 Ununtu 22.04.0 も p12 保存がエラーでできなかった。
7/02 前夜正常に終了したのに起動できず。結果的には EFI がトンでしまっていた。
だったら、fedora 38 なら P12 保存ができるかもしれないと、「別 M2 (元々 Fedora 35)に Fedora 入れて、Ubuntu は p12 でコピーしよう」と考えた。

7/05 遅い時間になってやっと tq6 が届いた。そして p12も保存できた。

7/07 更に別の M2 に Ubuntu インストールするも、全く変化せず。一旦アンインストールしての再インストールも全く変わらず。

p12 ファイルで右クリック「trustedqsl で開く」の結果

最近力強い味方を得た。そう、チャット GPT だ。
Fedora で正常なら Fedora に踏みとどまるのも選択肢、そんなことは既に検討もしていたが。
しかし、パッケージでなくソース・コンパイルという手は残っていたが、普段限られたことしかやってなかったので、自信がなかった。

最初、バックアップからコピーしたソースでやってたので、OS 上のユーザー名が異なっていることに気づかず、CmakeCache.txt のいう意味がわからんかった。
新たにダウンロードした最新版ソースは次から次に不足ファイルが出てきた。AI だから一個ずつ出すのは仕方ないか。
でも五個ほどのファイルをインストールすればエラーなく sudo make install まで進んだ。
しかしインストール終わるも

$ trustedqsl
trustedqsl: コマンドが見つかりません
$ tqsl
tqsl: error while loading shared libraries: libtqsllib.so: cannot open shared object file: No such file or directory

すると sudo ldconfig 打てという。
ldconfig って「共有ライブラリを認識させるときに使う」ということらしい。
やっと起動でき p12 も正しくインポートできた。

ついでにイチからコンパイルするときの必要ファイルなどを挙げておく。

sudo apt install -y cmake liblmdb-dev libdb-dev libcurl4-openssl-dev libwxgtk3.0-gtk3-dev
cmake /path/to/trustedqsl-source-directory
make
sudo make install
sudo ldconfig
tqsl