{"id":4036,"date":"2025-02-15T10:12:49","date_gmt":"2025-02-15T01:12:49","guid":{"rendered":"https:\/\/ubun2m.com\/?p=4036"},"modified":"2025-02-15T11:55:51","modified_gmt":"2025-02-15T02:55:51","slug":"%ef%bc%91%ef%bc%90%ef%bc%90%e3%81%be%e3%81%99%e8%a8%88%e7%ae%97%e4%bd%9c%e6%88%90%e3%83%84%e3%83%bc%e3%83%ab","status":"publish","type":"post","link":"https:\/\/ubun2m.com\/?p=4036","title":{"rendered":"\uff11\uff10\uff10\u307e\u3059\u8a08\u7b97\u4f5c\u6210\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"ja\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>\uff11\uff10\uff10\u307e\u3059\u8a08\u7b97 PDF \u751f\u6210\u30c4\u30fc\u30eb<\/title>\n  <style>\n\n    .container {\n      max-width: 600px;\n      margin: 0 auto;\n    }\n    .intro {\n      margin-bottom: 20px;\n\n    }\n    .options label {\n      display: block;\n      margin-bottom: 5px;\n    }\n    .max-option {\n      margin-left: 20px;\n      display: none;\n    }\n  <\/style>\n<\/head>\n<body>\n  <div class=\"container\">\n    <!-- \u5c0e\u5165\u30fb\u8aac\u660e\u6587\uff08PDF\u306b\u306f\u51fa\u529b\u3057\u306a\u3044\uff09 -->\n    <div class=\"intro\">\n      <p>\n         \u3053\u308c\u306f\u5b50\u3069\u3082\u305f\u3061\u304c\u904a\u3073\u306a\u304c\u3089\u8a08\u7b97\u529b\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\uff11\uff10\uff10\u307e\u3059\u8a08\u7b97\u306e\u554f\u984c\u3092\u4f5c\u6210\u3059\u308b\u30c4\u30fc\u30eb\u3067\u3059\u3002\n        \u9ad8\u9f62\u8005\u306e\u65b9\u304c\u8a08\u7b97\u306b\u30c1\u30e3\u30ec\u30f3\u30b8\u3059\u308b\u3053\u3068\u3067\u3001\u8133\u306e\u6d3b\u6027\u5316\u30fb\u8a8d\u77e5\u6a5f\u80fd\u306e\u7dad\u6301\u306b\u3082\u5bc4\u4e0e\u3057\u307e\u3059\u3002\n        \u3054\u5bb6\u5ead\u3001\u5b66\u6821\u3001\u4ecb\u8b77\u65bd\u8a2d\u306a\u3069\u3067\u304a\u5f79\u7acb\u3066\u304f\u3060\u3055\u3044\u3002\n      <\/p>\n      <p>\n        \u3010\u4f7f\u3044\u65b9\u3011<br>\n        \u30fb\u8a08\u7b97\u7a2e\u985e\uff08\u8db3\u3057\u7b97\u3001\u5f15\u304d\u7b97\u3001\u639b\u3051\u7b97\uff09\u304a\u3088\u3073\u3001\u5de6\u5074\u30fb\u4e0a\u5074\u306e\u6570\u5b57\uff08\uff11\u6841\u307e\u305f\u306f\uff12\u6841\uff09\u3092\u8a2d\u5b9a\u3002<br>\n        \u30fb\uff12\u6841\u306e\u5834\u5408\u3001\u5404\u9805\u76ee\u3067\u6700\u5927\u5024\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 99\uff09\u3092\u5165\u529b\u3002<br>\n        \u30fb\u30da\u30fc\u30b8\u6570\u306f\u3001\u51fa\u529b\u3059\u308b\u8a08\u7b97\u30b7\u30fc\u30c8\u306e\u679a\u6570\u3092\u6307\u5b9a\u3002<br>\n        \u30fb\u300cPDF\u3092\u751f\u6210\u3059\u308b\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u8a08\u7b97\u30b7\u30fc\u30c8\u304cPDF\u51fa\u529b\u3055\u308c\u307e\u3059\u3002\n      <\/p>\n    <\/div>\n<hr>\n    \n    <!-- \u30aa\u30d7\u30b7\u30e7\u30f3\u8a2d\u5b9a -->\n    <div class=\"options\">\n      <label>\u8a08\u7b97\u7a2e\u985e:\n        <select id=\"operation\">\n          <option value=\"+\">\u8db3\u3057\u7b97 (+)<\/option>\n          <option value=\"-\">\u5f15\u304d\u7b97 (\u30fc)<\/option>\n          <option value=\"*\">\u639b\u3051\u7b97 (\u00d7)<\/option>\n        <\/select>\n      <\/label>\n      <label>\u5de6\u5074\u306e\u6570\u5b57\uff08\u6841\uff09:\n        <select id=\"leftDigits\">\n          <option value=\"1\" selected>\uff11\u6841<\/option>\n          <option value=\"2\">\uff12\u6841<\/option>\n        <\/select>\n        <span class=\"max-option\" id=\"leftMaxOption\">\n          \u6700\u5927\u5024:\n          <input type=\"number\" id=\"leftMaxValue\" value=\"99\" min=\"10\">\n        <\/span>\n      <\/label>\n      <label>\u4e0a\u5074\u306e\u6570\u5b57\uff08\u6841\uff09:\n        <select id=\"topDigits\">\n          <option value=\"1\" selected>\uff11\u6841<\/option>\n          <option value=\"2\">\uff12\u6841<\/option>\n        <\/select>\n        <span class=\"max-option\" id=\"topMaxOption\">\n          \u6700\u5927\u5024:\n          <input type=\"number\" id=\"topMaxValue\" value=\"99\" min=\"10\">\n        <\/span>\n      <\/label>\n      <label>\u8a08\u7b97\u30b7\u30fc\u30c8\u306e\u30da\u30fc\u30b8\u6570:\n        <input type=\"number\" id=\"pageCount\" value=\"1\" min=\"1\">\n      <\/label>\n      <button id=\"generatePDFBtn\" style=\"margin-top:10px;\">PDF\u3092\u751f\u6210\u3059\u308b<\/button>\n    <\/div>\n  <\/div>\n  \n  <!-- jsPDF \u3068 AutoTable \u30d7\u30e9\u30b0\u30a4\u30f3 -->\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf-autotable\/3.5.25\/jspdf.plugin.autotable.min.js\"><\/script>\n  \n  <script>\n    \/\/ 2\u6841\u9078\u629e\u6642\u306e\u6700\u5927\u5024\u5165\u529b\u6b04\u8868\u793a\u5236\u5fa1\n    function updateMaxOptions() {\n      document.getElementById('leftMaxOption').style.display =\n        document.getElementById('leftDigits').value === '2' ? 'inline' : 'none';\n      document.getElementById('topMaxOption').style.display =\n        document.getElementById('topDigits').value === '2' ? 'inline' : 'none';\n    }\n    document.getElementById('leftDigits').addEventListener('change', updateMaxOptions);\n    document.getElementById('topDigits').addEventListener('change', updateMaxOptions);\n    updateMaxOptions();\n    \n    \/\/ \u30e6\u30cb\u30fc\u30af\u306a\u4e71\u6570\u3092 count \u500b\u751f\u6210\uff08min\uff5emax \u306e\u7bc4\u56f2\uff09\n    function getUniqueNumbers(count, min, max) {\n      const arr = [];\n      for (let i = min; i <= max; i++) {\n        arr.push(i);\n      }\n      if (arr.length < count) return null;\n      for (let i = arr.length - 1; i > 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        [arr[i], arr[j]] = [arr[j], arr[i]];\n      }\n      return arr.slice(0, count);\n    }\n    \n    \/\/ \u6f14\u7b97\u5b50\u8a18\u53f7\u5909\u63db\uff08\u3059\u3079\u3066\u6587\u5b57\u5217\u306b\u5909\u63db\uff09\n    function operationSymbol(op) {\n      if (op === '+') return '+';\n      if (op === '-') return '-';\n      if (op === '*') return '\u00d7';\n      return String(op);\n    }\n    \n    \/\/ \u8868\u30c7\u30fc\u30bf\u751f\u6210\uff1a\u30d8\u30c3\u30c0\u30fc\uff08\u6f14\u7b97\u5b50\uff0b\u4e0a\u5074\u306e\u6570\u5b57\uff09\u3068\u5404\u884c\uff08\u5de6\u5074\u306e\u6570\u5b57\uff0b\u7a7a\u30bb\u30eb10\u500b\uff09\n    function generateTableData(operation, leftDigits, topDigits, leftMax, topMax) {\n      const leftMin = (leftDigits === 1) ? 0 : 10;\n      const topMin  = (topDigits  === 1) ? 0 : 10;\n      \n      const topNumbers = getUniqueNumbers(10, topMin, topMax);\n      if (!topNumbers) {\n        alert(\"\u4e0a\u5074\u306e\u6570\u5b57\u306e\u7bc4\u56f2\u304c\u72ed\u3059\u304e\u307e\u3059\u3002\");\n        return null;\n      }\n      \n      let leftNumbers;\n      if (operation === '-') {\n        const reqMin = Math.max(...topNumbers);\n        leftNumbers = getUniqueNumbers(10, Math.max(leftMin, reqMin), leftMax);\n      } else {\n        leftNumbers = getUniqueNumbers(10, leftMin, leftMax);\n      }\n      if (!leftNumbers) {\n        alert(\"\u5de6\u5074\u306e\u6570\u5b57\u306e\u7bc4\u56f2\u304c\u72ed\u3059\u304e\u307e\u3059\u3002\");\n        return null;\n      }\n      \n      \/\/ \u30d8\u30c3\u30c0\u30fc\uff1a\u5148\u982d\u30bb\u30eb\u306b\u6f14\u7b97\u5b50\u3001\u4ee5\u964d\u306b\u4e0a\u5074\u306e\u6570\u5b57\uff08\u3059\u3079\u3066\u6587\u5b57\u5217\u306b\u5909\u63db\uff09\n      const header = [operationSymbol(operation), ...topNumbers.map(String)];\n      \n      \/\/ \u5404\u884c\uff1a\u5148\u982d\u30bb\u30eb\u306b\u5de6\u5074\u306e\u6570\u5b57\uff08\u6587\u5b57\u5217\u5316\uff09\u3001\u6b8b\u308a\u306f\u7a7a\u6587\u5b57\u5217\n      const body = leftNumbers.map(num => {\n        const row = [String(num)];\n        for (let i = 0; i < 10; i++) {\n          row.push(\"\");\n        }\n        return row;\n      });\n      \n      return { header, body };\n    }\n    \n    \/\/ PDF\u751f\u6210\u51e6\u7406\n    function generatePDF() {\n      const operation = document.getElementById('operation').value;\n      const leftDigits = parseInt(document.getElementById('leftDigits').value, 10);\n      const topDigits  = parseInt(document.getElementById('topDigits').value, 10);\n      const leftMax = (leftDigits === 2) ? parseInt(document.getElementById('leftMaxValue').value, 10) : 9;\n      const topMax  = (topDigits  === 2) ? parseInt(document.getElementById('topMaxValue').value, 10)  : 9;\n      const pageCount = parseInt(document.getElementById('pageCount').value, 10);\n      \n      const { jsPDF } = window.jspdf;\n      const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n      \n      \/\/ --- \u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u306e\u767b\u9332 ---\n      \/\/ \u203b\"BASE64_ENCODED_FONT_DATA_HERE\" \u306e\u90e8\u5206\u306b\u65e5\u672c\u8a9e\u5bfe\u5fdc\u30d5\u30a9\u30f3\u30c8\u306eBase64\u6587\u5b57\u5217\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n      const fontData = \"BASE64_ENCODED_FONT_DATA_HERE\";\n      doc.addFileToVFS(\"NotoSansCJKjp-Regular.ttf\", fontData);\n      doc.addFont(\"NotoSansCJKjp-Regular.ttf\", \"NotoSansCJKjp\", \"normal\");\n      doc.setFont(\"NotoSansCJKjp\");\n      \n      \/\/ PDF\u306e\u4e0a\u4e0b\u4f59\u767d\uff1a\u4e0a10mm\u3001\u4e0b10mm\u3002A4\u306e\u9ad8\u3055297mm \u2192 \u4f7f\u7528\u53ef\u80fd\u9ad8\u3055277mm\n      const marginTop = 10;\n      const marginBottom = 10;\n      const availableHeight = 297 - marginTop - marginBottom;\n      const rowHeight = availableHeight \/ 11;  \/\/ \u30d8\u30c3\u30c0\u30fc\uff0b10\u884c\n      \n      \/\/ \u30d8\u30c3\u30c0\u30fc\u3082\u542b\u3081\u305f\u30bb\u30eb\u67a0\u304c\u5fc5\u305a\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b headStyles \u306b lineColor \u3068 lineWidth \u3092\u8ffd\u52a0\n      const tableOptions = {\n        startY: marginTop,\n        margin: { top: marginTop, bottom: marginBottom },\n        styles: { \n          halign: 'center', \n          valign: 'middle',\n          fontSize: 10,\n          minCellHeight: rowHeight,\n          cellPadding: 0,\n          lineColor: [0, 0, 0]\n        },\n        headStyles: { \n          fillColor: [255, 255, 255],\n          textColor: [0, 0, 0],\n          lineColor: [0, 0, 0],\n          lineWidth: 0.1\n        },\n        theme: 'grid',\n        tableWidth: 'auto',\n        showHead: 'everyPage'\n      };\n      \n      \/\/ \u5404\u8a08\u7b97\u30b7\u30fc\u30c8\u30da\u30fc\u30b8\u3092\u500b\u5225\u306b\u751f\u6210\uff08\u5404\u30da\u30fc\u30b8\u3067\u4e71\u6570\u306b\u3088\u308a\u5225\u306e\u554f\u984c\uff09\n      for (let p = 0; p < pageCount; p++) {\n        const tableData = generateTableData(operation, leftDigits, topDigits, leftMax, topMax);\n        if (!tableData) return;\n        if (p > 0) {\n          doc.addPage();\n        }\n        doc.autoTable({\n          head: [tableData.header],\n          body: tableData.body,\n          ...tableOptions\n        });\n      }\n      \n      doc.save('100mas_calculations.pdf');\n    }\n    \n    document.getElementById('generatePDFBtn').addEventListener('click', generatePDF);\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<p>\u3000<\/p>\n\n\n\n<div class=\"affiliate-box\"><div class=\"affiliate-containar\"><a href=\"https:\/\/amzn.to\/4gHZIbv\" rel=\"nofollow\"><img decoding=\"async\" style=\"border: none;\" src=\"https:\/\/m.media-amazon.com\/images\/I\/61bKwYDbtpL._SY522_.jpg\" target=\"_blank\"><\/a><div class=\"affiliate-content\"><a href=\"https:\/\/amzn.to\/4gHZIbv\" rel=\"nofollow\">\u5c0f3\u307e\u3067\u306b\u80b2\u3066\u305f\u3044\u7b97\u6570\u8133<\/a><ul class=\"affiliate-button\"><li><a href=\"https:\/\/amzn.to\/4gHZIbv\" rel=\"nofollow\">Amazon<\/a><\/li><\/ul><\/div><\/div><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uff11\uff10\uff10\u307e\u3059\u8a08\u7b97 PDF \u751f\u6210\u30c4\u30fc\u30eb \u3053\u308c\u306f\u5b50\u3069\u3082\u305f\u3061\u304c\u904a\u3073\u306a\u304c\u3089\u8a08\u7b97\u529b\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\uff11\uff10\uff10\u307e\u3059\u8a08\u7b97\u306e\u554f\u984c\u3092\u4f5c\u6210\u3059\u308b\u30c4\u30fc\u30eb\u3067\u3059\u3002 \u9ad8\u9f62\u8005\u306e\u65b9\u304c\u8a08\u7b97\u306b\u30c1\u30e3\u30ec\u30f3\u30b8\u3059\u308b\u3053\u3068\u3067\u3001\u8133\u306e\u6d3b\u6027\u5316\u30fb\u8a8d\u77e5\u6a5f\u80fd\u306e\u7dad\u6301\u306b\u3082\u5bc4\u4e0e\u3057\u307e\u3059\u3002 \u3054\u5bb6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4050,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[],"class_list":["post-4036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-22"],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/ubun2m.com\/wp-content\/uploads\/2025\/02\/20250215icon-1.webp","_links":{"self":[{"href":"https:\/\/ubun2m.com\/index.php?rest_route=\/wp\/v2\/posts\/4036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ubun2m.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ubun2m.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ubun2m.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ubun2m.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4036"}],"version-history":[{"count":0,"href":"https:\/\/ubun2m.com\/index.php?rest_route=\/wp\/v2\/posts\/4036\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ubun2m.com\/index.php?rest_route=\/wp\/v2\/media\/4050"}],"wp:attachment":[{"href":"https:\/\/ubun2m.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ubun2m.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ubun2m.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}