{"id":73,"date":"2026-01-13T10:03:07","date_gmt":"2026-01-13T10:03:07","guid":{"rendered":"https:\/\/buildtoprintwelding.com\/?page_id=73"},"modified":"2026-04-04T03:36:26","modified_gmt":"2026-04-04T03:36:26","slug":"home","status":"publish","type":"page","link":"https:\/\/buildtoprintwelding.com\/ja\/","title":{"rendered":"Home"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Paper Tube Quote Calculator<\/title>\n  <style>\n    body {\n      font-family: Arial, sans-serif;\n      margin: 0;\n      padding: 24px;\n      background: #f7f7f9;\n      color: #222;\n    }\n    .container {\n      max-width: 1100px;\n      margin: 0 auto;\n      background: #fff;\n      padding: 24px;\n      border-radius: 12px;\n      box-shadow: 0 6px 24px rgba(0,0,0,0.08);\n    }\n    h1 {\n      margin-top: 0;\n      font-size: 28px;\n    }\n    h2 {\n      margin-top: 28px;\n      font-size: 20px;\n      border-bottom: 1px solid #eee;\n      padding-bottom: 8px;\n    }\n    .grid {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(260px, 1fr));\n      gap: 16px;\n    }\n    .field {\n      display: flex;\n      flex-direction: column;\n      gap: 6px;\n    }\n    label {\n      font-weight: 600;\n      font-size: 14px;\n    }\n    input, select {\n      padding: 10px 12px;\n      border: 1px solid #ccc;\n      border-radius: 8px;\n      font-size: 14px;\n    }\n    .checkbox-group {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(160px, 1fr));\n      gap: 8px;\n      margin-top: 4px;\n    }\n    .checkbox-item {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      padding: 8px 10px;\n      border: 1px solid #e5e5e5;\n      border-radius: 8px;\n      background: #fafafa;\n    }\n    button {\n      margin-top: 24px;\n      padding: 12px 18px;\n      border: none;\n      border-radius: 8px;\n      background: #111827;\n      color: #fff;\n      font-size: 15px;\n      cursor: pointer;\n    }\n    button:hover {\n      background: #1f2937;\n    }\n    .result {\n      margin-top: 28px;\n      padding: 18px;\n      background: #f9fafb;\n      border: 1px solid #e5e7eb;\n      border-radius: 10px;\n    }\n    .result h3 {\n      margin-top: 0;\n    }\n    .summary {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(240px, 1fr));\n      gap: 12px;\n      margin-bottom: 18px;\n    }\n    .card {\n      background: #fff;\n      border: 1px solid #e5e7eb;\n      border-radius: 10px;\n      padding: 14px;\n    }\n    .big {\n      font-size: 24px;\n      font-weight: 700;\n      color: #111827;\n    }\n    .small {\n      color: #6b7280;\n      font-size: 13px;\n    }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      margin-top: 12px;\n      background: #fff;\n    }\n    th, td {\n      text-align: left;\n      padding: 10px;\n      border-bottom: 1px solid #eee;\n      font-size: 14px;\n    }\n    th {\n      background: #f3f4f6;\n    }\n    .error {\n      color: #b91c1c;\n      font-weight: 600;\n      margin-top: 12px;\n    }\n    @media (max-width: 768px) {\n      .grid, .summary, .checkbox-group {\n        grid-template-columns: 1fr;\n      }\n    }\n  <\/style>\n<\/head>\n<body>\n  <div class=\"container\">\n    <h1>Paper Tube Quote Calculator<\/h1>\n\n    <div class=\"grid\">\n      <div class=\"field\">\n        <label for=\"diameterMm\">Diameter (mm)<\/label>\n        <input type=\"number\" id=\"diameterMm\" value=\"90\" min=\"1\" \/>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"heightMm\">Height (mm)<\/label>\n        <input type=\"number\" id=\"heightMm\" value=\"200\" min=\"1\" \/>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"quantity\">Quantity (pcs)<\/label>\n        <input type=\"number\" id=\"quantity\" value=\"3000\" min=\"1\" \/>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"materialType\">Material Type<\/label>\n        <select id=\"materialType\">\n          <option value=\"singleWhiteOrPureKraft\">Single White \/ Pure Kraft<\/option>\n          <option value=\"ivoryBoard\" selected>Ivory Board<\/option>\n          <option value=\"blackBoard\">Black Board<\/option>\n          <option value=\"aluminumFoilInner\">Aluminum Foil Inner<\/option>\n          <option value=\"specialtyPaper\">Specialty Paper<\/option>\n        <\/select>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"sheetPreference\">Sheet Type<\/label>\n        <select id=\"sheetPreference\">\n          <option value=\"standard\" selected>Standard Sheet<\/option>\n          <option value=\"large\">Large Sheet<\/option>\n          <option value=\"auto\">Auto Select<\/option>\n        <\/select>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"laminationType\">Lamination<\/label>\n        <select id=\"laminationType\">\n          <option value=\"\">No Lamination<\/option>\n          <option value=\"matte\">Matte Lamination<\/option>\n          <option value=\"gloss\">Gloss Lamination<\/option>\n          <option value=\"antiScratch\">Anti-Scratch Lamination<\/option>\n          <option value=\"softTouch\">Soft-Touch Lamination<\/option>\n        <\/select>\n      <\/div>\n    <\/div>\n\n    <h2>Finishing Options<\/h2>\n    <div class=\"checkbox-group\">\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"hotStamping\" class=\"finishing\" \/>\n        Hot Stamping\n      <\/label>\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"spotUV\" class=\"finishing\" \/>\n        Spot UV\n      <\/label>\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"otherFinishing\" class=\"finishing\" \/>\n        Other Finishing\n      <\/label>\n    <\/div>\n\n    <h2>Accessories<\/h2>\n    <div class=\"checkbox-group\">\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"tinplateLid\" class=\"accessory\" \/>\n        Tinplate Lid\n      <\/label>\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"easyOpenEnd\" class=\"accessory\" \/>\n        Easy Open End\n      <\/label>\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"ribbonHandle\" class=\"accessory\" \/>\n        Ribbon Handle\n      <\/label>\n      <label class=\"checkbox-item\">\n        <input type=\"checkbox\" value=\"ropeHandle\" class=\"accessory\" \/>\n        Rope Handle\n      <\/label>\n    <\/div>\n\n    <button id=\"calculateBtn\">Calculate Quote<\/button>\n    <div id=\"error\" class=\"error\"><\/div>\n    <div id=\"result\" class=\"result\" style=\"display:none;\"><\/div>\n  <\/div>\n\n  <script>\n    const FX = {\n      CNY_PER_USD: 6.8929\n    };\n\n    const MATERIAL_WEIGHT_GSM = 2200;\n    const PI = 3.14;\n\n    const MATERIALS_CNY_PER_TON = {\n      singleWhiteOrPureKraft: 3800,\n      ivoryBoard: 6800,\n      blackBoard: 8500,\n      aluminumFoilInner: 7800,\n      specialtyPaper: 8500\n    };\n\n    const MATERIAL_LABELS = {\n      singleWhiteOrPureKraft: \"Single White \/ Pure Kraft\",\n      ivoryBoard: \"Ivory Board\",\n      blackBoard: \"Black Board\",\n      aluminumFoilInner: \"Aluminum Foil Inner\",\n      specialtyPaper: \"Specialty Paper\"\n    };\n\n    const SHEETS = {\n      standard: {\n        key: \"standard\",\n        name: \"Standard Sheet\",\n        widthMm: 787,\n        lengthMm: 1092\n      },\n      large: {\n        key: \"large\",\n        name: \"Large Sheet\",\n        widthMm: 889,\n        lengthMm: 1194\n      }\n    };\n\n    const LAMINATION_CNY_PER_SHEET = {\n      standard: {\n        matte: 0.55,\n        gloss: 0.55,\n        antiScratch: 1.1,\n        softTouch: 1.1\n      },\n      large: {\n        matte: 0.68,\n        gloss: 0.68,\n        antiScratch: 1.36,\n        softTouch: 1.36\n      }\n    };\n\n    const LAMINATION_LABELS = {\n      matte: \"Matte Lamination\",\n      gloss: \"Gloss Lamination\",\n      antiScratch: \"Anti-Scratch Lamination\",\n      softTouch: \"Soft-Touch Lamination\"\n    };\n\n    const FINISHING_CNY_PER_SHEET = {\n      hotStamping: 0.2,\n      spotUV: 0.2,\n      otherFinishing: 0.2\n    };\n\n    const FINISHING_LABELS = {\n      hotStamping: \"Hot Stamping\",\n      spotUV: \"Spot UV\",\n      otherFinishing: \"Other Finishing\"\n    };\n\n    const ACCESSORY_LABELS = {\n      tinplateLid: \"Tinplate Lid\",\n      easyOpenEnd: \"Easy Open End\",\n      ribbonHandle: \"Ribbon Handle\",\n      ropeHandle: \"Rope Handle\"\n    };\n\n    const SETUP_CNY = {\n      printingStartup: 600,\n      fourColorPrinting: 300,\n      hotStampingStartup: 200,\n      spotUVStartup: 200,\n      otherFinishingStartup: 200,\n      laminationStartup: 100,\n      dieCutting: 100,\n      dieTool: 100,\n      shipping: 50,\n      outerCarton: 900\n    };\n\n    const ACCESSORY_CNY_PER_PIECE = 0.3;\n\n    function round2(value) {\n      return Math.round((value + Number.EPSILON) * 100) \/ 100;\n    }\n\n    function cnyToUsd(cny) {\n      return cny \/ FX.CNY_PER_USD;\n    }\n\n    function formatUSD(amount) {\n      return new Intl.NumberFormat(\"en-US\", {\n        style: \"currency\",\n        currency: \"USD\"\n      }).format(amount);\n    }\n\n    function getOtherChargesCny(quantity) {\n      if (quantity <= 1000) return 1200;\n      if (quantity <= 2000) return 800;\n      if (quantity <= 5000) return 600;\n      return 0;\n    }\n\n    function getLaborCnyPerUnit(diameterMm, heightMm) {\n      if (diameterMm <= 90 || heightMm <= 250) return 1.5;\n      if (diameterMm > 90 && diameterMm <= 150) return 2.1;\n      if (diameterMm > 150 && diameterMm <= 220) return 3.8;\n      return 5.8;\n    }\n\n    function getFlatSizeMm(diameterMm, heightMm) {\n      return {\n        flatWidthMm: diameterMm * PI,\n        flatLengthMm: (heightMm + 20) + diameterMm\n      };\n    }\n\n    function getSheetLayout(sheet, flatWidthMm, flatLengthMm) {\n      const colsNormal = Math.floor(sheet.widthMm \/ flatWidthMm);\n      const rowsNormal = Math.floor(sheet.lengthMm \/ flatLengthMm);\n      const yieldNormal = colsNormal * rowsNormal;\n\n      const colsRotated = Math.floor(sheet.widthMm \/ flatLengthMm);\n      const rowsRotated = Math.floor(sheet.lengthMm \/ flatWidthMm);\n      const yieldRotated = colsRotated * rowsRotated;\n\n      if (yieldNormal >= yieldRotated) {\n        return {\n          sheetKey: sheet.key,\n          sheetName: sheet.name,\n          sheetSizeMm: `${sheet.widthMm} x ${sheet.lengthMm}`,\n          orientation: \"Normal\",\n          across: colsNormal,\n          down: rowsNormal,\n          yield: yieldNormal\n        };\n      }\n\n      return {\n        sheetKey: sheet.key,\n        sheetName: sheet.name,\n        sheetSizeMm: `${sheet.widthMm} x ${sheet.lengthMm}`,\n        orientation: \"Rotated\",\n        across: colsRotated,\n        down: rowsRotated,\n        yield: yieldRotated\n      };\n    }\n\n    function selectSheetLayout(diameterMm, heightMm, sheetPreference = \"standard\") {\n      const { flatWidthMm, flatLengthMm } = getFlatSizeMm(diameterMm, heightMm);\n\n      const standardLayout = getSheetLayout(SHEETS.standard, flatWidthMm, flatLengthMm);\n      const largeLayout = getSheetLayout(SHEETS.large, flatWidthMm, flatLengthMm);\n\n      let selected;\n      if (sheetPreference === \"large\") {\n        selected = largeLayout;\n      } else if (sheetPreference === \"auto\") {\n        selected = largeLayout.yield > standardLayout.yield ? largeLayout : standardLayout;\n      } else {\n        selected = standardLayout;\n      }\n\n      return {\n        flatWidthMm,\n        flatLengthMm,\n        standardLayout,\n        largeLayout,\n        selectedLayout: selected\n      };\n    }\n\n    function calculateTubeQuote({\n      diameterMm,\n      heightMm,\n      quantity,\n      materialType,\n      sheetPreference = \"standard\",\n      laminationType = \"\",\n      finishings = [],\n      accessories = []\n    }) {\n      if (!diameterMm || diameterMm <= 0) throw new Error(\"Diameter must be greater than 0.\");\n      if (!heightMm || heightMm <= 0) throw new Error(\"Height must be greater than 0.\");\n      if (!quantity || quantity <= 0) throw new Error(\"Quantity must be greater than 0.\");\n\n      const diameterM = diameterMm \/ 1000;\n      const heightM = heightMm \/ 1000;\n      const materialTonPriceCny = MATERIALS_CNY_PER_TON[materialType];\n\n      const materialCostCnyPerUnit =\n        (diameterM * PI * (heightM + 0.04) * MATERIAL_WEIGHT_GSM * materialTonPriceCny) \/ 1000000;\n\n      const layoutInfo = selectSheetLayout(diameterMm, heightMm, sheetPreference);\n      const selectedLayout = layoutInfo.selectedLayout;\n\n      if (selectedLayout.yield <= 0) {\n        throw new Error(\"The expanded size does not fit on the selected sheet.\");\n      }\n\n      const sheetCount = Math.ceil(quantity \/ selectedLayout.yield);\n\n      const paperCostCny = sheetCount * 0.9;\n\n      let laminationCostCny = 0;\n      if (laminationType) {\n        laminationCostCny =\n          sheetCount * LAMINATION_CNY_PER_SHEET[selectedLayout.sheetKey][laminationType];\n      }\n\n      let finishingCostCny = 0;\n      finishings.forEach(finishing => {\n        finishingCostCny += sheetCount * FINISHING_CNY_PER_SHEET[finishing];\n      });\n\n      let setupCostCny =\n        SETUP_CNY.printingStartup +\n        SETUP_CNY.fourColorPrinting +\n        SETUP_CNY.dieCutting +\n        SETUP_CNY.dieTool +\n        SETUP_CNY.shipping +\n        SETUP_CNY.outerCarton +\n        getOtherChargesCny(quantity);\n\n      if (laminationType) setupCostCny += SETUP_CNY.laminationStartup;\n      if (finishings.includes(\"hotStamping\")) setupCostCny += SETUP_CNY.hotStampingStartup;\n      if (finishings.includes(\"spotUV\")) setupCostCny += SETUP_CNY.spotUVStartup;\n      if (finishings.includes(\"otherFinishing\")) setupCostCny += SETUP_CNY.otherFinishingStartup;\n\n      const laborCnyPerUnit = getLaborCnyPerUnit(diameterMm, heightMm);\n\n      const accessoryCnyPerUnit = accessories.length > 0\n        ? accessories.length * ACCESSORY_CNY_PER_PIECE\n        : 0;\n\n      const sharedOrderCostCny =\n        paperCostCny + laminationCostCny + finishingCostCny + setupCostCny;\n\n      const sharedOrderCostCnyPerUnit = sharedOrderCostCny \/ quantity;\n\n      const unitPriceCny =\n        materialCostCnyPerUnit +\n        sharedOrderCostCnyPerUnit +\n        laborCnyPerUnit +\n        accessoryCnyPerUnit;\n\n      const totalOrderCostCny = unitPriceCny * quantity;\n\n      return {\n        layoutInfo,\n        sheetCount,\n        costsCny: {\n          materialCostPerUnit: round2(materialCostCnyPerUnit),\n          paperCostTotal: round2(paperCostCny),\n          laminationCostTotal: round2(laminationCostCny),\n          finishingCostTotal: round2(finishingCostCny),\n          setupCostTotal: round2(setupCostCny),\n          sharedOrderCostPerUnit: round2(sharedOrderCostCnyPerUnit),\n          laborCostPerUnit: round2(laborCnyPerUnit),\n          accessoryCostPerUnit: round2(accessoryCnyPerUnit),\n          unitPrice: round2(unitPriceCny),\n          totalOrderCost: round2(totalOrderCostCny)\n        },\n        costsUsd: {\n          materialCostPerUnit: round2(cnyToUsd(materialCostCnyPerUnit)),\n          paperCostTotal: round2(cnyToUsd(paperCostCny)),\n          laminationCostTotal: round2(cnyToUsd(laminationCostCny)),\n          finishingCostTotal: round2(cnyToUsd(finishingCostCny)),\n          setupCostTotal: round2(cnyToUsd(setupCostCny)),\n          sharedOrderCostPerUnit: round2(cnyToUsd(sharedOrderCostCnyPerUnit)),\n          laborCostPerUnit: round2(cnyToUsd(laborCnyPerUnit)),\n          accessoryCostPerUnit: round2(cnyToUsd(accessoryCnyPerUnit)),\n          unitPrice: round2(cnyToUsd(unitPriceCny)),\n          totalOrderCost: round2(cnyToUsd(totalOrderCostCny))\n        }\n      };\n    }\n\n    function getCheckedValues(selector) {\n      return [...document.querySelectorAll(selector + \":checked\")].map(el => el.value);\n    }\n\n    function renderResult(input, result) {\n      const selected = result.layoutInfo.selectedLayout;\n      const flatW = round2(result.layoutInfo.flatWidthMm);\n      const flatL = round2(result.layoutInfo.flatLengthMm);\n\n      const finishingNames = input.finishings.length\n        ? input.finishings.map(x => FINISHING_LABELS[x]).join(\", \")\n        : \"None\";\n\n      const accessoryNames = input.accessories.length\n        ? input.accessories.map(x => ACCESSORY_LABELS[x]).join(\", \")\n        : \"None\";\n\n      const laminationName = input.laminationType\n        ? LAMINATION_LABELS[input.laminationType]\n        : \"None\";\n\n      const html = `\n        <h3>Quote Result<\/h3>\n\n        <div class=\"summary\">\n          <div class=\"card\">\n            <div class=\"small\">Unit Price<\/div>\n            <div class=\"big\">${formatUSD(result.costsUsd.unitPrice)}<\/div>\n          <\/div>\n          <div class=\"card\">\n            <div class=\"small\">Total Order Cost<\/div>\n            <div class=\"big\">${formatUSD(result.costsUsd.totalOrderCost)}<\/div>\n          <\/div>\n        <\/div>\n\n        <table>\n          <tr><th colspan=\"2\">Input Summary<\/th><\/tr>\n          <tr><td>Diameter<\/td><td>${input.diameterMm} mm<\/td><\/tr>\n          <tr><td>Height<\/td><td>${input.heightMm} mm<\/td><\/tr>\n          <tr><td>Quantity<\/td><td>${input.quantity} pcs<\/td><\/tr>\n          <tr><td>Material<\/td><td>${MATERIAL_LABELS[input.materialType]}<\/td><\/tr>\n          <tr><td>Lamination<\/td><td>${laminationName}<\/td><\/tr>\n          <tr><td>Finishing<\/td><td>${finishingNames}<\/td><\/tr>\n          <tr><td>Accessories<\/td><td>${accessoryNames}<\/td><\/tr>\n        <\/table>\n\n        <table>\n          <tr><th colspan=\"2\">Layout<\/th><\/tr>\n          <tr><td>Expanded Size<\/td><td>${flatW} mm \u00d7 ${flatL} mm<\/td><\/tr>\n          <tr><td>Selected Sheet<\/td><td>${selected.sheetName} (${selected.sheetSizeMm})<\/td><\/tr>\n          <tr><td>Orientation<\/td><td>${selected.orientation}<\/td><\/tr>\n          <tr><td>Arrangement<\/td><td>${selected.across} \u00d7 ${selected.down}<\/td><\/tr>\n          <tr><td>Yield per Sheet<\/td><td>${selected.yield}<\/td><\/tr>\n          <tr><td>Sheet Count<\/td><td>${result.sheetCount}<\/td><\/tr>\n        <\/table>\n\n        <table>\n          <tr>\n            <th>Cost Item<\/th>\n            <th>CNY<\/th>\n            <th>USD<\/th>\n          <\/tr>\n          <tr>\n            <td>Material Cost \/ Unit<\/td>\n            <td>${result.costsCny.materialCostPerUnit}<\/td>\n            <td>${formatUSD(result.costsUsd.materialCostPerUnit)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Paper Cost \/ Total<\/td>\n            <td>${result.costsCny.paperCostTotal}<\/td>\n            <td>${formatUSD(result.costsUsd.paperCostTotal)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Lamination Cost \/ Total<\/td>\n            <td>${result.costsCny.laminationCostTotal}<\/td>\n            <td>${formatUSD(result.costsUsd.laminationCostTotal)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Finishing Cost \/ Total<\/td>\n            <td>${result.costsCny.finishingCostTotal}<\/td>\n            <td>${formatUSD(result.costsUsd.finishingCostTotal)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Setup Cost \/ Total<\/td>\n            <td>${result.costsCny.setupCostTotal}<\/td>\n            <td>${formatUSD(result.costsUsd.setupCostTotal)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Shared Order Cost \/ Unit<\/td>\n            <td>${result.costsCny.sharedOrderCostPerUnit}<\/td>\n            <td>${formatUSD(result.costsUsd.sharedOrderCostPerUnit)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Labor Cost \/ Unit<\/td>\n            <td>${result.costsCny.laborCostPerUnit}<\/td>\n            <td>${formatUSD(result.costsUsd.laborCostPerUnit)}<\/td>\n          <\/tr>\n          <tr>\n            <td>Accessory Cost \/ Unit<\/td>\n            <td>${result.costsCny.accessoryCostPerUnit}<\/td>\n            <td>${formatUSD(result.costsUsd.accessoryCostPerUnit)}<\/td>\n          <\/tr>\n          <tr>\n            <th>Final Unit Price<\/th>\n            <th>${result.costsCny.unitPrice}<\/th>\n            <th>${formatUSD(result.costsUsd.unitPrice)}<\/th>\n          <\/tr>\n          <tr>\n            <th>Total Order Cost<\/th>\n            <th>${result.costsCny.totalOrderCost}<\/th>\n            <th>${formatUSD(result.costsUsd.totalOrderCost)}<\/th>\n          <\/tr>\n        <\/table>\n      `;\n\n      const resultBox = document.getElementById(\"result\");\n      resultBox.style.display = \"block\";\n      resultBox.innerHTML = html;\n    }\n\n    function calculateAndRender() {\n      const errorBox = document.getElementById(\"error\");\n      const resultBox = document.getElementById(\"result\");\n      errorBox.textContent = \"\";\n\n      try {\n        const input = {\n          diameterMm: Number(document.getElementById(\"diameterMm\").value),\n          heightMm: Number(document.getElementById(\"heightMm\").value),\n          quantity: Number(document.getElementById(\"quantity\").value),\n          materialType: document.getElementById(\"materialType\").value,\n          sheetPreference: document.getElementById(\"sheetPreference\").value,\n          laminationType: document.getElementById(\"laminationType\").value,\n          finishings: getCheckedValues(\".finishing\"),\n          accessories: getCheckedValues(\".accessory\")\n        };\n\n        const result = calculateTubeQuote(input);\n        renderResult(input, result);\n      } catch (err) {\n        resultBox.style.display = \"none\";\n        errorBox.textContent = err.message || \"Calculation failed.\";\n      }\n    }\n\n    document.getElementById(\"calculateBtn\").addEventListener(\"click\", calculateAndRender);\n\n    \/\/ Auto calculate on first load\n    calculateAndRender();\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Paper Tube Quote Calculator Paper Tube Quote Calculator Diameter (mm) Height (mm) Quantity (pcs) Material Type Single White \/ Pure KraftIvory BoardBlack BoardAluminum Foil InnerSpecialty Paper Sheet Type Standard SheetLarge SheetAuto Select Lamination No LaminationMatte LaminationGloss LaminationAnti-Scratch LaminationSoft-Touch Lamination Finishing Options Hot Stamping Spot UV Other Finishing Accessories Tinplate Lid Easy Open End Ribbon Handle Rope Handle Calculate Quote<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_gspb_post_css":"","footnotes":""},"class_list":["post-73","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/pages\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/comments?post=73"}],"version-history":[{"count":5,"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/pages\/73\/revisions"}],"predecessor-version":[{"id":271,"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/pages\/73\/revisions\/271"}],"wp:attachment":[{"href":"https:\/\/buildtoprintwelding.com\/ja\/wp-json\/wp\/v2\/media?parent=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}