sample_webpdf.hsp

sample\iron\sample_webpdf.hsp » Plain Format

;============================================================
;  sample_webpdf.hsp
;
;  iron_webpdf デモ: 動的生成した HTML を Edge headless 経由で
;  PDF に書き出す。
;
;  事前準備:
;    Windows 10/11 標準の Microsoft Edge が入っていれば OK。
;============================================================

#include "hsp3_net_64.as"
#include "iron_webpdf.hsp"

    title "iron_webpdf demo"
    screen 0, 720, 520
    cls 4
    font "MS Gothic", 14

    sdim s_html, 8192
    sdim s_log,  4096

    ;----- サンプル HTML を組み立て -----
    s_html = {"<!DOCTYPE html>
<html><head><meta charset='utf-8'><title>Invoice</title>
<style>
  body { font-family: 'Yu Gothic', sans-serif; margin: 24pt; color:#222; }
  h1 { border-bottom: 2px solid #4a90e2; padding-bottom: 6pt; }
  table { width:100%; border-collapse: collapse; margin-top: 16pt; }
  th, td { border:1px solid #888; padding:6pt; text-align:left; }
  th { background:#eef4fb; }
  .total { text-align:right; font-size:1.2em; margin-top:12pt; }
</style>
</head><body>
<h1>請求書 #2026-0001</h1>
<p>発行日: 2026-04-15</p>
<p>お客様: 株式会社サンプル御中</p>
<table>
  <tr><th>品目</th><th>数量</th><th>単価</th><th>金額</th></tr>
  <tr><td>IronHSP ライセンス</td><td>1</td><td>0</td><td>0</td></tr>
  <tr><td>サポート (年間)</td><td>1</td><td>0</td><td>0</td></tr>
</table>
<p class='total'>合計: \u00a50</p>
</body></html>
"}

    objsize 180, 32
    pos 16, 16
    button gosub "HTML を保存",     *on_save_html
    pos 204, 16
    button gosub "PDF 書き出し",    *on_to_pdf
    pos 392, 16
    button gosub "Edge パス確認",   *on_find

    pos 16, 64
    mesbox s_log, 688, 432
    goto *main_loop

*on_save_html
    notesel s_html
    notesave "webpdf_in.html"
    noteunsel
    s_log = "入力 HTML を保存: webpdf_in.html\n" + s_log
    objprm 3, s_log
    return

*on_find
    webpdf_find_edge edge_path
    if edge_path = "" {
        s_log = "msedge.exe が見つかりません\n" + s_log
    } else {
        s_log = "Edge: " + edge_path + "\n" + s_log
    }
    objprm 3, s_log
    return

*on_to_pdf
    ; 入力が無ければ先に書き出す
    exist "webpdf_in.html"
    if strsize < 0 : gosub *on_save_html
    webpdf_render "webpdf_in.html", "webpdf_out.pdf", ""
    r = stat
    if r = 0 {
        s_log = "PDF 書き出し成功 -> webpdf_out.pdf\n" + s_log
    } else : if r = -1 {
        s_log = "Edge 未検出 (webpdf_find_edge 失敗)\n" + s_log
    } else : if r = -2 {
        s_log = "CreateProcess 失敗\n" + s_log
    } else {
        s_log = "Edge 終了コード: " + r + "\n" + s_log
    }
    objprm 3, s_log
    return

*main_loop
    wait 10
    goto *main_loop