sample_pdf.hsp

sample\iron\sample_pdf.hsp » Plain Format

;============================================================
;  sample_pdf.hsp — hsppdf.dll (PDFium) デモ
;
;  - PDF ファイルをロード
;  - ページ数と /Title /Author を表示
;  - 1 ページ目をカレント window に描画
;  - 1 ページ目のテキストを抽出して表示
;
;  事前準備:
;    1. bblanchon/pdfium-binaries prebuilt を plugins/win32/hsppdf/third_party/pdfium/
;       に配置 (README.md 参照)
;    2. hsppdf.dll と pdfium.dll をランタイムディレクトリに配置
;    3. 同じディレクトリに sample.pdf を置くか、dialog で指定
;============================================================

#include "hsp3_net_64.as"
#include "iron_pdf.hsp"

    title "hsppdf sample"
    screen 0, 900, 720
    font "MS Gothic", 14

    ; --- PDFium 初期化 ---
    pdf_begin

    ; --- ファイル選択 ---
    path = "sample.pdf"
    exist path
    if strsize < 0 {
        dialog "pdf", 16, "PDF ファイルを選択"
        if stat == 0 { dialog "キャンセルされました" : goto *done }
        path = refstr
    }

    ; --- ロード ---
    pdf_open path
    h = stat
    if h < 0 {
        dialog "PDF を開けません (code=" + h + ")"
        goto *done
    }

    ; --- メタデータ ---
    pdf_title  h : t_title  = refstr
    pdf_author h : t_author = refstr
    n = pdf_pages(h)

    ; --- 1 ページ目のサイズを points で取得 ---
    dim_w = 0.0 : dim_h = 0.0
    pdf_size h, 0, dim_w, dim_h

    ; --- テキスト抽出 (1 ページ目) ---
    pdf_text h, 0 : page_text = refstr

    ; --- 描画 ---
    redraw 0
    color 255, 255, 255 : boxf
    color 0, 0, 0

    ; 1 ページ目を 1.2 倍で window に描画
    pdf_draw h, 0, 1.2

    ; 上に情報オーバーレイ
    color 255, 255, 240 : boxf 0, 0, 900, 110
    color 0, 0, 0
    pos 8, 4
    mes "file   : " + path
    mes strf("pages  : %d   size(pt) : %.1f x %.1f", n, dim_w, dim_h)
    mes "title  : " + t_title
    mes "author : " + t_author
    mes "-- page 1 text (先頭 400 文字) --"
    mes strmid(page_text, 0, 400)
    redraw 1

*done
    ; ユーザが閉じるまで待つ
    stop

; ============================================================
; 応用 (コメントのみ): iron_ai と組み合わせた PDF 要約
; ============================================================
;   #include "iron_ai.hsp"
;   #include "iron_pdf.hsp"
;
;   pdf_begin
;   pdf_open "report.pdf" : h = stat
;   n = pdf_pages(h)
;
;   sdim body, 2*1024*1024   ; 2 MB バッファ
;   body = ""
;   repeat n
;       pdf_text h, cnt
;       body += refstr + "\n\n"
;   loop
;   pdf_shut h
;   pdf_end
;
;   ai_open "gpt-4o-mini"
;   prompt = "次の PDF を日本語で 300 字以内で要約してください:\n\n" + body
;   ai_chat prompt
;   mes refstr