{"id":15963,"date":"2026-11-03T00:31:16","date_gmt":"2026-11-02T15:31:16","guid":{"rendered":"https:\/\/code-plus.jp\/gp\/?page_id=15963"},"modified":"2026-11-03T01:18:05","modified_gmt":"2026-11-02T16:18:05","slug":"pdfpagenum-converter","status":"publish","type":"page","link":"https:\/\/code-plus.jp\/gp\/pdfpagenum-converter\/","title":{"rendered":"PDF\u306b\u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3059\u308b\u30c4\u30fc\u30eb"},"content":{"rendered":"<!-- \u0f3b\u273f\ud835\udc0f\ud835\udc00\ud835\udc06\ud835\udc04\u0f3a -->\r\n\r\n<!-- \u0f3b.mezzala\uff08\u4f59\u767d\u8abf\u6574\uff1apage\u4e0a\uff09\u0f3a -->\r\n<hr class=\"spacer-mediano\" \/>\r\n\r\n<hr id=\"ch-TextConverter\" anchor \/>\r\n<div class=\"pg-saracnvtvkaa bg-hackingGate\">\r\n\r\n  <header class=\"page-header mx-auto\">\r\n    <!-- \u2756\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8 --><div><!-- breadcrumb.php -->\n<style>\n\/* \u2756breadcrumb.leckermaul\uff08\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8\uff09\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u0f1a\u0f36\u22b0\u27e1\u22b1\u0f36\u0f1a\u0f3a*\/\n.zaratan .breadcrumb.leckermaul {\n\twidth: 100%;\n\tmax-width: calc(var(--zvw,1vw) * 92.5);\n\tmargin-inline: auto;\n}\n\n.zaratan .breadcrumb.leckermaul :is(ul, ol) {\n\tmin-height: 48px;\n\tline-height: initial;\n\tfont-size: 0;\n\tletter-spacing: 0;\n\toverflow: hidden;\n}\n\n.zaratan .breadcrumb.leckermaul li {\n\tdisplay: inline;\n\tline-height: 1.6;\n\tfont-size: clamp(0.775pc, calc(0.775pc + ((1vw - 3.6px) * 0.1563)), 0.8750pc);\n}\n\n.zaratan .breadcrumb.leckermaul li>*,\n.zaratan .breadcrumb.leckermaul li::before {\n\tposition: relative;\n\ttop: 0.125em;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n.zaratan .breadcrumb.leckermaul a {\n\tdisplay: inline;\n\tcolor: var(--c-secondary-600, hsl(224, 25%, 43%));\n\tmargin-right: .5em;\n}\n\n.zaratan .breadcrumb.leckermaul li:nth-of-type(n+2) a {\n\tmargin-left: .5em;\n}\n\n\/* \u73fe\u5728\u306e\u30da\u30fc\u30b8\uff08\u30ea\u30f3\u30af\u306a\u3057\u3002<span aria-current=\"page\">\uff09 *\/\n.zaratan .breadcrumb.leckermaul [aria-current=\"page\"] {\n\tdisplay: inline;\n\tmargin-inline: .5em;\n\tcolor: var(--c-base-550, hsl(224, 6%, 47%));\n}\n\n@media (any-hover:hover) {\n\t.zaratan .breadcrumb.leckermaul a:hover {\n\t\tcolor: var(--c-secondary-600, hsl(224, 25%, 43%));\n\t}\n}\n\n\/* .ma-home *\/\n.zaratan .breadcrumb.leckermaul .ma-home {\n\tvertical-align: top;\n}\n\n\/* .separator *\/\n.zaratan .breadcrumb.leckermaul li:nth-of-type(n+2)::before,\n.zaratan .breadcrumb.leckermaul.chevron-right li:nth-of-type(n+2)::before {\n\tcontent: \">\";\n\tcolor: var(--c-secondary-600, hsl(224, 25%, 43%))\n}\n\n.zaratan .breadcrumb.leckermaul.slash li:nth-of-type(n+2)::before {\n\tcontent: \"\/\";\n}\n\n.zaratan .breadcrumb.leckermaul.trigon-bullet li:nth-of-type(n+2)::before {\n\tcontent: \"\u2023\";\n}\n<\/style>\n\n\n<nav class=\"breadcrumb leckermaul py-0.5r mx-auto\" aria-label=\"\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8\">\n  <ul class=\"breadcrumb-wrapper\">\n    <!-- \u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af\u3092\u8868\u793a -->\n    <li><a href=\"https:\/\/code-plus.jp\/gp\/\"><i><\/i>\u30c8\u30c3\u30d7<\/a><\/li>\n\n          <!-- \u56fa\u5b9a\u30da\u30fc\u30b8\uff08\u305d\u308c\u4ee5\u5916\uff09\uff1a \u5148\u7956\u30da\u30fc\u30b8\u540d\u3068\u3001\u73fe\u5728\u306e\u30da\u30fc\u30b8\u540d\u3092\u8868\u793a -->\n      <li class=\"current_page_item\"><span aria-current=\"page\">PDF\u306b\u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3059\u308b\u30c4\u30fc\u30eb<\/span><\/li>    <!-- \/\/\/if (is_page()) -->\n\n  <\/ul>\n<\/nav><\/div>\r\n  <\/header><!-- \/\/\/.inheader -->\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <section class=\"sect-cnvtVkaA-Intro\">\r\n    <header class=\"section__inheader mx-auto\">\r\n      <div class=\"hgroup-wrapper mb-0.5r\">\r\n        <h1 class=\"hdg-page d-iblock w-auto fz-xxl mb-0.25pc\"><span>PDF\u306b\u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3059\u308b\u30c4\u30fc\u30eb<\/span><\/h1>\r\n\r\n        <p class=\"rowgroup fl-right bdrs-0.25r mt-0.25r\">\r\n          <a class=\"badge is-outlined is-gray fz-xs\" href=\"#ch-Explanation\"><i class=\"icon mas ma-help\"><\/i>&nbsp;<span>\u4f7f\u3044\u65b9<\/span><\/a>\r\n        <\/p>\r\n\r\n        <p class=\"page-foreword fz-ss\">PDF\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0&amp;\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3060\u3051\u3067\u3001\u30da\u30fc\u30b8\u306e\u4e0b\u4e2d\u592e\u306b\u300c-1-\u300d\u5f62\u5f0f\u306e\u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3002<br>\u6587\u5b57\u306e\u5927\u304d\u3055\u306f\u300c\u672c\u6587\u306e\u25cb%\u300d\u3067\u6307\u5b9a\u3059\u308b\u306e\u3067\u3001PDF\u306e\u30b5\u30a4\u30ba\u304c\u5909\u308f\u3063\u3066\u3082\u3001\u8a2d\u5b9a\u3057\u76f4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30d7\u30ec\u30d3\u30e5\u30fc\u3067\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002<\/p>\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n    <\/header><!-- \/\/\/.inheader -->\r\n  <\/section>\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <hr id=\"ch-Converter\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Converter contvis-auto\" style=\"contain-intrinsic-size:800px;\">\r\n    <div class=\"section__interior innerA fxd-row mx-auto\">\r\n      <figure class=\"section__leftlane\">\r\n        <div class=\"hgroup-wrapper\">\r\n          <h3 class=\"fz-rg hdg-section mb-0.25pc\"><span>\u25bcPDF\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30ed\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044<\/span><\/h3>\r\n        <\/div><!-- \/\/\/.hgroup -->\r\n\r\n        <div class=\"chest-wrapper relatived\">\r\n          <div id=\"endropArea\" class=\"endrop-area\" style=\"height:17.5pc;\">\r\n            <div class=\"endrop-inner\">\r\n              <i class=\"endrop-icon\"><\/i>\r\n              <p class=\"endrop-text\">PDF\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0&amp;\u30c9\u30ed\u30c3\u30d7<\/p>\r\n              <small class=\"endrop-smock\">\u307e\u305f\u306f \u30af\u30ea\u30c3\u30af\u3057\u3066\u9078\u629e\uff08\u8907\u6570\u53ef\uff09<\/small>\r\n            <\/div>\r\n            <input type=\"file\" id=\"fileInput\" class=\"file-input\" accept=\"application\/pdf,.pdf\" multiple>\r\n          <\/div>\r\n          <ins id=\"decodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <!-- \u30aa\u30d7\u30b7\u30e7\u30f3 -->\r\n        <div class=\"colgroup w-full mt-1r\">\r\n          <h4 class=\"title is-outlined fz-sm\">\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u308c\u308b\u7bc4\u56f2<\/h4>\r\n          <label class=\"label is-outlined fz-sm\">\r\n            <p class=\"fz-sm\">\u958b\u59cb\u30da\u30fc\u30b8\uff1a<\/p>\r\n            <input type=\"number\" id=\"startPage\" class=\"input w-5e\" value=\"1\" min=\"1\">\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\">\r\n            <p class=\"fz-sm\">\u7d42\u4e86\u30da\u30fc\u30b8\uff1a<\/p>\r\n            <input type=\"number\" id=\"endPage\" class=\"input w-5e\" value=\"\" min=\"1\" placeholder=\"\u6700\u5f8c\">\r\n            <small class=\"fz-xs\" style=\"color:#999;\"> \u7a7a\u6b04\u306a\u3089\u3001\u6700\u5f8c\u306e\u30da\u30fc\u30b8\u307e\u3067<\/small>\r\n          <\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n\r\n        <div class=\"colgroup w-full mt-1r\">\r\n          <h4 class=\"title is-outlined fz-sm\">\u30da\u30fc\u30b8\u756a\u53f7\u306e\u5927\u304d\u3055<\/h4>\r\n          <label class=\"label is-outlined fz-sm\">\r\n            <p class=\"fz-sm\">\u672c\u6587\u306e\uff1a<\/p>\r\n            <input type=\"range\" id=\"sizeRange\" min=\"50\" max=\"200\" step=\"5\" value=\"100\" style=\"width:9em;vertical-align:middle;\">\r\n            <input type=\"number\" id=\"sizePct\" class=\"input w-5e\" value=\"100\" min=\"10\" max=\"500\">&nbsp;%\r\n            <small class=\"fz-xs\" style=\"color:#999;\"> \u672c\u6587\u306e\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u3092\u81ea\u52d5\u3067\u5224\u5b9a\u3057\u3066\u3001\u305d\u306e\u25cb%\u306b\u3057\u307e\u3059<\/small>\r\n          <\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n\r\n        <div class=\"colgroup w-full mt-1r\">\r\n          <h4 class=\"title is-outlined fz-sm\">\u30da\u30fc\u30b8\u756a\u53f7\u306e\u80cc\u666f<\/h4>\r\n          <label class=\"label is-outlined fz-sm\">\r\n            <p class=\"fz-sm\">\u80cc\u666f\u8272\uff1a<\/p>\r\n            <select id=\"bgMode\" class=\"select w-10e\">\r\n              <option value=\"none\" selected>\u900f\u660e<\/option>\r\n              <option value=\"custom\">\u8272\u3092\u6307\u5b9a<\/option>\r\n            <\/select>\r\n            <input type=\"color\" id=\"bgColor\" value=\"#ffffff\" style=\"display:none;vertical-align:middle;\">\r\n            <small class=\"fz-xs\" style=\"color:#999;\"> \u3059\u3067\u306b\u30da\u30fc\u30b8\u756a\u53f7\u304c\u3042\u308bPDF\u306f\u3001\u80cc\u666f\u8272\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u65e2\u5b58\u306e\u756a\u53f7\u3092\u540c\u3058\u8272\u3067\u5857\u308a\u3064\u3076\u3057\u3066\u7f6e\u304d\u63db\u3048\u307e\u3059<\/small>\r\n          <\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n\r\n        <div class=\"colgroup w-full mt-1r\">\r\n          <h4 class=\"title is-outlined fz-sm\">\u51fa\u529b\u8a2d\u5b9a<\/h4>\r\n          <label class=\"label is-outlined fz-sm\">\r\n            <p class=\"fz-sm\">\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u672b\u5c3e\uff1a<\/p>\r\n            <input type=\"text\" id=\"nameSuffix\" class=\"input w-10e\" value=\"\" placeholder=\"\u4f8b: _num\">\r\n          <\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n      <\/figure><!-- \/\/\/.leftlane -->\r\n\r\n      <figure class=\"section__centerlane\">\r\n        <aside class=\"sticky-sidebar fxd-column pc-center\" style=\"height:22rem;\">\r\n        <\/aside>\r\n      <\/figure><!-- \/\/\/.centerlane -->\r\n\r\n\r\n      <figure class=\"section__rightlane\">\r\n        <div class=\"chest-wrapper relatived\">\r\n          <h3 class=\"fz-rg hdg-section mb-0.25pc\"><span>\u25bc\u30d7\u30ec\u30d3\u30e5\u30fc<\/span><\/h3>\r\n          <div id=\"resultArea\" style=\"min-height:17.5pc;max-height:42pc;overflow-y:auto;background:var(--color-bg-input,#f7f8f9);border:1px solid var(--color-border,#ddd);border-radius:4px;padding:0;\">\r\n            <div id=\"resultPlaceholder\" style=\"display:flex;align-items:center;justify-content:center;height:17.5pc;color:var(--color-text-muted,#aaa);font-size:14px;\">\r\n              PDF\u3092\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3068\u30d7\u30ec\u30d3\u30e5\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\r\n            <\/div>\r\n            <div id=\"processingList\" style=\"display:none;\"><\/div>\r\n          <\/div>\r\n          <ins id=\"encodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <p id=\"downloadControls\" class=\"ta-center mt-1r\" style=\"display:none;\">\r\n          <button type=\"button\" id=\"downloadBtn\" class=\"button is-solided is-primary\">\u3059\u3079\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/button>\r\n        <\/p>\r\n      <\/figure><!-- \/\/\/.rightlane -->\r\n    <\/div><!-- \/\/\/.interior.fxd-row -->\r\n  <\/section>\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <hr id=\"ch-Explanation\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Explanation pt-3r contvis-auto\" style=\"contain-intrinsic-size:800px;\">\r\n    <div class=\"section__interior innerA mx-auto scroll-fadeIn\">\r\n      <div class=\"box is-broad is-solided c-base-900\">\r\n        <h4 class=\"hdg-explanation fz-md mb-0.25pc\">\u4f7f\u3044\u65b9<\/h4>\r\n        <p class=\"fz-ss mb-1r\">\r\n          PDF\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0&amp;\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3068\u3001\u30da\u30fc\u30b8\u306e\u4e0b\u4e2d\u592e\u306b\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u308c\u305f\u4ed5\u4e0a\u304c\u308a\u304c\u30d7\u30ec\u30d3\u30e5\u30fc\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u7bc4\u56f2\u3068\u5927\u304d\u3055\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u300c\u3059\u3079\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u300d\u3067\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002Acrobat \u3067\u306e\u624b\u9806\u306f\u3001<a href=\"https:\/\/code-plus.jp\/gp\/acrobat-pdf-pagenumber-7898\/\">PDF\u306b\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5f8c\u304b\u3089\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5<\/a>\u306b\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002\r\n        <\/p>\r\n\r\n        <h5 class=\"fz-ss hdg-explanation mb-0.25pc mt-1r\">\ud83d\udca1 \u4e3b\u306a\u6a5f\u80fd<\/h5>\r\n        <ul class=\"fz-ss mb-1r\">\r\n          <li><b class=\"fw-600\">\u30da\u30fc\u30b8\u756a\u53f7\uff1a<\/b> \u30da\u30fc\u30b8\u306e\u4e0b\u4e2d\u592e\u306b\u300c-1-\u300d\u306e\u5f62\u5f0f\u3067\u5165\u308c\u307e\u3059\u3002\u4f4d\u7f6e\u3068\u66f8\u5f0f\u306f\u56fa\u5b9a\u3067\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u7bc4\u56f2\u306e\u6307\u5b9a\uff1a<\/b> \u958b\u59cb\u30da\u30fc\u30b8\u3068\u7d42\u4e86\u30da\u30fc\u30b8\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u305d\u306e\u7bc4\u56f2\u306e\u30da\u30fc\u30b8\u3060\u3051\u306b\u5165\u308c\u307e\u3059\u3002\u7d42\u4e86\u30da\u30fc\u30b8\u304c\u7a7a\u6b04\u306a\u3089\u3001\u6700\u5f8c\u306e\u30da\u30fc\u30b8\u307e\u3067\u3067\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u5927\u304d\u3055\uff1a<\/b> \u672c\u6587\u306e\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u3092\u81ea\u52d5\u3067\u5224\u5b9a\u3057\u3066\u3001\u305d\u306e\u25cb%\u306b\u3057\u307e\u3059\u3002PDF\u306e\u30b5\u30a4\u30ba\u304c\u5909\u308f\u3063\u3066\u3082\u3001\u540c\u3058\u5272\u5408\u3067\u3001\u3061\u3087\u3046\u3069\u3088\u3044\u5927\u304d\u3055\u306b\u306a\u308a\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u30d7\u30ec\u30d3\u30e5\u30fc\uff1a<\/b> \u8a2d\u5b9a\u3092\u5909\u3048\u308b\u3068\u3001\u3059\u3050\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002\u7bc4\u56f2\u5916\u306e\u30da\u30fc\u30b8\u306f\u300c\u756a\u53f7\u306a\u3057\u300d\u3068\u8868\u793a\u3055\u308c\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u4e00\u62ec\u51e6\u7406\uff1a<\/b> \u8907\u6570\u306ePDF\u3092\u307e\u3068\u3081\u3066\u30c9\u30ed\u30c3\u30d7\u3067\u304d\u307e\u3059\u3002\u958b\u59cb\u30da\u30fc\u30b8\u3068\u7d42\u4e86\u30da\u30fc\u30b8\u306f\u3001\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u540c\u3058\u5024\u304c\u4f7f\u308f\u308c\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u80cc\u666f\u8272\uff1a<\/b> \u521d\u671f\u8a2d\u5b9a\u306f\u900f\u660e\u3067\u3059\u3002\u8272\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u30da\u30fc\u30b8\u756a\u53f7\u306e\u307e\u308f\u308a\u3092\u305d\u306e\u8272\u3067\u5857\u3063\u3066\u304b\u3089\u3001\u756a\u53f7\u3092\u5165\u308c\u307e\u3059\u3002\u3059\u3067\u306b\u30da\u30fc\u30b8\u756a\u53f7\u304c\u5165\u3063\u3066\u3044\u308bPDF\u3067\u306f\u3001\u65e2\u5b58\u306e\u756a\u53f7\u3082\u540c\u3058\u8272\u3067\u5857\u308a\u3064\u3076\u3057\u3066\u3001\u65b0\u3057\u3044\u756a\u53f7\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002\u8272\u306f\u3001\u3059\u3079\u3066\u306e\u30da\u30fc\u30b8\u3067\u5171\u901a\u3067\u3059<\/li>\r\n        <\/ul>\r\n\r\n        <h5 class=\"fz-ss hdg-explanation mb-0.25pc\">\ud83c\udf9a\ufe0f \u5927\u304d\u3055\u306e\u76ee\u5b89<\/h5>\r\n        <ul class=\"fz-ss mb-1r\">\r\n          <li><b class=\"fw-600\">100%\uff1a<\/b> \u672c\u6587\u3068\u540c\u3058\u5927\u304d\u3055\u3067\u3059\u3002\u307e\u305a\u306f\u3053\u306e\u5024\u3067\u3001\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044<\/li>\r\n          <li><b class=\"fw-600\">70\u301c90%\uff1a<\/b> \u672c\u6587\u3088\u308a\u5c11\u3057\u63a7\u3048\u3081\u306b\u3057\u305f\u3044\u3068\u304d<\/li>\r\n          <li><b class=\"fw-600\">120\u301c150%\uff1a<\/b> \u672c\u6587\u306e\u6587\u5b57\u304c\u5c0f\u3055\u304f\u3001\u30da\u30fc\u30b8\u756a\u53f7\u304c\u76ee\u7acb\u305f\u306a\u3044\u3068\u304d<\/li>\r\n          <li>\u672c\u6587\u306e\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u306f\u3001PDF\u306e\u6587\u5b57\u3092\u6587\u5b57\u6570\u3067\u6570\u3048\u3066\u3001\u4e2d\u592e\u306e\u5024\u3092\u4f7f\u3044\u307e\u3059\u3002\u898b\u51fa\u3057\u3084\u6ce8\u91c8\u304c\u591a\u3044\u8cc7\u6599\u3067\u306f\u3001\u305a\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u5834\u5408\u306f\u3001\u5272\u5408\u3067\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044<\/li>\r\n        <\/ul>\r\n\r\n        <h5 class=\"fz-ss hdg-explanation mb-0.25pc\">\ud83c\udfaf \u6d3b\u7528\u4f8b<\/h5>\r\n        <ul class=\"fz-ss mb-1r\">\r\n          <li><b class=\"fw-600\">\u30b5\u30a4\u30ba\u306e\u9055\u3046PDF\u3092\u3001\u7d9a\u3051\u3066\u51e6\u7406\uff1a<\/b> A4\u3001A3\u3001\u30c7\u30b6\u30a4\u30f3\u30ab\u30f3\u30d7\u306a\u3069\u3001\u30b5\u30a4\u30ba\u304c\u9055\u3046PDF\u3067\u3082\u3001\u540c\u3058\u5272\u5408\u306e\u307e\u307e\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3060\u3051\u3067\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u8868\u7d19\u3092\u9664\u3044\u3066\u5165\u308c\u308b\uff1a<\/b> \u958b\u59cb\u30da\u30fc\u30b8\u30922\u306b\u3057\u307e\u3059\u3002\u756a\u53f7\u306fPDF\u306e\u30da\u30fc\u30b8\u756a\u53f7\u3069\u304a\u308a\u306b\u5165\u308b\u306e\u3067\u30012\u30da\u30fc\u30b8\u76ee\u304c\u300c-2-\u300d\u306b\u306a\u308a\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u5dfb\u672b\u3092\u9664\u3044\u3066\u5165\u308c\u308b\uff1a<\/b> \u7d42\u4e86\u30da\u30fc\u30b8\u3092\u6307\u5b9a\u3057\u3066\u3001\u5965\u4ed8\u3084\u767d\u7d19\u306e\u30da\u30fc\u30b8\u3092\u9664\u304d\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u65e2\u5b58\u306e\u30da\u30fc\u30b8\u756a\u53f7\u3092\u7f6e\u304d\u63db\u3048\u308b\uff1a<\/b> \u80cc\u666f\u8272\u3092\u3001\u30da\u30fc\u30b8\u306e\u80cc\u666f\u3068\u540c\u3058\u8272\u306b\u6307\u5b9a\u3057\u307e\u3059\u3002\u30d6\u30e9\u30a6\u30b6\u306e\u30ab\u30e9\u30fc\u30d4\u30c3\u30ab\u30fc\u306b\u30b9\u30dd\u30a4\u30c8\u304c\u3042\u308c\u3070\u3001\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u8272\u3092\u62fe\u3048\u307e\u3059<\/li>\r\n        <\/ul>\r\n\r\n        <h5 class=\"fz-ss hdg-explanation mb-0.25pc\">\u26a0\ufe0f \u6ce8\u610f\u4e8b\u9805<\/h5>\r\n        <ul class=\"fz-ss\">\r\n          <li><b class=\"fw-600\">\u30d6\u30e9\u30a6\u30b6\u51e6\u7406\uff1a<\/b> \u3059\u3079\u3066\u306e\u51e6\u7406\u306f\u30d6\u30e9\u30a6\u30b6\u5185\u3067\u5b8c\u7d50\u3057\u307e\u3059\uff08\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093\uff09<\/li>\r\n          <li><b class=\"fw-600\">\u756a\u53f7\uff1a<\/b> PDF\u306e\u30da\u30fc\u30b8\u756a\u53f7\u3069\u304a\u308a\u306b\u5165\u308a\u307e\u3059\u30021\u30da\u30fc\u30b8\u76ee\u304c\u300c-1-\u300d\u30012\u30da\u30fc\u30b8\u76ee\u304c\u300c-2-\u300d\u3067\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u66f8\u4f53\u3068\u8272\uff1a<\/b> \u66f8\u4f53\u306f Helvetica\u3001\u8272\u306f\u9ed2\u3067\u3059\u3002\u6570\u5b57\u3068\u300c-\u300d\u3060\u3051\u306a\u306e\u3067\u3001\u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u306e\u57cb\u3081\u8fbc\u307f\u306f\u4e0d\u8981\u3067\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u6587\u5b57\u3092\u5224\u5b9a\u3067\u304d\u306a\u3044PDF\uff1a<\/b> \u30b9\u30ad\u30e3\u30f3\u3057\u305f\u753b\u50cf\u3084\u3001\u6587\u5b57\u3092\u30a2\u30a6\u30c8\u30e9\u30a4\u30f3\u5316\u3057\u305fPDF\u3067\u306f\u3001\u672c\u6587\u306e\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u3092\u5224\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u306e\u5834\u5408\u306f\u3001\u30da\u30fc\u30b8\u306e\u77ed\u8fba\u306e\u7d041.45%\u3092\u672c\u6587\u306e\u5927\u304d\u3055\u3068\u307f\u306a\u3057\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u3059\u3067\u306b\u756a\u53f7\u304c\u3042\u308bPDF\uff1a<\/b> \u80cc\u666f\u8272\u304c\u900f\u660e\u306e\u307e\u307e\u3060\u3068\u3001\u65e2\u5b58\u306e\u756a\u53f7\u306f\u6d88\u3048\u305a\u3001\u4e0a\u306b\u91cd\u306d\u3066\u5165\u308a\u307e\u3059\u3002\u80cc\u666f\u8272\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u4e0b\u7aef\u306e\u4e2d\u592e\u306b\u3042\u308b\u3001\u6570\u5b57\u3068\u30cf\u30a4\u30d5\u30f3\u3060\u3051\u306e\u6587\u5b57\u3092\u3001\u65e2\u5b58\u306e\u756a\u53f7\u3068\u307f\u306a\u3057\u3066\u5857\u308a\u3064\u3076\u3057\u307e\u3059\u3002\u30a2\u30a6\u30c8\u30e9\u30a4\u30f3\u5316\u3055\u308c\u305f\u756a\u53f7\u3084\u3001\u753b\u50cf\u306b\u306a\u3063\u3066\u3044\u308b\u756a\u53f7\u306f\u691c\u51fa\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u65b0\u3057\u3044\u756a\u53f7\u306e\u307e\u308f\u308a\u3060\u3051\u304c\u5857\u3089\u308c\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u80cc\u666f\u8272\u306e\u6ce8\u610f\uff1a<\/b> \u8272\u306f1\u8272\u3060\u3051\u3067\u3059\u3002\u30da\u30fc\u30b8\u3054\u3068\u306b\u80cc\u666f\u8272\u304c\u9055\u3046PDF\u3067\u306f\u3001\u8272\u306e\u9055\u3046\u30da\u30fc\u30b8\u306b\u3001\u5857\u3063\u305f\u8de1\u304c\u898b\u3048\u307e\u3059\u3002\u5857\u308a\u3064\u3076\u3057\u306f\u3001\u30da\u30fc\u30b8\u306e\u4e0a\u306b\u8272\u3092\u91cd\u306d\u308b\u3060\u3051\u3067\u3001\u5143\u306e\u756a\u53f7\u306e\u6587\u5b57\u306fPDF\u306b\u6b8b\u308a\u307e\u3059<\/li>\r\n          <li><b class=\"fw-600\">\u975e\u5bfe\u5fdc\uff1a<\/b> \u30d1\u30b9\u30ef\u30fc\u30c9\u3084\u6697\u53f7\u5316\u306e\u8a2d\u5b9a\u304c\u3042\u308bPDF\u306f\u3001\u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093<\/li>\r\n          <li><b class=\"fw-600\">\u30d5\u30a1\u30a4\u30eb\u540d\uff1a<\/b> \u5143\u306e\u540d\u524d\u3067\u51fa\u529b\u3057\u307e\u3059\u3002\u91cd\u8907\u3092\u907f\u3051\u305f\u3044\u3068\u304d\u306f\u300c\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u672b\u5c3e\u300d\u306b\u6587\u5b57\u3092\u5165\u308c\u3066\u304f\u3060\u3055\u3044<\/li>\r\n        <\/ul>\r\n      <\/div>\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc03\ud835\udc04\ud835\udc0f\ud835\udc00\ud835\udc11\ud835\udc13\ud835\udc0c\ud835\udc04\ud835\udc0d\ud835\udc13\u0f3a -->\r\n\r\n  <section class=\"sect-cnvtVkaA-Relation2 pt-3r contvis-auto\" style=\"contain-intrinsic-size:800px;\">\r\n    <div class=\"section__interior innerA mx-auto scroll-fadeIn\">\r\n      <div class=\"hgroup-wrapper hgroupA mb-0.5pc\">\r\n\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n\r\n\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n  <!-- \u0f3b.mediano\uff08\u4f59\u767d\u8abf\u6574\uff1apage\u4e0b\uff09\u0f3a -->\r\n  <hr class=\"spacer-mezzala\" \/>\r\n\r\n<\/div><!-- \/\/\/\u25b2.page  -->\r\n\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n  const endropArea = document.getElementById('endropArea');\r\n  const fileInput = document.getElementById('fileInput');\r\n  const resultArea = document.getElementById('resultArea');\r\n  const resultPlaceholder = document.getElementById('resultPlaceholder');\r\n  const processingList = document.getElementById('processingList');\r\n  const downloadControls = document.getElementById('downloadControls');\r\n  const downloadBtn = document.getElementById('downloadBtn');\r\n  const encodedMessage = document.getElementById('encodedMessage');\r\n  const startInput = document.getElementById('startPage');\r\n  const endInput = document.getElementById('endPage');\r\n  const sizeRange = document.getElementById('sizeRange');\r\n  const sizeInput = document.getElementById('sizePct');\r\n  const bgMode = document.getElementById('bgMode');\r\n  const bgColorInput = document.getElementById('bgColor');\r\n\r\n  if (!endropArea) return;\r\n\r\n  fileInput.style.display = 'none';\r\n  endropArea.style.cursor = 'pointer';\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u5b9a\u6570\r\n  \/\/ ====================================\r\n\r\n  const PAGE_FORMAT = '-*-';        \/\/ \u300c*\u300d\u304c\u30da\u30fc\u30b8\u756a\u53f7\u306b\u7f6e\u304d\u63db\u308f\u308b\r\n  const BOTTOM_RATIO = 1.8;         \/\/ \u4e0b\u7aef\u304b\u3089\u6587\u5b57\u306e\u57fa\u6e96\u7dda\u307e\u3067 \uff1d \u6587\u5b57\u30b5\u30a4\u30ba \u00d7 1.8\r\n  const FALLBACK_RATIO = 0.0145;    \/\/ \u672c\u6587\u3092\u5224\u5b9a\u3067\u304d\u306a\u3044\u3068\u304d\u3001\u672c\u6587\u30b5\u30a4\u30ba \uff1d \u30da\u30fc\u30b8\u306e\u77ed\u8fba \u00d7 1.45%\r\n  const PREVIEW_WIDTH = 436;        \/\/ \u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u5e45\uff08px\uff09\r\n  const PDFJS_BASE = 'https:\/\/unpkg.com\/pdfjs-dist@5.7.284\/';\r\n  const PDFJS_URL = PDFJS_BASE + 'build\/pdf.min.mjs';\r\n  const PDFJS_WORKER = PDFJS_BASE + 'build\/pdf.worker.min.mjs';\r\n  const PDFLIB_URL = 'https:\/\/unpkg.com\/pdf-lib@1.17.1\/dist\/pdf-lib.min.js';\r\n\r\n  let pdfjs = null;\r\n  let PDFLib = null;\r\n  let libsPromise = null;\r\n  let items = [];          \/\/ \u8aad\u307f\u8fbc\u3093\u3060PDF { file, buf, pdf, numPages, sizes, bodyPt, card, ... }\r\n  let runToken = 0;        \/\/ \u53e4\u3044\u51e6\u7406\u3092\u6253\u3061\u5207\u308b\u305f\u3081\u306e\u756a\u53f7\r\n  let debounceTimer = null;\r\n  let observer = null;\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30aa\u30d7\u30b7\u30e7\u30f3UI\uff08\u5909\u66f4\u3059\u308b\u3068\u3001\u30d7\u30ec\u30d3\u30e5\u30fc\u3078\u3059\u3050\u53cd\u6620\uff09\r\n  \/\/ ====================================\r\n\r\n  \/\/ \u5927\u304d\u3055\uff1a\u30b9\u30e9\u30a4\u30c0\u30fc\u3068\u6570\u5024\u5165\u529b\u3092\u540c\u671f\r\n  sizeRange.addEventListener('input', function () {\r\n    sizeInput.value = sizeRange.value;\r\n  });\r\n  sizeInput.addEventListener('input', function () {\r\n    const v = parseInt(sizeInput.value, 10);\r\n    if (!isNaN(v)) sizeRange.value = Math.max(parseInt(sizeRange.min, 10), Math.min(v, parseInt(sizeRange.max, 10)));\r\n  });\r\n\r\n  \/\/ \u80cc\u666f\u8272\uff1a\u300c\u8272\u3092\u6307\u5b9a\u300d\u306e\u3068\u304d\u3060\u3051\u3001\u30ab\u30e9\u30fc\u30d4\u30c3\u30ab\u30fc\u3092\u8868\u793a\r\n  bgMode.addEventListener('change', function () {\r\n    bgColorInput.style.display = bgMode.value === 'custom' ? '' : 'none';\r\n  });\r\n\r\n  ['startPage', 'endPage', 'sizeRange', 'sizePct', 'bgMode', 'bgColor', 'nameSuffix'].forEach(function (id) {\r\n    const el = document.getElementById(id);\r\n    el.addEventListener('input', scheduleUpdate);\r\n    el.addEventListener('change', scheduleUpdate);\r\n  });\r\n\r\n  function scheduleUpdate() {\r\n    if (items.length === 0) return;\r\n    clearTimeout(debounceTimer);\r\n    debounceTimer = setTimeout(function () { updateAll(); }, 120);\r\n  }\r\n\r\n  function readOptions() {\r\n    const start = parseInt(startInput.value, 10);\r\n    const end = parseInt(endInput.value, 10);\r\n    const pct = parseFloat(sizeInput.value);\r\n    const hex = bgColorInput.value || '#ffffff';\r\n    return {\r\n      start: isNaN(start) ? 1 : Math.max(1, start),\r\n      end: isNaN(end) ? 0 : Math.max(1, end),     \/\/ 0 \uff1d \u6700\u5f8c\u307e\u3067\r\n      pct: isNaN(pct) || pct <= 0 ? 100 : pct,\r\n      bg: bgMode.value === 'custom'               \/\/ null \uff1d \u900f\u660e\r\n        ? { r: parseInt(hex.slice(1, 3), 16), g: parseInt(hex.slice(3, 5), 16), b: parseInt(hex.slice(5, 7), 16) }\r\n        : null,\r\n      suffix: document.getElementById('nameSuffix').value.trim()\r\n    };\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30d5\u30a1\u30a4\u30eb\u5165\u529b\u30fb\u30c9\u30e9\u30c3\u30b0&\u30c9\u30ed\u30c3\u30d7\r\n  \/\/ ====================================\r\n\r\n  endropArea.addEventListener('click', function () { fileInput.click(); });\r\n\r\n  fileInput.addEventListener('change', function (e) {\r\n    if (e.target.files.length > 0) handleFiles(e.target.files);\r\n    fileInput.value = '';\r\n  });\r\n\r\n  endropArea.addEventListener('dragover', function (e) {\r\n    e.preventDefault(); e.stopPropagation();\r\n    this.style.backgroundColor = '#f0f0f0';\r\n    this.style.borderColor = '#999';\r\n  });\r\n  endropArea.addEventListener('dragleave', function (e) {\r\n    e.preventDefault(); e.stopPropagation();\r\n    this.style.backgroundColor = '';\r\n    this.style.borderColor = '';\r\n  });\r\n  endropArea.addEventListener('dragenter', function (e) {\r\n    e.preventDefault(); e.stopPropagation();\r\n  });\r\n  endropArea.addEventListener('drop', function (e) {\r\n    e.preventDefault(); e.stopPropagation();\r\n    this.style.backgroundColor = '';\r\n    this.style.borderColor = '';\r\n    if (e.dataTransfer.files.length > 0) handleFiles(e.dataTransfer.files);\r\n  });\r\n\r\n  downloadBtn.addEventListener('click', function () {\r\n    downloadItems(items);\r\n  });\r\n\r\n  async function handleFiles(files) {\r\n    const pdfFiles = Array.from(files).filter(isPdfFile);\r\n    if (pdfFiles.length === 0) {\r\n      alert('PDF\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30ed\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\r\n      return;\r\n    }\r\n\r\n    const dropInner = endropArea.querySelector('.endrop-inner');\r\n    const originalContent = dropInner.innerHTML;\r\n    dropInner.innerHTML = '<p style=\"padding:20px;\">\u8aad\u307f\u8fbc\u307f\u4e2d...<\/p>';\r\n\r\n    try {\r\n      await ensureLibs();\r\n    } catch (err) {\r\n      dropInner.innerHTML = originalContent;\r\n      showMessage('PDF\u306e\u51e6\u7406\u30a8\u30f3\u30b8\u30f3\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u901a\u4fe1\u72b6\u6cc1\u3092\u78ba\u8a8d\u3057\u3066\u3001\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044', false);\r\n      return;\r\n    }\r\n\r\n    const myItems = pdfFiles.map(function (file) {\r\n      return { file: file, buf: null, pdf: null, numPages: 0, sizes: [], refW: 0, bodyPt: 0, bodyNote: '', error: '', pageEls: [], card: null };\r\n    });\r\n    items = myItems;\r\n    ++runToken;\r\n    destroyPages();\r\n\r\n    processingList.innerHTML = '';\r\n    resultPlaceholder.style.display = 'none';\r\n    processingList.style.display = 'block';\r\n    downloadControls.style.display = 'none';\r\n\r\n    myItems.forEach(function (item) { createCard(item); });\r\n\r\n    \/\/ PDF\u30921\u3064\u305a\u3064\u8aad\u307f\u8fbc\u3080\r\n    for (const item of myItems) {\r\n      try {\r\n        await loadPdf(item);\r\n        await detectBody(item);\r\n        buildPages(item);\r\n      } catch (err) {\r\n        item.error = errorText(err);\r\n      }\r\n      if (items !== myItems) return; \/\/ \u65b0\u3057\u304f\u30c9\u30ed\u30c3\u30d7\u3055\u308c\u305f\r\n    }\r\n\r\n    await updateAll();\r\n    if (items !== myItems) return;\r\n\r\n    const okCount = myItems.filter(function (it) { return !it.error; }).length;\r\n    const ngCount = myItems.length - okCount;\r\n    downloadControls.style.display = okCount > 0 ? '' : 'none';\r\n\r\n    dropInner.innerHTML =\r\n      '<div style=\"padding:20px;\">' +\r\n      '<p style=\"color: var(--c-caution, hsl(13, 99%, 43%));;font-weight:bold;\">' + myItems.length + '\u500b\u306ePDF\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f<\/p>' +\r\n      '<small style=\"color:#666;\">\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044<\/small><\/div>';\r\n    setTimeout(function () { dropInner.innerHTML = originalContent; }, 3000);\r\n\r\n    if (ngCount > 0) showMessage(ngCount + '\u500b\u306ePDF\u306f\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f', false);\r\n  }\r\n\r\n  function errorText(err) {\r\n    if (err && err.name === 'PasswordException') return '\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u305fPDF\u306f\u3001\u51e6\u7406\u3067\u304d\u307e\u305b\u3093';\r\n    return err && err.message ? err.message : 'PDF\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f';\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u8aad\u307f\u8fbc\u307f\uff08\u521d\u3081\u3066PDF\u3092\u30c9\u30ed\u30c3\u30d7\u3057\u305f\u3068\u304d\u3060\u3051\uff09\r\n  \/\/ ====================================\r\n\r\n  function ensureLibs() {\r\n    if (libsPromise) return libsPromise;\r\n    libsPromise = Promise.all([\r\n      import(PDFJS_URL),\r\n      loadScript(PDFLIB_URL)\r\n    ]).then(function (r) {\r\n      pdfjs = r[0];\r\n      pdfjs.GlobalWorkerOptions.workerSrc = PDFJS_WORKER;\r\n      PDFLib = window.PDFLib;\r\n      if (!pdfjs || !PDFLib) throw new Error('load');\r\n    });\r\n    libsPromise.catch(function () { libsPromise = null; });\r\n    return libsPromise;\r\n  }\r\n\r\n  function loadScript(src) {\r\n    return new Promise(function (resolve, reject) {\r\n      const s = document.createElement('script');\r\n      s.src = src;\r\n      s.onload = resolve;\r\n      s.onerror = reject;\r\n      document.head.appendChild(s);\r\n    });\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ PDF\u306e\u8aad\u307f\u8fbc\u307f\u3068\u3001\u672c\u6587\u30b5\u30a4\u30ba\u306e\u5224\u5b9a\r\n  \/\/ ====================================\r\n\r\n  async function loadPdf(item) {\r\n    item.buf = await item.file.arrayBuffer();\r\n    \/\/ pdf.js \u306b\u30c7\u30fc\u30bf\u3092\u6e21\u3059\u3068\u3001\u5143\u306e\u30d0\u30c3\u30d5\u30a1\u304c\u4f7f\u3048\u306a\u304f\u306a\u308b\u305f\u3081\u3001\u30b3\u30d4\u30fc\u3092\u6e21\u3059\r\n    const task = pdfjs.getDocument({\r\n      data: new Uint8Array(item.buf.slice(0)),\r\n      isEvalSupported: false,\r\n      cMapUrl: PDFJS_BASE + 'cmaps\/',                       \/\/ \u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u306e\u8868\u793a\u306b\u5fc5\u8981\r\n      cMapPacked: true,\r\n      standardFontDataUrl: PDFJS_BASE + 'standard_fonts\/',  \/\/ \u57cb\u3081\u8fbc\u307e\u308c\u3066\u3044\u306a\u3044\u6a19\u6e96\u30d5\u30a9\u30f3\u30c8\u306e\u8868\u793a\u306b\u5fc5\u8981\r\n      wasmUrl: PDFJS_BASE + 'wasm\/',                        \/\/ JPEG2000 \u753b\u50cf\u306e\u8868\u793a\u306b\u5fc5\u8981\r\n      iccUrl: PDFJS_BASE + 'iccs\/'                          \/\/ CMYK \u753b\u50cf\u306e\u8272\u306e\u518d\u73fe\u306b\u5fc5\u8981\r\n    });\r\n    item.pdf = await task.promise;\r\n    item.numPages = item.pdf.numPages;\r\n    item.sizes = [];\r\n    for (let i = 1; i <= item.numPages; i++) {\r\n      const page = await item.pdf.getPage(i);\r\n      const vp = page.getViewport({ scale: 1 });\r\n      item.sizes.push({ w: vp.width, h: vp.height });\r\n    }\r\n  }\r\n\r\n  \/\/ \u672c\u6587\u306e\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba \uff1d \u6587\u5b57\u6570\u3067\u6570\u3048\u305f\u3001\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u306e\u4e2d\u592e\u5024\r\n  \/\/ \u30da\u30fc\u30b8\u306e\u5e45\u304c\u9055\u3046\u3068\u304d\u306f\u3001\u5e45\u306e\u4e2d\u592e\u5024\u306e\u30da\u30fc\u30b8\u306b\u63db\u7b97\u3057\u3066\u6570\u3048\u308b\r\n  async function detectBody(item) {\r\n    const n = item.numPages;\r\n    const widths = item.sizes.map(function (s) { return s.w; }).sort(function (a, b) { return a - b; });\r\n    item.refW = widths[Math.floor(widths.length \/ 2)];\r\n\r\n    const step = Math.max(1, Math.floor(n \/ 30));   \/\/ \u9577\u3044PDF\u306f\u300130\u30da\u30fc\u30b8\u307b\u3069\u3092\u629c\u304d\u51fa\u3057\u3066\u8abf\u3079\u308b\r\n    const hist = new Map();\r\n    let total = 0;\r\n    for (let p = 1; p <= n; p += step) {\r\n      const page = await item.pdf.getPage(p);\r\n      const tc = await page.getTextContent();\r\n      const k = item.refW \/ item.sizes[p - 1].w;\r\n      tc.items.forEach(function (it) {\r\n        if (!it.str || !it.transform) return;\r\n        const len = it.str.replace(\/\\s\/g, '').length;\r\n        if (!len) return;\r\n        const s = Math.hypot(it.transform[2], it.transform[3]) * k;\r\n        if (!(s >= 3)) return;\r\n        const key = Math.round(s * 2) \/ 2;\r\n        hist.set(key, (hist.get(key) || 0) + len);\r\n        total += len;\r\n      });\r\n    }\r\n\r\n    if (total >= 30) {\r\n      const keys = Array.from(hist.keys()).sort(function (a, b) { return a - b; });\r\n      let acc = 0;\r\n      item.bodyPt = keys[keys.length - 1];\r\n      for (const key of keys) {\r\n        acc += hist.get(key);\r\n        if (acc >= total \/ 2) { item.bodyPt = key; break; }\r\n      }\r\n      item.bodyNote = '';\r\n    } else {\r\n      item.bodyPt = Math.round(Math.min(item.refW, item.sizes[0].h) * FALLBACK_RATIO * 10) \/ 10;\r\n      item.bodyNote = '\u672c\u6587\u306e\u6587\u5b57\u3092\u5224\u5b9a\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u30da\u30fc\u30b8\u306e\u77ed\u8fba\u304b\u3089\u63db\u7b97\u3057\u3066\u3044\u307e\u3059';\r\n    }\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u7bc4\u56f2\u3068\u5927\u304d\u3055\u306e\u8a08\u7b97\uff08\u30d7\u30ec\u30d3\u30e5\u30fc\u3068\u51fa\u529b\u3067\u5171\u901a\uff09\r\n  \/\/ ====================================\r\n\r\n  function computeRange(item, o) {\r\n    const start = o.start;\r\n    const end = o.end === 0 ? item.numPages : Math.min(o.end, item.numPages);\r\n    if (start > item.numPages) return { error: '\u958b\u59cb\u30da\u30fc\u30b8\u304c\u30da\u30fc\u30b8\u6570\uff08' + item.numPages + '\uff09\u3092\u8d85\u3048\u3066\u3044\u307e\u3059' };\r\n    if (start > end) return { error: '\u958b\u59cb\u30da\u30fc\u30b8\u304c\u3001\u7d42\u4e86\u30da\u30fc\u30b8\u3088\u308a\u5f8c\u306b\u306a\u3063\u3066\u3044\u307e\u3059' };\r\n    return { start: start, end: end };\r\n  }\r\n\r\n  \/\/ \u30da\u30fc\u30b8\u756a\u53f7\u306e\u6587\u5b57\u30b5\u30a4\u30ba\uff08pt\uff09\u3002\u30da\u30fc\u30b8\u306e\u5e45\u304c\u9055\u3046\u3068\u304d\u306f\u3001\u5e45\u306e\u6bd4\u3067\u63db\u7b97\u3059\u308b\r\n  function numberSize(item, pageIndex, o) {\r\n    const s = item.bodyPt * (item.sizes[pageIndex].w \/ item.refW) * (o.pct \/ 100);\r\n    return Math.round(s * 10) \/ 10;\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u5168PDF\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u66f4\u65b0\r\n  \/\/ ====================================\r\n\r\n  async function updateAll() {\r\n    const myItems = items;\r\n    const token = ++runToken;\r\n    const o = readOptions();\r\n\r\n    for (const item of myItems) {\r\n      renderCard(item, o);\r\n      if (!item.error) {\r\n        item.pageEls.forEach(function (pe) { if (pe.rendered) drawOverlay(item, pe, o); updateCaption(item, pe, o); });\r\n      }\r\n      await new Promise(function (r) { setTimeout(r, 0); });\r\n      if (token !== runToken || items !== myItems) return;\r\n    }\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30d7\u30ec\u30d3\u30e5\u30fc\u30ab\u30fc\u30c9\r\n  \/\/ ====================================\r\n\r\n  function createCard(item) {\r\n    const card = document.createElement('div');\r\n    card.style.cssText = 'padding:12px;border-bottom:1px solid #e0e0e0;';\r\n\r\n    const nameEl = document.createElement('p');\r\n    nameEl.style.cssText = 'font-size:12px;font-weight:500;color:#555;margin:0 0 4px;word-break:break-all;';\r\n    nameEl.textContent = item.file.name;\r\n    card.appendChild(nameEl);\r\n\r\n    const info = document.createElement('div');\r\n    info.style.cssText = 'margin:0 0 6px;font-size:12px;color:#777;';\r\n    info.textContent = '\u8aad\u307f\u8fbc\u307f\u4e2d...';\r\n    card.appendChild(info);\r\n\r\n    const pagesBox = document.createElement('div');\r\n    pagesBox.style.cssText = 'text-align:center;';\r\n    card.appendChild(pagesBox);\r\n\r\n    const dlRow = document.createElement('div');\r\n    dlRow.style.cssText = 'margin-top:4px;font-size:12px;';\r\n    const dlLink = document.createElement('a');\r\n    dlLink.href = 'javascript:void(0);';\r\n    dlLink.textContent = '\u3053\u306ePDF\u3060\u3051\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9';\r\n    dlLink.style.cssText = 'text-decoration:underline;';\r\n    dlLink.addEventListener('click', function () {\r\n      downloadItems([item]);\r\n    });\r\n    dlRow.appendChild(dlLink);\r\n    card.appendChild(dlRow);\r\n\r\n    processingList.appendChild(card);\r\n    item.card = { root: card, info: info, pagesBox: pagesBox, dlRow: dlRow };\r\n  }\r\n\r\n  function renderCard(item, o) {\r\n    const c = item.card;\r\n    if (!c) return;\r\n\r\n    \/\/ \u8aad\u307f\u8fbc\u307f\u5931\u6557\r\n    if (item.error) {\r\n      c.pagesBox.style.display = 'none';\r\n      c.dlRow.style.display = 'none';\r\n      c.info.innerHTML = '<span style=\"color:#e74c3c;\">\u274c ' + escapeHtml(item.error) + '<\/span>';\r\n      return;\r\n    }\r\n    if (!item.numPages) return;\r\n\r\n    const range = computeRange(item, o);\r\n    if (range.error) {\r\n      c.pagesBox.style.display = 'none';\r\n      c.dlRow.style.display = 'none';\r\n      c.info.innerHTML = '<span style=\"color:#e74c3c;\">\u274c ' + escapeHtml(range.error) + '<\/span>';\r\n      return;\r\n    }\r\n    c.pagesBox.style.display = '';\r\n    c.dlRow.style.display = '';\r\n\r\n    const first = item.sizes[0];\r\n    const sameSize = item.sizes.every(function (s) { return Math.abs(s.w - first.w) < 1 && Math.abs(s.h - first.h) < 1; });\r\n    const sizeText = sameSize ? Math.round(first.w) + ' \u00d7 ' + Math.round(first.h) + ' pt' : '\u30da\u30fc\u30b8\u306e\u30b5\u30a4\u30ba\u304c\u6df7\u5728';\r\n    const numPt = numberSize(item, 0, o);\r\n    c.info.innerHTML =\r\n      '<span style=\"color:#27ae60;\">\u2705<\/span> ' + item.numPages + '\u30da\u30fc\u30b8\u3000' + sizeText +\r\n      '<br>\u672c\u6587 <b>' + item.bodyPt + '<\/b> pt \u2192 \u30da\u30fc\u30b8\u756a\u53f7 <b>' + numPt + '<\/b> pt\uff08\u672c\u6587\u306e' + o.pct + '%\uff09\u3000' +\r\n      '<b>' + range.start + '\u301c' + range.end + '<\/b> \u30da\u30fc\u30b8\u306b\u5165\u308c\u307e\u3059' +\r\n      (item.bodyNote ? '<br><span style=\"color:#999;\">' + escapeHtml(item.bodyNote) + '<\/span>' : '');\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30da\u30fc\u30b8\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\uff08\u898b\u3048\u3066\u3044\u308b\u30da\u30fc\u30b8\u3060\u3051\u63cf\u304f\uff09\r\n  \/\/ ====================================\r\n\r\n  function destroyPages() {\r\n    if (observer) observer.disconnect();\r\n    observer = null;\r\n  }\r\n\r\n  function buildPages(item) {\r\n    if (!observer) {\r\n      observer = new IntersectionObserver(function (entries) {\r\n        entries.forEach(function (entry) {\r\n          const pe = entry.target._pe;\r\n          if (!pe) return;\r\n          if (entry.isIntersecting) renderPage(pe.item, pe);\r\n          else releasePage(pe);\r\n        });\r\n      }, { root: resultArea, rootMargin: '600px 0px' });\r\n    }\r\n\r\n    item.pageEls = [];\r\n    const frag = document.createDocumentFragment();\r\n    for (let i = 0; i < item.numPages; i++) {\r\n      const sz = item.sizes[i];\r\n      const w = Math.min(PREVIEW_WIDTH, Math.round(sz.w));\r\n      const h = Math.max(1, Math.round(w * sz.h \/ sz.w));\r\n\r\n      const wrap = document.createElement('div');\r\n      wrap.style.cssText = 'margin:0 auto 12px;max-width:100%;';\r\n\r\n      const frame = document.createElement('div');\r\n      frame.style.cssText = 'position:relative;display:inline-block;line-height:0;background:#fff;box-shadow:0 0 0 1px #d6d6d6;width:' + w + 'px;height:' + h + 'px;max-width:100%;';\r\n\r\n      const base = document.createElement('canvas');\r\n      base.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;';\r\n      const over = document.createElement('canvas');\r\n      over.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;';\r\n      frame.appendChild(base);\r\n      frame.appendChild(over);\r\n\r\n      const cap = document.createElement('div');\r\n      cap.style.cssText = 'margin-top:2px;font-size:11px;color:#888;line-height:1.4;';\r\n\r\n      wrap.appendChild(frame);\r\n      wrap.appendChild(cap);\r\n      frag.appendChild(wrap);\r\n\r\n      const pe = { item: item, index: i, w: w, h: h, frame: frame, base: base, over: over, cap: cap, rendered: false, task: null, token: 0, vp: null, drawTok: 0 };\r\n      frame._pe = pe;\r\n      item.pageEls.push(pe);\r\n    }\r\n    item.card.pagesBox.appendChild(frag);\r\n    item.pageEls.forEach(function (pe) { observer.observe(pe.frame); });\r\n  }\r\n\r\n  async function renderPage(item, pe) {\r\n    if (pe.rendered || pe.task) return;\r\n    const myToken = ++pe.token;\r\n    try {\r\n      const page = await item.pdf.getPage(pe.index + 1);\r\n      if (myToken !== pe.token) return;\r\n      const dpr = Math.min(window.devicePixelRatio || 1, 2);\r\n      const vp0 = page.getViewport({ scale: 1 });\r\n      const scale = (pe.w * dpr) \/ vp0.width;\r\n      const vp = page.getViewport({ scale: scale });\r\n      pe.vp = vp;\r\n      pe.base.width = Math.round(vp.width);\r\n      pe.base.height = Math.round(vp.height);\r\n      pe.over.width = pe.base.width;\r\n      pe.over.height = pe.base.height;\r\n      const ctx = pe.base.getContext('2d');\r\n      pe.task = page.render({ canvasContext: ctx, viewport: vp });\r\n      await pe.task.promise;\r\n      pe.task = null;\r\n      if (myToken !== pe.token) return;\r\n      pe.rendered = true;\r\n      drawOverlay(item, pe, readOptions());\r\n    } catch (err) {\r\n      pe.task = null;      \/\/ \u63cf\u753b\u306e\u4e2d\u65ad\u306a\u3069\r\n    }\r\n  }\r\n\r\n  function releasePage(pe) {\r\n    pe.token++;\r\n    if (pe.task) { try { pe.task.cancel(); } catch (e) {} pe.task = null; }\r\n    if (pe.rendered) {\r\n      pe.base.width = 1; pe.base.height = 1;\r\n      pe.over.width = 1; pe.over.height = 1;\r\n      pe.rendered = false;\r\n    }\r\n  }\r\n\r\n  \/\/ \u65e2\u5b58\u306e\u30da\u30fc\u30b8\u756a\u53f7\u3089\u3057\u3044\u6587\u5b57\uff08\u77ed\u3044\u6570\u5b57\u30fb\u30cf\u30a4\u30d5\u30f3\u3060\u3051\u306e\u6587\u5b57\u5217\uff09\r\n  const OLD_NUMBER_RE = \/^[-\u2010\u2011\u2013\u2014\u2212\u30fc\uff70\\s]*[0-9\uff10-\uff19]{0,4}[-\u2010\u2011\u2013\u2014\u2212\u30fc\uff70\\s]*$\/;\r\n\r\n  \/\/ \u3059\u3067\u306b\u5165\u3063\u3066\u3044\u308b\u30da\u30fc\u30b8\u756a\u53f7\u306e\u7bc4\u56f2\u3092\u63a2\u3059\uff08PDF\u306e\u5ea7\u6a19\u3067\u8fd4\u3059\uff09\r\n  \/\/ \u6761\u4ef6\uff1a\u8868\u793a\u3055\u308c\u308b\u5411\u304d\u3067\u898b\u3066\u3001\u4e0b\u7aef10%\u4ee5\u5185\u3067\u3001\u5de6\u53f3\u306e\u4e2d\u592e\uff08\u00b18%\uff09\u306b\u3042\u308b\u3001\u77ed\u3044\u6570\u5b57\u30fb\u30cf\u30a4\u30d5\u30f3\u306e\u6587\u5b57\r\n  async function findOldNumberBoxes(item, pageIndex) {\r\n    if (!item.oldBoxes) item.oldBoxes = [];\r\n    if (item.oldBoxes[pageIndex]) return item.oldBoxes[pageIndex];\r\n\r\n    const page = await item.pdf.getPage(pageIndex + 1);\r\n    const vp = page.getViewport({ scale: 1 });\r\n    const tc = await page.getTextContent();\r\n    const boxes = [];\r\n    tc.items.forEach(function (it) {\r\n      if (!it.str || !it.transform) return;\r\n      const t = it.str.trim();\r\n      if (!t || t.length > 8 || !OLD_NUMBER_RE.test(t)) return;\r\n\r\n      const tr = it.transform;\r\n      const lenA = Math.hypot(tr[0], tr[1]) || 1;    \/\/ \u6587\u5b57\u306e\u9032\u3080\u5411\u304d\r\n      const lenC = Math.hypot(tr[2], tr[3]) || 1;    \/\/ \u6587\u5b57\u306e\u4e0a\u5411\u304d\r\n      const h = it.height || lenC;\r\n      const w = it.width || 0;\r\n      const ux = tr[0] \/ lenA, uy = tr[1] \/ lenA;\r\n      const vx = tr[2] \/ lenC, vy = tr[3] \/ lenC;\r\n      const pad = h * 0.3;\r\n      const xs = [], ys = [];\r\n      [[-pad, -0.25 * h - pad], [w + pad, -0.25 * h - pad], [w + pad, 0.9 * h + pad], [-pad, 0.9 * h + pad]].forEach(function (c) {\r\n        xs.push(tr[4] + ux * c[0] + vx * c[1]);\r\n        ys.push(tr[5] + uy * c[0] + vy * c[1]);\r\n      });\r\n      const box = [Math.min.apply(null, xs), Math.min.apply(null, ys), Math.max.apply(null, xs), Math.max.apply(null, ys)];\r\n\r\n      const c = vp.convertToViewportPoint((box[0] + box[2]) \/ 2, (box[1] + box[3]) \/ 2);\r\n      if (c[1] > vp.height * 0.90 && Math.abs(c[0] - vp.width \/ 2) < vp.width * 0.08) boxes.push(box);\r\n    });\r\n    item.oldBoxes[pageIndex] = boxes;\r\n    return boxes;\r\n  }\r\n\r\n  \/\/ \u65b0\u3057\u3044\u756a\u53f7\u306e\u307e\u308f\u308a\u3092\u5857\u308b\u7bc4\u56f2\uff08\u6587\u5b57\u306e\u5927\u304d\u3055\u306b\u5bfe\u3059\u308b\u6bd4\u7387\uff09\r\n  const COVER_PAD_X = 0.6;\r\n  const COVER_BELOW = 0.35;\r\n  const COVER_ABOVE = 0.95;\r\n\r\n  \/\/ \u30da\u30fc\u30b8\u756a\u53f7\u3092\u91cd\u306d\u3066\u8868\u793a\uff08\u51fa\u529b\u3068\u540c\u3058\u4f4d\u7f6e\u30fb\u5927\u304d\u3055\uff09\r\n  async function drawOverlay(item, pe, o) {\r\n    const myTok = ++pe.drawTok;\r\n    const range = computeRange(item, o);\r\n    const page = pe.index + 1;\r\n    const inRange = !range.error && page >= range.start && page <= range.end;\r\n\r\n    \/\/ \u80cc\u666f\u8272\u3092\u6307\u5b9a\u3057\u305f\u3068\u304d\u306f\u3001\u65e2\u5b58\u306e\u756a\u53f7\u306e\u7bc4\u56f2\u3082\u5857\u308b\r\n    let oldBoxes = [];\r\n    if (inRange && o.bg) {\r\n      try { oldBoxes = await findOldNumberBoxes(item, pe.index); } catch (err) { oldBoxes = []; }\r\n    }\r\n    if (myTok !== pe.drawTok || !pe.rendered) return;   \/\/ \u65b0\u3057\u3044\u63cf\u753b\u304c\u59cb\u307e\u3063\u305f\u3001\u307e\u305f\u306f\u63cf\u753b\u304c\u89e3\u653e\u3055\u308c\u305f\r\n\r\n    const ctx = pe.over.getContext('2d');\r\n    ctx.clearRect(0, 0, pe.over.width, pe.over.height);\r\n    if (!inRange) return;\r\n\r\n    const sz = item.sizes[pe.index];\r\n    const k = pe.over.width \/ sz.w;           \/\/ pt \u2192 canvas px\r\n    const size = numberSize(item, pe.index, o);\r\n    const text = PAGE_FORMAT.replace('*', String(page));\r\n    ctx.font = (size * k) + 'px Helvetica, Arial, \"Liberation Sans\", sans-serif';\r\n    const baseY = pe.over.height - size * BOTTOM_RATIO * k;\r\n    const tw = ctx.measureText(text).width;\r\n\r\n    if (o.bg) {\r\n      ctx.fillStyle = 'rgb(' + o.bg.r + ',' + o.bg.g + ',' + o.bg.b + ')';\r\n      oldBoxes.forEach(function (b) {\r\n        const r = pe.vp.convertToViewportRectangle(b);\r\n        ctx.fillRect(Math.min(r[0], r[2]), Math.min(r[1], r[3]), Math.abs(r[2] - r[0]), Math.abs(r[3] - r[1]));\r\n      });\r\n      const padX = size * COVER_PAD_X * k;\r\n      ctx.fillRect(pe.over.width \/ 2 - tw \/ 2 - padX, baseY - size * COVER_ABOVE * k,\r\n        tw + padX * 2, size * (COVER_ABOVE + COVER_BELOW) * k);\r\n    }\r\n\r\n    ctx.fillStyle = '#000';\r\n    ctx.textAlign = 'center';\r\n    ctx.textBaseline = 'alphabetic';\r\n    ctx.fillText(text, pe.over.width \/ 2, baseY);\r\n  }\r\n\r\n  function updateCaption(item, pe, o) {\r\n    const range = computeRange(item, o);\r\n    const page = pe.index + 1;\r\n    if (range.error || page < range.start || page > range.end) {\r\n      pe.cap.textContent = page + ' \/ ' + item.numPages + '\u3000\u756a\u53f7\u306a\u3057';\r\n    } else {\r\n      pe.cap.textContent = page + ' \/ ' + item.numPages + '\u3000' + PAGE_FORMAT.replace('*', String(page));\r\n    }\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\r\n  \/\/ ====================================\r\n\r\n  async function downloadItems(list) {\r\n    const o = readOptions();\r\n    const queue = [];\r\n    let failed = 0;\r\n    for (const item of list) {\r\n      if (item.error || !item.buf) continue;\r\n      const range = computeRange(item, o);\r\n      if (range.error) continue;\r\n      try {\r\n        const bytes = await buildPdf(item, o, range);\r\n        const baseName = item.file.name.replace(\/\\.[^.]+$\/, '');\r\n        queue.push({ blob: new Blob([bytes], { type: 'application\/pdf' }), filename: baseName + o.suffix + '.pdf' });\r\n      } catch (err) {\r\n        failed++;\r\n        console.error('\u66f8\u304d\u51fa\u3057\u30a8\u30e9\u30fc:', err);\r\n        if (item.card) {\r\n          item.card.info.innerHTML += '<br><span style=\"color:#e74c3c;\">\u274c \u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6697\u53f7\u5316\u3055\u308c\u305fPDF\u306f\u3001\u975e\u5bfe\u5fdc\u3067\u3059<\/span>';\r\n        }\r\n      }\r\n    }\r\n    if (failed > 0) showMessage(failed + '\u500b\u306ePDF\u306f\u3001\u66f8\u304d\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f', false);\r\n    if (queue.length === 0) {\r\n      if (failed === 0) showMessage('\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308bPDF\u304c\u3042\u308a\u307e\u305b\u3093', false);\r\n      return;\r\n    }\r\n    sequentialDownload(queue, 0, function () {\r\n      showMessage(queue.length + '\u500b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3057\u305f', true);\r\n    });\r\n  }\r\n\r\n  \/\/ \u30da\u30fc\u30b8\u756a\u53f7\u3092\u66f8\u304d\u8fbc\u3093\u3060PDF\u3092\u4f5c\u308b\r\n  async function buildPdf(item, o, range) {\r\n    const doc = await PDFLib.PDFDocument.load(item.buf, { updateMetadata: false });\r\n    const font = await doc.embedFont(PDFLib.StandardFonts.Helvetica);\r\n    const pages = doc.getPages();\r\n\r\n    for (let p = range.start; p <= range.end; p++) {\r\n      const page = pages[p - 1];\r\n      const size = numberSize(item, p - 1, o);\r\n      const text = PAGE_FORMAT.replace('*', String(p));\r\n\r\n      \/\/ \u8868\u793a\u3055\u308c\u308b\u5411\u304d\u3067\u898b\u305f\u3001\u30da\u30fc\u30b8\u306e\u5927\u304d\u3055\uff08\u30c8\u30ea\u30df\u30f3\u30b0\u67a0\u3068\u56de\u8ee2\u3092\u8003\u616e\uff09\r\n      const box = page.getCropBox();\r\n      const angle = ((page.getRotation().angle % 360) + 360) % 360;\r\n      const W = box.width;\r\n      const H = box.height;\r\n      const vw = (angle === 90 || angle === 270) ? H : W;\r\n\r\n      \/\/ \u8868\u793a\u3055\u308c\u308b\u5411\u304d\u3067\u306e\u3001\u6587\u5b57\u306e\u958b\u59cb\u4f4d\u7f6e\uff08\u5de6\u4e0b\u304c\u539f\u70b9\uff09\r\n      const tw = font.widthOfTextAtSize(text, size);\r\n      const vx = vw \/ 2 - tw \/ 2;\r\n      const vy = size * BOTTOM_RATIO;\r\n\r\n      \/\/ \u8868\u793a\u3055\u308c\u308b\u5411\u304d\u306e\u5ea7\u6a19\uff08\u5de6\u4e0b\u304c\u539f\u70b9\uff09\u2192 PDF\u306e\u5ea7\u6a19\r\n      const toPdf = function (px, py) {\r\n        if (angle === 90) return { x: box.x + W - py, y: box.y + px };\r\n        if (angle === 180) return { x: box.x + W - px, y: box.y + H - py };\r\n        if (angle === 270) return { x: box.x + py, y: box.y + H - px };\r\n        return { x: box.x + px, y: box.y + py };\r\n      };\r\n\r\n      \/\/ \u80cc\u666f\u8272\u3092\u6307\u5b9a\u3057\u305f\u3068\u304d\u306f\u3001\u5148\u306b\u80cc\u666f\u3092\u5857\u308b\uff08\u65e2\u5b58\u306e\u756a\u53f7\u306e\u7bc4\u56f2 \uff0b \u65b0\u3057\u3044\u756a\u53f7\u306e\u307e\u308f\u308a\uff09\r\n      if (o.bg) {\r\n        const rects = (await findOldNumberBoxes(item, p - 1)).slice();\r\n        const a = toPdf(vx - size * COVER_PAD_X, vy - size * COVER_BELOW);\r\n        const b = toPdf(vx + tw + size * COVER_PAD_X, vy + size * COVER_ABOVE);\r\n        rects.push([Math.min(a.x, b.x), Math.min(a.y, b.y), Math.max(a.x, b.x), Math.max(a.y, b.y)]);\r\n        rects.forEach(function (r) {\r\n          page.drawRectangle({\r\n            x: r[0], y: r[1], width: r[2] - r[0], height: r[3] - r[1],\r\n            color: PDFLib.rgb(o.bg.r \/ 255, o.bg.g \/ 255, o.bg.b \/ 255),\r\n            borderWidth: 0\r\n          });\r\n        });\r\n      }\r\n\r\n      const pos = toPdf(vx, vy);\r\n      page.drawText(text, {\r\n        x: pos.x,\r\n        y: pos.y,\r\n        size: size,\r\n        font: font,\r\n        color: PDFLib.rgb(0, 0, 0),\r\n        rotate: PDFLib.degrees(angle)\r\n      });\r\n    }\r\n    return await doc.save();\r\n  }\r\n\r\n  \/\/ \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30921\u4ef6\u305a\u3064\u9593\u9694\u3092\u3042\u3051\u3066\u5b9f\u884c\uff08\u30d6\u30e9\u30a6\u30b6\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5236\u9650\u56de\u907f\uff09\r\n  function sequentialDownload(queue, index, callback) {\r\n    if (index >= queue.length) {\r\n      if (callback) callback();\r\n      return;\r\n    }\r\n    downloadBlob(queue[index].blob, queue[index].filename);\r\n    setTimeout(function () {\r\n      sequentialDownload(queue, index + 1, callback);\r\n    }, 300);\r\n  }\r\n\r\n  function downloadBlob(blob, filename) {\r\n    const url = URL.createObjectURL(blob);\r\n    const a = document.createElement('a');\r\n    a.href = url;\r\n    a.download = filename;\r\n    document.body.appendChild(a);\r\n    a.click();\r\n    document.body.removeChild(a);\r\n    setTimeout(function () { URL.revokeObjectURL(url); }, 1000);\r\n  }\r\n\r\n\r\n  \/\/ ====================================\r\n  \/\/ \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\r\n  \/\/ ====================================\r\n\r\n  function isPdfFile(file) {\r\n    return file.type === 'application\/pdf' || \/\\.pdf$\/i.test(file.name);\r\n  }\r\n\r\n  function escapeHtml(str) {\r\n    return str.replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;').replace(\/\"\/g, '&quot;');\r\n  }\r\n\r\n  function showMessage(msg, isSuccess) {\r\n    if (!encodedMessage) return;\r\n\r\n    const cls = isSuccess ? 'is-primary' : 'is-caution';\r\n    const icon = isSuccess ? 'ma-check_circle' : 'ma-error';\r\n    const color = isSuccess ? 'primary' : 'error';\r\n\r\n    encodedMessage.innerHTML =\r\n      '<p class=\"alert is-ghosted ' + cls + ' mt-0.5r\">' +\r\n      '<i class=\"icon mas ' + icon + ' c-' + color + ' mr-0.5r\"><\/i>' +\r\n      '<span>' + msg + '<\/span><\/p>';\r\n\r\n    setTimeout(function () {\r\n      encodedMessage.innerHTML = '';\r\n    }, 3000);\r\n  }\r\n});\r\n<\/script>","protected":false},"excerpt":{"rendered":"PDF\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0&#038;\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3060\u3051\u3067\u3001\u30da\u30fc\u30b8\u306e\u4e0b\u4e2d\u592e\u306b\u300c-1-\u300d\u5f62\u5f0f\u306e\u30da\u30fc\u30b8\u756a\u53f7\u3092\u8ffd\u52a0\u3002\r\n\u6587\u5b57\u306e\u5927\u304d\u3055\u306f\u300c\u672c\u6587\u306e\u25cb%\u300d\u3067\u6307\u5b9a\u3059\u308b\u306e\u3067\u3001PDF\u306e\u30b5\u30a4\u30ba\u304c\u5909\u308f\u3063\u3066\u3082\u3001\u8a2d\u5b9a\u3057\u76f4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30d7\u30ec\u30d3\u30e5\u30fc\u3067\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/page-converter.php","meta":{"_acf_changed":false,"footnotes":""},"categories":[11,16],"tags":[],"group":[],"pg":[],"class_list":["post-15963","page","type-page","status-publish","category-textedit","category-tool"],"acf":[],"_links":{"self":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/15963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/comments?post=15963"}],"version-history":[{"count":6,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/15963\/revisions"}],"predecessor-version":[{"id":15969,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/15963\/revisions\/15969"}],"wp:attachment":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media?parent=15963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/categories?post=15963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/tags?post=15963"},{"taxonomy":"group","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/group?post=15963"},{"taxonomy":"pg","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pg?post=15963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}