{"title":"Individuell bedruckte Aufsteller","description":"\u003c!-- VIS24 – BEDRUCKTE AUFSTELLER | COLLECTION INTRO --\u003e\n\n\u003cdiv class=\"dark-section vis24-aufsteller-collection\"\u003e\n\n  \u003ch2 class=\"vis24\"\u003e\n    Aufsteller nach Maß für Theke, Verkaufsfläche und Event\n  \u003c\/h2\u003e\n\n  \u003cp class=\"vis24-aufsteller-subline\"\u003e\n    \u003cstrong\u003eVom kleinen Tischaufsteller bis zum lebensgroßen Figurenaufsteller.\u003c\/strong\u003e\n  \u003c\/p\u003e\n\n  \u003cdiv class=\"vis24-aufsteller-grid\"\u003e\n\n    \u003cdiv\u003e\n      \u003ch3\u003eTischaufsteller und Bodenaufsteller\u003c\/h3\u003e\n      \u003cp class=\"p1\"\u003e\n        Ein kleiner \u003cstrong\u003eTisch- oder Thekenaufsteller\u003c\/strong\u003e bringt\n        Preise, Produktinfos oder QR-Codes direkt dorthin, wo Kunden sie\n        brauchen. Größere \u003cstrong\u003eBodenaufsteller\u003c\/strong\u003e eignen sich für\n        Aktionen im Laden, als Blickfang im Eingangsbereich oder als\n        lebensgroße Figur auf Messen und Events.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv\u003e\n      \u003ch3\u003eIhr Motiv auf festem Plattenmaterial\u003c\/h3\u003e\n      \u003cp class=\"p1\"\u003e\n        Wir bedrucken feste Platten nach Ihren Vorgaben.\n        \u003cstrong\u003eAcrylglas\u003c\/strong\u003e eignet sich für Aufsteller mit Glasoptik,\n        \u003cstrong\u003eReboard\u003c\/strong\u003e als leichter Wabenkarton für größere\n        Formate. \u003cstrong\u003eEasyprint\u003c\/strong\u003e ist eine weitere Plattenoption.\n        Welches Material passt, hängt von Format und Einsatzort ab.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"vis24-aufsteller-grid vis24-aufsteller-service\"\u003e\n\n    \u003cdiv\u003e\n      \u003ch3\u003eRechteckig oder nach Motivkontur\u003c\/h3\u003e\n      \u003cp class=\"p1\"\u003e\n        Ihr Aufsteller kann rechteckig bleiben oder der\n        \u003cstrong\u003eKontur eines Logos, Produkts oder Fotos\u003c\/strong\u003e folgen.\n        Für den freistehenden Einsatz stimmen wir die Standlösung auf\n        Größe, Form und Material ab.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv\u003e\n      \u003ch3\u003eAufsteller konfigurieren oder anfragen\u003c\/h3\u003e\n      \u003cp class=\"p1\"\u003e\n        Ihren \u003ca href=\"\/products\/acrylglas-aufsteller-bedruckt\"\u003e\u003cstrong\u003eAcrylglasaufsteller\u003c\/strong\u003e\u003c\/a\u003e\n        können Sie online nach Maß konfigurieren. Für größere Formate\n        und Sonderformen schicken Sie uns Motiv, Wunschgröße, Stückzahl\n        und Einsatzort.\n        \u003ca href=\"mailto:vertrieb@vis24.de?subject=Anfrage%20bedruckte%20Aufsteller\"\u003e\u003cstrong\u003eAufsteller anfragen →\u003c\/strong\u003e\u003c\/a\u003e\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  .vis24-aufsteller-collection {\n    max-width: 1400px;\n    margin: 0 auto;\n  }\n\n  .vis24-aufsteller-collection h2 {\n    margin: 0 0 6px;\n  }\n\n  .vis24-aufsteller-collection .vis24-aufsteller-subline {\n    font-size: 18px;\n    margin: 0 0 22px;\n  }\n\n  .vis24-aufsteller-collection .vis24-aufsteller-grid {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 45px;\n  }\n\n  .vis24-aufsteller-collection .vis24-aufsteller-service {\n    margin-top: 20px;\n    padding-top: 20px;\n    border-top: 1px solid rgba(255, 255, 255, 0.18);\n  }\n\n  .vis24-aufsteller-collection .vis24-aufsteller-grid h3 {\n    margin: 0 0 8px;\n  }\n\n  .vis24-aufsteller-collection .vis24-aufsteller-grid p {\n    margin: 0;\n  }\n\n  .vis24-aufsteller-collection a {\n    color: inherit;\n    text-decoration: underline;\n  }\n\n  @media (max-width: 750px) {\n    .vis24-aufsteller-collection .vis24-aufsteller-subline {\n      font-size: 16px;\n      margin-bottom: 18px;\n    }\n\n    .vis24-aufsteller-collection .vis24-aufsteller-grid {\n      grid-template-columns: minmax(0, 1fr);\n      gap: 18px;\n    }\n\n    .vis24-aufsteller-collection .vis24-aufsteller-service {\n      margin-top: 18px;\n      padding-top: 18px;\n    }\n\n    .vis24-aufsteller-collection .vis24-aufsteller-grid h3 {\n      margin-bottom: 6px;\n    }\n  }\n\u003c\/style\u003e","products":[{"product_id":"acrylglas-aufsteller-bedruckt","title":"Acrylglas L-Aufsteller nach Maß bedruckt","description":"\u003cstyle\u003e\n\/* ==========================================================\n   VIS24 – ACRYLGLAS L-AUFSTELLER\n   PDF DRUCKVORLAGE V2.4\n   MOBILE + DESKTOP EASIFY INTEGRATION\n   ========================================================== *\/\n\n#vis24-template-generator {\n  margin: 20px 0;\n  width: 100%;\n}\n\n#vis24-template-generator .vis-template-box {\n  padding: 18px;\n  border: 1px solid #e5e5e5;\n  border-radius: 12px;\n  background: #fafafa;\n}\n\n#vis24-template-generator .vis-template-format {\n  margin-bottom: 16px;\n  font-size: 15px;\n  color: #555;\n}\n\n#vis24-template-generator .vis-template-format strong {\n  color: #222;\n  display: block;\n  margin-top: 5px;\n  font-size: 17px;\n}\n\n#vis24-template-generator .vis-template-button {\n  background: linear-gradient(90deg, #ff5a00, #e6007e);\n  color: #fff;\n  border: none;\n  border-radius: 999px;\n  padding: 13px 26px;\n  font-weight: 700;\n  cursor: pointer;\n  width: 100%;\n  transition: opacity 0.2s ease;\n}\n\n#vis24-template-generator .vis-template-button:hover {\n  opacity: 0.9;\n}\n\n#vis24-template-generator .vis-template-button:disabled {\n  opacity: 0.45;\n  cursor: not-allowed;\n}\n\n#vis24-template-generator .vis-template-note {\n  font-size: 13px;\n  color: #777;\n  margin-top: 12px;\n  line-height: 1.5;\n}\n\n#vis24-template-generator .vis-template-status {\n  font-size: 13px;\n  color: #666;\n  margin-bottom: 12px;\n}\n\n#vis24-template-generator .vis-template-freiform {\n  display: none;\n  margin-top: 14px;\n  padding: 12px 14px;\n  border: 1px solid #ffb3b3;\n  border-left: 4px solid #e60000;\n  border-radius: 8px;\n  background: #fff5f5;\n  color: #333;\n  font-size: 13px;\n  line-height: 1.6;\n}\n\n#vis24-template-generator .vis-template-freiform strong {\n  color: #d00000;\n}\n\n#vis24-template-generator .cc-accordion-item__title {\n  cursor: pointer;\n}\n\u003c\/style\u003e\n\n\u003c!-- ==========================================================\n     VIS24 L-AUFSTELLER PDF GENERATOR\n     ========================================================== --\u003e\n\n\u003cdiv id=\"vis24-template-generator\"\u003e\n\n  \u003cdetails class=\"cc-accordion-item\" open\u003e\n\n    \u003csummary class=\"cc-accordion-item__title\" style=\"margin:0;padding:0.75rem 0;\"\u003e\n      \u003ch3 style=\"margin:0;font-size:1.25rem;\"\u003e\n        PDF-Vorlage erstellen\n      \u003c\/h3\u003e\n    \u003c\/summary\u003e\n\n    \u003cdiv class=\"cc-accordion-item__panel\"\u003e\n\n      \u003cdiv class=\"vis-template-box\"\u003e\n\n        \u003cdiv class=\"vis-template-format\"\u003e\n          Aktuelles Format:\n          \u003cstrong id=\"vis24-template-size\"\u003e\n            Bitte Breite und Höhe oben im Produktkonfigurator eingeben.\n          \u003c\/strong\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"vis-template-status\" id=\"vis24-template-status\" aria-live=\"polite\"\u003e\n          Die Maße werden automatisch aus dem Produktkonfigurator übernommen.\n        \u003c\/div\u003e\n\n        \u003cbutton type=\"button\" class=\"vis-template-button\" id=\"vis24-template-download\" disabled\u003e\n          PDF-Vorlage herunterladen\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"vis-template-freiform\" id=\"vis24-template-freiform\"\u003e\n          \u003cstrong\u003eWICHTIG – FREIFORM-KONTURSCHNITT\u003c\/strong\u003e\n\n          \u003cbr\u003e\n\n          Ihre individuelle Form kann innerhalb der angegebenen\n          Breite und Höhe gestaltet werden.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          Die Schnittkontur muss als geschlossener Vektorpfad\n          mit einer eigenen Volltonfarbe (Sonderfarbe)\n          angelegt werden.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          \u003cstrong\u003e\n            Diese Sonderfarbe darf im Druckmotiv nicht vorkommen.\n          \u003c\/strong\u003e\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          \u003cstrong\u003eHinweis zur Standfläche:\u003c\/strong\u003e\n          Der L-Aufsteller wird aus einer Acrylglasplatte gebogen.\n          Bitte berücksichtigen Sie, dass die untere Standfläche\n          von VIS24 bei der Produktion vorgesehen wird.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          Weitere Hinweise finden Sie in der PDF-Vorlage.\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"vis-template-note\"\u003e\n\n          Die PDF-Druckvorlage wird im Originalformat erstellt\n          und enthält 3 mm Beschnitt sowie 3 mm Sicherheitsabstand.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          \u003cstrong\u003eHinweis zum L-Aufsteller:\u003c\/strong\u003e\n          Die zusätzliche Standfläche wird von VIS24\n          bei der Produktion berücksichtigt.\n\n          \u003cbr\u003e\n\n          Die angegebenen Maße beziehen sich auf die\n          gestaltbare Vorderseite des Aufstellers.\n\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/details\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- ==========================================================\n     PDF LIBRARY\n     ========================================================== --\u003e\n\n\u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"\u003e\u003c\/script\u003e\n\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  \/* ==========================================================\n     VIS24 PDF GENERATOR V2.4\n     L-AUFSTELLER\n     MOBILE + DESKTOP\n     NO DOM MOVING\n     NO MUTATION OBSERVER\n     ========================================================== *\/\n\n  const MIN_SIZE = 20;\n  const MAX_SIZE = 400;\n\n  const BLEED = 3;\n  const SAFETY = 3;\n\n  const CHECK_INTERVAL = 500;\n\n  let initialized = false;\n\n  function initVIS24Template() {\n\n    if (initialized) return;\n\n    const generator =\n      document.getElementById(\"vis24-template-generator\");\n\n    const sizeDisplay =\n      document.getElementById(\"vis24-template-size\");\n\n    const statusDisplay =\n      document.getElementById(\"vis24-template-status\");\n\n    const downloadButton =\n      document.getElementById(\"vis24-template-download\");\n\n    const freiformNotice =\n      document.getElementById(\"vis24-template-freiform\");\n\n    if (\n      !generator ||\n      !sizeDisplay ||\n      !statusDisplay ||\n      !downloadButton ||\n      !freiformNotice\n    ) {\n      return;\n    }\n\n    initialized = true;\n\n    \/* ==========================================================\n       VISIBILITY CHECK\n       ========================================================== *\/\n\n    function isVisible(element) {\n\n      if (!element) return false;\n\n      if (element.getClientRects().length === 0) {\n        return false;\n      }\n\n      let current = element;\n\n      while (current \u0026\u0026 current.nodeType === 1) {\n\n        const style = window.getComputedStyle(current);\n\n        if (\n          style.display === \"none\" ||\n          style.visibility === \"hidden\"\n        ) {\n          return false;\n        }\n\n        current = current.parentElement;\n      }\n\n      return true;\n    }\n\n    \/* ==========================================================\n       NUMBER PARSER\n       ========================================================== *\/\n\n    function parseDimension(value) {\n\n      if (typeof value !== \"string\") {\n        return NaN;\n      }\n\n      const normalized =\n        value.trim().replace(\",\", \".\");\n\n      if (normalized === \"\") {\n        return NaN;\n      }\n\n      return Number(normalized);\n    }\n\n    \/* ==========================================================\n       FIND ACTIVE EASIFY DIMENSION FIELDS\n       MOBILE + DESKTOP V2.4\n       ========================================================== *\/\n\n    function getDimensions() {\n\n      const widthFields =\n        document.querySelectorAll(\n          'input[data-tpo-dimension=\"x\"]'\n        );\n\n      const heightFields =\n        document.querySelectorAll(\n          'input[data-tpo-dimension=\"y\"]'\n        );\n\n      const candidates = [];\n\n      for (const widthField of widthFields) {\n\n        const widthName =\n          widthField.getAttribute(\"name\") || \"\";\n\n        const heightName =\n          widthName.replace(\n            \/-Breite\\]$\/,\n            \"-Höhe]\"\n          );\n\n        const width =\n          parseDimension(widthField.value);\n\n        for (const heightField of heightFields) {\n\n          if (\n            heightField.getAttribute(\"name\") !== heightName\n          ) {\n            continue;\n          }\n\n          const height =\n            parseDimension(heightField.value);\n\n          candidates.push({\n            width: width,\n            height: height,\n            visible:\n              isVisible(widthField) \u0026\u0026\n              isVisible(heightField)\n          });\n\n        }\n      }\n\n      \/* ========================================================\n         PRIORITY 1\n         VALID + VISIBLE FIELDS\n         ======================================================== *\/\n\n      const active = candidates.find(function (item) {\n        return item.visible \u0026\u0026 validDimensions(item);\n      });\n\n      if (active) {\n        return active;\n      }\n\n      \/* ========================================================\n         PRIORITY 2\n         MOBILE FALLBACK\n         ======================================================== *\/\n\n      const fallback = candidates.find(function (item) {\n        return validDimensions(item);\n      });\n\n      if (fallback) {\n        return fallback;\n      }\n\n      \/* ========================================================\n         PRIORITY 3\n         STATUS MESSAGE\n         ======================================================== *\/\n\n      return candidates.find(function (item) {\n        return item.visible;\n      }) || candidates[0] || null;\n    }\n\n    \/* ==========================================================\n       VALIDATE DIMENSIONS\n       ========================================================== *\/\n\n    function validDimensions(dimensions) {\n\n      if (!dimensions) {\n        return false;\n      }\n\n      const width = dimensions.width;\n      const height = dimensions.height;\n\n      return (\n        Number.isFinite(width) \u0026\u0026\n        Number.isFinite(height) \u0026\u0026\n        width \u003e= MIN_SIZE \u0026\u0026\n        width \u003c= MAX_SIZE \u0026\u0026\n        height \u003e= MIN_SIZE \u0026\u0026\n        height \u003c= MAX_SIZE\n      );\n    }\n\n    \/* ==========================================================\n       DETECT EASIFY FREIFORM SELECTION\n       ========================================================== *\/\n\n    function isFreiformSelected() {\n\n      const inputs = document.querySelectorAll(\n        'input[type=\"radio\"]:checked'\n      );\n\n      for (const input of inputs) {\n\n        if (!isVisible(input.parentElement)) {\n          continue;\n        }\n\n        const containers = [\n          input.closest(\"label\"),\n          input.closest(\".tpo_option-type-selection\"),\n          input.parentElement,\n          input.parentElement\n            ? input.parentElement.parentElement\n            : null\n        ];\n\n        for (const container of containers) {\n\n          if (!container) continue;\n\n          const text = (\n            (container.textContent || \"\") + \" \" +\n            (input.value || \"\")\n          ).toLowerCase();\n\n          if (\n            text.includes(\"freiform\") ||\n            text.includes(\"individueller konturschnitt\") ||\n            text.includes(\"individueller kontur\")\n          ) {\n            return true;\n          }\n        }\n      }\n\n      return false;\n    }\n\n    \/* ==========================================================\n       UPDATE DISPLAY\n       ========================================================== *\/\n\n    function updateDimensions() {\n\n      const dimensions = getDimensions();\n\n      const freiform = isFreiformSelected();\n\n      freiformNotice.style.display =\n        freiform ? \"block\" : \"none\";\n\n      if (!dimensions) {\n\n        sizeDisplay.textContent =\n          \"Bitte Breite und Höhe oben im Produktkonfigurator eingeben.\";\n\n        statusDisplay.textContent =\n          \"Wählen Sie zuerst die Acrylstärke und geben Sie Ihre Maße ein.\";\n\n        downloadButton.disabled = true;\n\n        return;\n      }\n\n      if (!validDimensions(dimensions)) {\n\n        sizeDisplay.textContent =\n          \"Bitte gültige Maße eingeben\";\n\n        statusDisplay.textContent =\n          \"Breite und Höhe müssen jeweils zwischen 20 und 400 mm liegen.\";\n\n        downloadButton.disabled = true;\n\n        return;\n      }\n\n      const width = dimensions.width;\n      const height = dimensions.height;\n\n      sizeDisplay.textContent =\n        width + \" × \" + height + \" mm\";\n\n      statusDisplay.textContent =\n        \"Die Druckvorlage kann jetzt heruntergeladen werden.\";\n\n      downloadButton.disabled = false;\n    }\n\n    \/* ==========================================================\n       CREATE PDF\n       ========================================================== *\/\n\n    function createPDF() {\n\n      const dimensions = getDimensions();\n\n      if (!validDimensions(dimensions)) {\n\n        alert(\n          \"Bitte zuerst gültige Breite und Höhe zwischen 20 und 400 mm eingeben.\"\n        );\n\n        return;\n      }\n\n      if (\n        !window.jspdf ||\n        !window.jspdf.jsPDF\n      ) {\n\n        alert(\n          \"Die PDF-Bibliothek konnte nicht geladen werden. Bitte laden Sie die Seite erneut.\"\n        );\n\n        return;\n      }\n\n      const width = dimensions.width;\n      const height = dimensions.height;\n\n      const freiform = isFreiformSelected();\n\n      const pageW = width + BLEED * 2;\n      const pageH = height + BLEED * 2;\n\n      const { jsPDF } = window.jspdf;\n\n      const pdf = new jsPDF({\n        orientation:\n          pageW \u003e pageH ? \"landscape\" : \"portrait\",\n        unit: \"mm\",\n        format: [pageW, pageH]\n      });\n\n      \/* ========================================================\n         RED – PRODUCTION FORMAT\n         ======================================================== *\/\n\n      pdf.setDrawColor(255, 0, 0);\n      pdf.setLineWidth(0.15);\n      pdf.setLineDashPattern([2, 2], 0);\n\n      const edge = 0.2;\n\n      pdf.rect(\n        edge,\n        edge,\n        pageW - edge * 2,\n        pageH - edge * 2\n      );\n\n      \/* ========================================================\n         GREEN – FINAL SIZE\n         ======================================================== *\/\n\n      pdf.setLineDashPattern([], 0);\n      pdf.setDrawColor(0, 150, 0);\n      pdf.setLineWidth(0.25);\n\n      pdf.rect(\n        BLEED,\n        BLEED,\n        width,\n        height\n      );\n\n      \/* ========================================================\n         BLUE – SAFETY AREA\n         ======================================================== *\/\n\n      pdf.setDrawColor(0, 90, 255);\n      pdf.setLineWidth(0.1);\n\n      pdf.rect(\n        BLEED + SAFETY,\n        BLEED + SAFETY,\n        width - SAFETY * 2,\n        height - SAFETY * 2\n      );\n\n      \/* ========================================================\n         DIMENSIONS\n         ======================================================== *\/\n\n      const centerX = pageW \/ 2;\n      const centerY = pageH \/ 2;\n\n      pdf.setTextColor(40, 40, 40);\n      pdf.setFontSize(18);\n      pdf.setFont(undefined, \"bold\");\n\n      pdf.text(\n        width + \" × \" + height + \" mm\",\n        centerX,\n        centerY,\n        { align: \"center\" }\n      );\n\n      \/* ========================================================\n         LEGEND\n         ======================================================== *\/\n\n      pdf.setFontSize(8);\n      pdf.setFont(undefined, \"normal\");\n\n      let legendY = centerY + 7;\n\n      pdf.setTextColor(255, 0, 0);\n\n      pdf.text(\n        \"ROT: Produktionsformat inkl. 3 mm Beschnitt\",\n        centerX,\n        legendY,\n        { align: \"center\" }\n      );\n\n      legendY += 5;\n\n      pdf.setTextColor(0, 150, 0);\n\n      pdf.text(\n        \"GRUEN: Endformat\",\n        centerX,\n        legendY,\n        { align: \"center\" }\n      );\n\n      legendY += 5;\n\n      pdf.setTextColor(0, 90, 255);\n\n      pdf.text(\n        \"BLAU: 3 mm Sicherheitsbereich\",\n        centerX,\n        legendY,\n        { align: \"center\" }\n      );\n\n      \/* ========================================================\n         FREIFORM INFORMATION PAGE\n         ======================================================== *\/\n\n      if (freiform) {\n\n        pdf.addPage(\"a4\", \"portrait\");\n\n        const left = 20;\n        const right = 190;\n\n        let y = 30;\n\n        pdf.setFont(\"helvetica\", \"bold\");\n        pdf.setFontSize(16);\n        pdf.setTextColor(210, 0, 0);\n\n        pdf.text(\n          \"WICHTIG - FREIFORM-KONTURSCHNITT\",\n          left,\n          y\n        );\n\n        y += 15;\n\n        pdf.setFont(\"helvetica\", \"normal\");\n        pdf.setFontSize(11);\n        pdf.setTextColor(40, 40, 40);\n\n        const intro = pdf.splitTextToSize(\n          \"Sie koennen Ihre individuelle Form innerhalb \" +\n          \"der angegebenen Breite und Hoehe frei gestalten. \" +\n          \"Die erste PDF-Seite zeigt das maximale Aussenformat.\",\n          right - left\n        );\n\n        pdf.text(intro, left, y);\n\n        y += intro.length * 6 + 12;\n\n        pdf.setTextColor(210, 0, 0);\n        pdf.setFont(\"helvetica\", \"bold\");\n\n        const warning = pdf.splitTextToSize(\n          \"Die Schnittkontur muss als geschlossener \" +\n          \"Vektorpfad mit einer eigenen Volltonfarbe \" +\n          \"(Sonderfarbe) angelegt werden. \" +\n          \"Diese Sonderfarbe darf im Druckmotiv \" +\n          \"nicht vorkommen.\",\n          right - left\n        );\n\n        pdf.text(warning, left, y);\n\n        y += warning.length * 6 + 12;\n\n        pdf.setTextColor(40, 40, 40);\n        pdf.setFont(\"helvetica\", \"normal\");\n\n        const additional = pdf.splitTextToSize(\n          \"Die Schnittlinie darf nicht als Bestandteil \" +\n          \"des Druckmotivs ausgegeben werden. \" +\n          \"Bitte legen Sie die Schnittkontur als \" +\n          \"separates Vektorobjekt an. \" +\n          \"Die zusaetzliche Standflaeche des \" +\n          \"L-Aufstellers wird von VIS24 bei der \" +\n          \"Produktion beruecksichtigt.\",\n          right - left\n        );\n\n        pdf.text(additional, left, y);\n      }\n\n      \/* ========================================================\n         FILENAME\n         ======================================================== *\/\n\n      const fileName =\n        \"VIS24_L-Aufsteller_\" +\n        width +\n        \"x\" +\n        height +\n        \"mm\" +\n        (freiform ? \"_Freiform\" : \"\") +\n        \".pdf\";\n\n      pdf.save(fileName);\n    }\n\n    \/* ==========================================================\n       EVENT LISTENERS\n       ========================================================== *\/\n\n    document.addEventListener(\n      \"input\",\n      function (event) {\n\n        if (\n          event.target.matches(\n            'input[data-tpo-dimension=\"x\"], input[data-tpo-dimension=\"y\"]'\n          )\n        ) {\n          updateDimensions();\n        }\n      }\n    );\n\n    document.addEventListener(\n      \"change\",\n      function () {\n        updateDimensions();\n      }\n    );\n\n    downloadButton.addEventListener(\n      \"click\",\n      createPDF\n    );\n\n    \/* ==========================================================\n       SAFE EASIFY CHECK\n       ========================================================== *\/\n\n    const intervalId = window.setInterval(\n      function () {\n\n        if (!generator.isConnected) {\n          window.clearInterval(intervalId);\n          return;\n        }\n\n        updateDimensions();\n      },\n      CHECK_INTERVAL\n    );\n\n    updateDimensions();\n  }\n\n  \/* ==========================================================\n     INITIALIZATION\n     ========================================================== *\/\n\n  if (document.readyState === \"loading\") {\n\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initVIS24Template\n    );\n\n  } else {\n\n    initVIS24Template();\n  }\n\n})();\n\u003c\/script\u003e\n\u003ch2 class=\"p1\"\u003eGebogener Acrylglas-\u003cbr\u003eL-Aufsteller für Tisch und Theke\u003c\/h2\u003e\n\u003cp\u003eDer \u003cstrong\u003eAcrylglas-L-Aufsteller\u003c\/strong\u003e wird aus einer Platte gebogen. Die abgewinkelte Unterkante bildet die Standfläche. So lassen sich Preise, QR-Codes, Logos oder kurze Hinweise direkt auf dem Tisch, an der Kasse oder am Empfang präsentieren. Wir fertigen den Aufsteller nach Maß und bedrucken ihn mit Ihrem Motiv im UV-Direktdruck.\u003c\/p\u003e\n\u003cdiv class=\"product-detail-accordion\" style=\"margin-top: 1.5rem;\"\u003e\n\u003cdiv class=\"cc-accordion\"\u003e\n\u003cdetails class=\"cc-accordion-item\"\u003e\n\u003csummary class=\"cc-accordion-item__title\"\u003e\n\u003ch3\u003eBauform und typische Einsatzbereiche\u003c\/h3\u003e\n\u003c\/summary\u003e\n\u003cdiv class=\"cc-accordion-item__panel\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eGebogene L-Form:\u003c\/strong\u003e Die Standfläche ist Teil des Aufstellers.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNach Maß:\u003c\/strong\u003e Breite und Höhe passend zur Stellfläche wählen.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFür Tisch und Theke:\u003c\/strong\u003e Ideal für Preishinweise, QR-Codes, Produktinfos und Empfangsschilder.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails class=\"cc-accordion-item\"\u003e\n\u003csummary class=\"cc-accordion-item__title\"\u003e\n\u003ch3\u003eAcrylglas, Druck und Zuschnitt\u003c\/h3\u003e\n\u003c\/summary\u003e\n\u003cdiv class=\"cc-accordion-item__panel\"\u003e\n\u003cp\u003eTransparentes Acrylglas lässt unbedruckte Bereiche klar wirken. Weißes Acrylglas bietet eine deckende Grundfläche. Auf transparentem Acrylglas kann Weißdruck ausgewählte Motivbereiche hinterlegen. Je nach Ausführung sind ein rechteckiger Zuschnitt oder eine individuelle Kontur möglich.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails class=\"cc-accordion-item\"\u003e\n\u003csummary class=\"cc-accordion-item__title\"\u003e\n\u003ch3\u003eL-Aufsteller konfigurieren\u003c\/h3\u003e\n\u003c\/summary\u003e\n\u003cdiv class=\"cc-accordion-item__panel\"\u003e\n\u003col\u003e\n\u003cli\u003eBreite und Höhe in Millimetern eingeben.\u003c\/li\u003e\n\u003cli\u003eAcrylglas, Materialstärke und Zuschnitt auswählen.\u003c\/li\u003e\n\u003cli\u003eDruckdaten hochladen.\u003c\/li\u003e\n\u003cli\u003eStückzahl festlegen.\u003cbr\u003e\n\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"VIS24","offers":[{"title":"Standard","offer_id":57547834425609,"sku":null,"price":16.28,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0516\/7949\/4302\/files\/acrylglas-aufsteller-nach-mass-bedruckt-7475456.png?v=1780314686"},{"product_id":"acrylglas-t-aufsteller-nach-mass-bedruckt","title":"Acrylglas T-Aufsteller nach Maß bedruckt","description":"\u003cstyle\u003e\n\/* ==========================================================\n   VIS24 – ACRYLGLAS T-AUFSTELLER\n   PDF DRUCKVORLAGE V2.4\n   MOBILE + DESKTOP EASIFY INTEGRATION\n   ========================================================== *\/\n\n#vis24-template-generator {\n  margin: 20px 0;\n  width: 100%;\n}\n\n#vis24-template-generator .vis-template-box {\n  padding: 18px;\n  border: 1px solid #e5e5e5;\n  border-radius: 12px;\n  background: #fafafa;\n}\n\n#vis24-template-generator .vis-template-format {\n  margin-bottom: 16px;\n  font-size: 15px;\n  color: #555;\n}\n\n#vis24-template-generator .vis-template-format strong {\n  color: #222;\n  display: block;\n  margin-top: 5px;\n  font-size: 17px;\n}\n\n#vis24-template-generator .vis-template-button {\n  background: linear-gradient(90deg, #ff5a00, #e6007e);\n  color: #fff;\n  border: none;\n  border-radius: 999px;\n  padding: 13px 26px;\n  font-weight: 700;\n  cursor: pointer;\n  width: 100%;\n  transition: opacity 0.2s ease;\n}\n\n#vis24-template-generator .vis-template-button:hover {\n  opacity: 0.9;\n}\n\n#vis24-template-generator .vis-template-button:disabled {\n  opacity: 0.45;\n  cursor: not-allowed;\n}\n\n#vis24-template-generator .vis-template-note {\n  font-size: 13px;\n  color: #777;\n  margin-top: 12px;\n  line-height: 1.5;\n}\n\n#vis24-template-generator .vis-template-status {\n  font-size: 13px;\n  color: #666;\n  margin-bottom: 12px;\n}\n\n#vis24-template-generator .vis-template-freiform {\n  display: none;\n  margin-top: 14px;\n  padding: 12px 14px;\n  border: 1px solid #ffb3b3;\n  border-left: 4px solid #e60000;\n  border-radius: 8px;\n  background: #fff5f5;\n  color: #333;\n  font-size: 13px;\n  line-height: 1.6;\n}\n\n#vis24-template-generator .vis-template-freiform strong {\n  color: #d00000;\n}\n\n#vis24-template-generator .cc-accordion-item__title {\n  cursor: pointer;\n}\n\u003c\/style\u003e\n\n\u003c!-- ==========================================================\n     VIS24 T-AUFSTELLER PDF GENERATOR\n     ========================================================== --\u003e\n\n\u003cdiv id=\"vis24-template-generator\"\u003e\n\n  \u003cdetails class=\"cc-accordion-item\" open\u003e\n\n    \u003csummary class=\"cc-accordion-item__title\" style=\"margin:0;padding:0.75rem 0;\"\u003e\n      \u003ch3 style=\"margin:0;font-size:1.25rem;\"\u003e\n        PDF-Vorlage erstellen\n      \u003c\/h3\u003e\n    \u003c\/summary\u003e\n\n    \u003cdiv class=\"cc-accordion-item__panel\"\u003e\n\n      \u003cdiv class=\"vis-template-box\"\u003e\n\n        \u003cdiv class=\"vis-template-format\"\u003e\n          Aktuelles Format:\n          \u003cstrong id=\"vis24-template-size\"\u003e\n            Bitte Breite und Höhe oben im Produktkonfigurator eingeben.\n          \u003c\/strong\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"vis-template-status\" id=\"vis24-template-status\" aria-live=\"polite\"\u003e\n          Die Maße werden automatisch aus dem Produktkonfigurator übernommen.\n        \u003c\/div\u003e\n\n        \u003cbutton type=\"button\" class=\"vis-template-button\" id=\"vis24-template-download\" disabled\u003e\n          PDF-Vorlage herunterladen\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"vis-template-freiform\" id=\"vis24-template-freiform\"\u003e\n          \u003cstrong\u003eWICHTIG – FREIFORM-KONTURSCHNITT\u003c\/strong\u003e\n\n          \u003cbr\u003e\n\n          Ihre individuelle Form kann innerhalb der angegebenen\n          Breite und Höhe gestaltet werden.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          Die Schnittkontur muss als geschlossener Vektorpfad\n          mit einer eigenen Volltonfarbe (Sonderfarbe)\n          angelegt werden.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          \u003cstrong\u003e\n            Diese Sonderfarbe darf im Druckmotiv nicht vorkommen.\n          \u003c\/strong\u003e\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          \u003cstrong\u003eHinweis zum Standfuß:\u003c\/strong\u003e\n          Die Unterkante der Acrylglasplatte muss für die\n          Aufnahme im Standfuß geeignet sein.\n          Bitte berücksichtigen Sie dies bei individuellen Konturen.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          Weitere Hinweise finden Sie in der PDF-Vorlage.\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"vis-template-note\"\u003e\n\n          Die PDF-Druckvorlage wird im Originalformat erstellt\n          und enthält 3 mm Beschnitt sowie 3 mm Sicherheitsabstand.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          \u003cstrong\u003eStandfuß:\u003c\/strong\u003e\n          Der T-Aufsteller erhält einen separat gefertigten,\n          3D-gedruckten Standfuß.\n\n          \u003cbr\u003e\n\n          Die Konstruktion des Standfußes wird von VIS24\n          passend zur gewählten Acrylglasstärke berücksichtigt.\n\n          \u003cbr\u003e\u003cbr\u003e\n\n          Die angegebenen Maße beziehen sich auf die\n          Acrylglasplatte, nicht auf den Standfuß.\n\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/details\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- ==========================================================\n     PDF LIBRARY\n     ========================================================== --\u003e\n\n\u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"\u003e\u003c\/script\u003e\n\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  \/* ==========================================================\n     VIS24 PDF GENERATOR V2.4\n     T-AUFSTELLER\n     MOBILE + DESKTOP\n     NO DOM MOVING\n     NO MUTATION OBSERVER\n     ========================================================== *\/\n\n  const MIN_SIZE = 20;\n  const MAX_SIZE = 400;\n\n  const BLEED = 3;\n  const SAFETY = 3;\n\n  const CHECK_INTERVAL = 500;\n\n  let initialized = false;\n\n  function initVIS24Template() {\n\n    if (initialized) return;\n\n    const generator =\n      document.getElementById(\"vis24-template-generator\");\n\n    const sizeDisplay =\n      document.getElementById(\"vis24-template-size\");\n\n    const statusDisplay =\n      document.getElementById(\"vis24-template-status\");\n\n    const downloadButton =\n      document.getElementById(\"vis24-template-download\");\n\n    const freiformNotice =\n      document.getElementById(\"vis24-template-freiform\");\n\n    if (\n      !generator ||\n      !sizeDisplay ||\n      !statusDisplay ||\n      !downloadButton ||\n      !freiformNotice\n    ) {\n      return;\n    }\n\n    initialized = true;\n\n    \/* ==========================================================\n       VISIBILITY CHECK\n       ========================================================== *\/\n\n    function isVisible(element) {\n\n      if (!element) return false;\n\n      if (element.getClientRects().length === 0) {\n        return false;\n      }\n\n      let current = element;\n\n      while (current \u0026\u0026 current.nodeType === 1) {\n\n        const style = window.getComputedStyle(current);\n\n        if (\n          style.display === \"none\" ||\n          style.visibility === \"hidden\"\n        ) {\n          return false;\n        }\n\n        current = current.parentElement;\n      }\n\n      return true;\n    }\n\n    \/* ==========================================================\n       NUMBER PARSER\n       ========================================================== *\/\n\n    function parseDimension(value) {\n\n      if (typeof value !== \"string\") {\n        return NaN;\n      }\n\n      const normalized =\n        value.trim().replace(\",\", \".\");\n\n      if (normalized === \"\") {\n        return NaN;\n      }\n\n      return Number(normalized);\n    }\n\n    \/* ==========================================================\n       FIND ACTIVE EASIFY DIMENSION FIELDS\n       MOBILE + DESKTOP V2.4\n       ========================================================== *\/\n\n    function getDimensions() {\n\n      const widthFields =\n        document.querySelectorAll(\n          'input[data-tpo-dimension=\"x\"]'\n        );\n\n      const heightFields =\n        document.querySelectorAll(\n          'input[data-tpo-dimension=\"y\"]'\n        );\n\n      const candidates = [];\n\n      for (const widthField of widthFields) {\n\n        const widthName =\n          widthField.getAttribute(\"name\") || \"\";\n\n        const heightName =\n          widthName.replace(\n            \/-Breite\\]$\/,\n            \"-Höhe]\"\n          );\n\n        const width =\n          parseDimension(widthField.value);\n\n        for (const heightField of heightFields) {\n\n          if (\n            heightField.getAttribute(\"name\") !== heightName\n          ) {\n            continue;\n          }\n\n          const height =\n            parseDimension(heightField.value);\n\n          candidates.push({\n            width: width,\n            height: height,\n            visible:\n              isVisible(widthField) \u0026\u0026\n              isVisible(heightField)\n          });\n\n        }\n      }\n\n      \/* ========================================================\n         PRIORITY 1\n         VALID + VISIBLE FIELDS\n         ======================================================== *\/\n\n      const active = candidates.find(function (item) {\n        return item.visible \u0026\u0026 validDimensions(item);\n      });\n\n      if (active) {\n        return active;\n      }\n\n      \/* ========================================================\n         PRIORITY 2\n         MOBILE FALLBACK\n         VALID FIELDS EVEN IF EASIFY MARKS THEM HIDDEN\n         ======================================================== *\/\n\n      const fallback = candidates.find(function (item) {\n        return validDimensions(item);\n      });\n\n      if (fallback) {\n        return fallback;\n      }\n\n      \/* ========================================================\n         PRIORITY 3\n         RETURN AVAILABLE FIELDS FOR STATUS MESSAGE\n         ======================================================== *\/\n\n      return candidates.find(function (item) {\n        return item.visible;\n      }) || candidates[0] || null;\n    }\n\n    \/* ==========================================================\n       VALIDATE DIMENSIONS\n       ========================================================== *\/\n\n    function validDimensions(dimensions) {\n\n      if (!dimensions) {\n        return false;\n      }\n\n      const width = dimensions.width;\n      const height = dimensions.height;\n\n      return (\n        Number.isFinite(width) \u0026\u0026\n        Number.isFinite(height) \u0026\u0026\n        width \u003e= MIN_SIZE \u0026\u0026\n        width \u003c= MAX_SIZE \u0026\u0026\n        height \u003e= MIN_SIZE \u0026\u0026\n        height \u003c= MAX_SIZE\n      );\n    }\n\n    \/* ==========================================================\n       DETECT EASIFY FREIFORM SELECTION\n       ========================================================== *\/\n\n    function isFreiformSelected() {\n\n      const inputs = document.querySelectorAll(\n        'input[type=\"radio\"]:checked'\n      );\n\n      for (const input of inputs) {\n\n        if (!isVisible(input.parentElement)) {\n          continue;\n        }\n\n        const containers = [\n          input.closest(\"label\"),\n          input.closest(\".tpo_option-type-selection\"),\n          input.parentElement,\n          input.parentElement\n            ? input.parentElement.parentElement\n            : null\n        ];\n\n        for (const container of containers) {\n\n          if (!container) continue;\n\n          const text = (\n            (container.textContent || \"\") + \" \" +\n            (input.value || \"\")\n          ).toLowerCase();\n\n          if (\n            text.includes(\"freiform\") ||\n            text.includes(\"individueller konturschnitt\") ||\n            text.includes(\"individueller kontur\")\n          ) {\n            return true;\n          }\n        }\n      }\n\n      return false;\n    }\n\n    \/* ==========================================================\n       UPDATE DISPLAY\n       ========================================================== *\/\n\n    function updateDimensions() {\n\n      const dimensions = getDimensions();\n\n      const freiform = isFreiformSelected();\n\n      freiformNotice.style.display =\n        freiform ? \"block\" : \"none\";\n\n      if (!dimensions) {\n\n        sizeDisplay.textContent =\n          \"Bitte Breite und Höhe oben im Produktkonfigurator eingeben.\";\n\n        statusDisplay.textContent =\n          \"Wählen Sie zuerst die Acrylstärke und geben Sie Ihre Maße ein.\";\n\n        downloadButton.disabled = true;\n\n        return;\n      }\n\n      if (!validDimensions(dimensions)) {\n\n        sizeDisplay.textContent =\n          \"Bitte gültige Maße eingeben\";\n\n        statusDisplay.textContent =\n          \"Breite und Höhe müssen jeweils zwischen 20 und 400 mm liegen.\";\n\n        downloadButton.disabled = true;\n\n        return;\n      }\n\n      const width = dimensions.width;\n      const height = dimensions.height;\n\n      sizeDisplay.textContent =\n        width + \" × \" + height + \" mm\";\n\n      statusDisplay.textContent =\n        \"Die Druckvorlage kann jetzt heruntergeladen werden.\";\n\n      downloadButton.disabled = false;\n    }\n\n    \/* ==========================================================\n       CREATE PDF\n       ========================================================== *\/\n\n    function createPDF() {\n\n      const dimensions = getDimensions();\n\n      if (!validDimensions(dimensions)) {\n\n        alert(\n          \"Bitte zuerst gültige Breite und Höhe zwischen 20 und 400 mm eingeben.\"\n        );\n\n        return;\n      }\n\n      if (\n        !window.jspdf ||\n        !window.jspdf.jsPDF\n      ) {\n\n        alert(\n          \"Die PDF-Bibliothek konnte nicht geladen werden. Bitte laden Sie die Seite erneut.\"\n        );\n\n        return;\n      }\n\n      const width = dimensions.width;\n      const height = dimensions.height;\n\n      const freiform = isFreiformSelected();\n\n      const pageW = width + BLEED * 2;\n      const pageH = height + BLEED * 2;\n\n      const { jsPDF } = window.jspdf;\n\n      const pdf = new jsPDF({\n        orientation:\n          pageW \u003e pageH ? \"landscape\" : \"portrait\",\n        unit: \"mm\",\n        format: [pageW, pageH]\n      });\n\n      \/* ========================================================\n         RED – PRODUCTION FORMAT\n         ======================================================== *\/\n\n      pdf.setDrawColor(255, 0, 0);\n      pdf.setLineWidth(0.15);\n      pdf.setLineDashPattern([2, 2], 0);\n\n      const edge = 0.2;\n\n      pdf.rect(\n        edge,\n        edge,\n        pageW - edge * 2,\n        pageH - edge * 2\n      );\n\n      \/* ========================================================\n         GREEN – FINAL SIZE\n         ======================================================== *\/\n\n      pdf.setLineDashPattern([], 0);\n      pdf.setDrawColor(0, 150, 0);\n      pdf.setLineWidth(0.25);\n\n      pdf.rect(\n        BLEED,\n        BLEED,\n        width,\n        height\n      );\n\n      \/* ========================================================\n         BLUE – SAFETY AREA\n         ======================================================== *\/\n\n      pdf.setDrawColor(0, 90, 255);\n      pdf.setLineWidth(0.1);\n\n      pdf.rect(\n        BLEED + SAFETY,\n        BLEED + SAFETY,\n        width - SAFETY * 2,\n        height - SAFETY * 2\n      );\n\n      \/* ========================================================\n         DIMENSIONS\n         ======================================================== *\/\n\n      const centerX = pageW \/ 2;\n      const centerY = pageH \/ 2;\n\n      pdf.setTextColor(40, 40, 40);\n      pdf.setFontSize(18);\n      pdf.setFont(undefined, \"bold\");\n\n      pdf.text(\n        width + \" × \" + height + \" mm\",\n        centerX,\n        centerY,\n        { align: \"center\" }\n      );\n\n      \/* ========================================================\n         LEGEND\n         ======================================================== *\/\n\n      pdf.setFontSize(8);\n      pdf.setFont(undefined, \"normal\");\n\n      let legendY = centerY + 7;\n\n      pdf.setTextColor(255, 0, 0);\n\n      pdf.text(\n        \"ROT: Produktionsformat inkl. 3 mm Beschnitt\",\n        centerX,\n        legendY,\n        { align: \"center\" }\n      );\n\n      legendY += 5;\n\n      pdf.setTextColor(0, 150, 0);\n\n      pdf.text(\n        \"GRUEN: Endformat\",\n        centerX,\n        legendY,\n        { align: \"center\" }\n      );\n\n      legendY += 5;\n\n      pdf.setTextColor(0, 90, 255);\n\n      pdf.text(\n        \"BLAU: 3 mm Sicherheitsbereich\",\n        centerX,\n        legendY,\n        { align: \"center\" }\n      );\n\n      \/* ========================================================\n         FREIFORM INFORMATION PAGE\n         ======================================================== *\/\n\n      if (freiform) {\n\n        pdf.addPage(\"a4\", \"portrait\");\n\n        const left = 20;\n        const right = 190;\n\n        let y = 30;\n\n        pdf.setFont(\"helvetica\", \"bold\");\n        pdf.setFontSize(16);\n        pdf.setTextColor(210, 0, 0);\n\n        pdf.text(\n          \"WICHTIG - FREIFORM-KONTURSCHNITT\",\n          left,\n          y\n        );\n\n        y += 15;\n\n        pdf.setFont(\"helvetica\", \"normal\");\n        pdf.setFontSize(11);\n        pdf.setTextColor(40, 40, 40);\n\n        const intro = pdf.splitTextToSize(\n          \"Sie koennen Ihre individuelle Form innerhalb \" +\n          \"der angegebenen Breite und Hoehe frei gestalten. \" +\n          \"Die erste PDF-Seite zeigt das maximale Aussenformat.\",\n          right - left\n        );\n\n        pdf.text(intro, left, y);\n\n        y += intro.length * 6 + 12;\n\n        pdf.setTextColor(210, 0, 0);\n        pdf.setFont(\"helvetica\", \"bold\");\n\n        const warning = pdf.splitTextToSize(\n          \"Die Schnittkontur muss als geschlossener \" +\n          \"Vektorpfad mit einer eigenen Volltonfarbe \" +\n          \"(Sonderfarbe) angelegt werden. \" +\n          \"Diese Sonderfarbe darf im Druckmotiv \" +\n          \"nicht vorkommen.\",\n          right - left\n        );\n\n        pdf.text(warning, left, y);\n\n        y += warning.length * 6 + 12;\n\n        pdf.setTextColor(40, 40, 40);\n        pdf.setFont(\"helvetica\", \"normal\");\n\n        const additional = pdf.splitTextToSize(\n          \"Die Schnittlinie darf nicht als Bestandteil \" +\n          \"des Druckmotivs ausgegeben werden. \" +\n          \"Bitte legen Sie die Schnittkontur als \" +\n          \"separates Vektorobjekt an. \" +\n          \"Die Unterkante der Acrylglasplatte muss \" +\n          \"fuer die Aufnahme im 3D-gedruckten \" +\n          \"Standfuss geeignet sein. \" +\n          \"Der Standfuss wird von VIS24 passend \" +\n          \"zur gewaehlten Acrylglasstaerke gefertigt.\",\n          right - left\n        );\n\n        pdf.text(additional, left, y);\n      }\n\n      \/* ========================================================\n         FILENAME\n         ======================================================== *\/\n\n      const fileName =\n        \"VIS24_T-Aufsteller_\" +\n        width +\n        \"x\" +\n        height +\n        \"mm\" +\n        (freiform ? \"_Freiform\" : \"\") +\n        \".pdf\";\n\n      pdf.save(fileName);\n    }\n\n    \/* ==========================================================\n       EVENT LISTENERS\n       ========================================================== *\/\n\n    document.addEventListener(\n      \"input\",\n      function (event) {\n\n        if (\n          event.target.matches(\n            'input[data-tpo-dimension=\"x\"], input[data-tpo-dimension=\"y\"]'\n          )\n        ) {\n          updateDimensions();\n        }\n      }\n    );\n\n    document.addEventListener(\n      \"change\",\n      function () {\n        updateDimensions();\n      }\n    );\n\n    downloadButton.addEventListener(\n      \"click\",\n      createPDF\n    );\n\n    \/* ==========================================================\n       SAFE EASIFY CHECK\n       ========================================================== *\/\n\n    const intervalId = window.setInterval(\n      function () {\n\n        if (!generator.isConnected) {\n          window.clearInterval(intervalId);\n          return;\n        }\n\n        updateDimensions();\n      },\n      CHECK_INTERVAL\n    );\n\n    updateDimensions();\n  }\n\n  \/* ==========================================================\n     INITIALIZATION\n     ========================================================== *\/\n\n  if (document.readyState === \"loading\") {\n\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initVIS24Template\n    );\n\n  } else {\n\n    initVIS24Template();\n  }\n\n})();\n\u003c\/script\u003e\n\u003ch2 class=\"p1\"\u003eAcrylglas-T-Aufsteller mit individuellem 3D-Druck-Standfuß\u003c\/h2\u003e\n\n\u003cp\u003e\nDer \u003cstrong\u003eAcrylglas-T-Aufsteller\u003c\/strong\u003e kombiniert eine individuell\nzugeschnittene Acrylglasplatte mit einem separat gefertigten\n\u003cstrong\u003e3D-gedruckten Standfuß\u003c\/strong\u003e. Die Acrylglasplatte wird sicher\nim Standfuß gehalten und präsentiert Preise, QR-Codes, Logos,\nProduktinformationen oder Hinweise auf Tischen, Theken und\nEmpfangsbereichen.\n\u003c\/p\u003e\n\n\u003cp\u003e\nWir fertigen den Aufsteller nach Maß und bedrucken das transparente\nAcrylglas im hochwertigen UV-Direktdruck. Der Standfuß ist in den\nStandardfarben \u003cstrong\u003eSchwarz, Weiß, Grau, Gold und Silber\u003c\/strong\u003e\nerhältlich. Weitere Farben sind auf Anfrage möglich.\n\u003c\/p\u003e\n\n\u003cdiv class=\"product-detail-accordion\" style=\"margin-top: 1.5rem;\"\u003e\n  \u003cdiv class=\"cc-accordion\"\u003e\n\n    \u003cdetails class=\"cc-accordion-item\"\u003e\n      \u003csummary class=\"cc-accordion-item__title\"\u003e\n        \u003ch3\u003eBauform und typische Einsatzbereiche\u003c\/h3\u003e\n      \u003c\/summary\u003e\n\n      \u003cdiv class=\"cc-accordion-item__panel\"\u003e\n        \u003cul\u003e\n          \u003cli\u003e\n            \u003cstrong\u003eModulare T-Form:\u003c\/strong\u003e\n            Gerade Acrylglasplatte mit separat gefertigtem\n            3D-Druck-Standfuß.\n          \u003c\/li\u003e\n          \u003cli\u003e\n            \u003cstrong\u003eNach Maß:\u003c\/strong\u003e\n            Breite und Höhe passend zum gewünschten Einsatzbereich wählen.\n          \u003c\/li\u003e\n          \u003cli\u003e\n            \u003cstrong\u003eStandfuß in Wunschfarbe:\u003c\/strong\u003e\n            Schwarz, Weiß, Grau, Gold oder Silber.\n            Weitere Farben auf Anfrage.\n          \u003c\/li\u003e\n          \u003cli\u003e\n            \u003cstrong\u003eFür Tisch und Theke:\u003c\/strong\u003e\n            Ideal für Preisschilder, QR-Codes, Produktinformationen,\n            Speisekarten, Logos und Empfangsschilder.\n          \u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails class=\"cc-accordion-item\"\u003e\n      \u003csummary class=\"cc-accordion-item__title\"\u003e\n        \u003ch3\u003eAcrylglas, UV-Druck und Konturschnitt\u003c\/h3\u003e\n      \u003c\/summary\u003e\n\n      \u003cdiv class=\"cc-accordion-item__panel\"\u003e\n        \u003cp\u003e\n          Wir verwenden transparentes Acrylglas in den Materialstärken\n          \u003cstrong\u003e3 mm oder 5 mm\u003c\/strong\u003e.\n          Unbedruckte Bereiche bleiben transparent.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Der UV-Direktdruck ermöglicht brillante Farben und\n          detailreiche Motive. Durch eine zusätzliche Weißunterlegung\n          können einzelne Motivbereiche deckend dargestellt werden.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Neben rechteckigen Formaten bieten wir\n          \u003cstrong\u003eindividuelle Freiform-Konturen\u003c\/strong\u003e an.\n          So lassen sich beispielsweise Logos, Symbole oder\n          besondere Produktformen als Acrylglas-Aufsteller realisieren.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails class=\"cc-accordion-item\"\u003e\n      \u003csummary class=\"cc-accordion-item__title\"\u003e\n        \u003ch3\u003e3D-gedruckter Standfuß – Farben und Ausführungen\u003c\/h3\u003e\n      \u003c\/summary\u003e\n\n      \u003cdiv class=\"cc-accordion-item__panel\"\u003e\n        \u003cp\u003e\n          Der Standfuß wird im 3D-Druckverfahren gefertigt und\n          passend zur gewählten Acrylglasstärke ausgeführt.\n          Er sorgt für die Aufnahme und Positionierung\n          der Acrylglasplatte.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          \u003cstrong\u003eVerfügbare Standardfarben:\u003c\/strong\u003e\n        \u003c\/p\u003e\n\n        \u003cul\u003e\n          \u003cli\u003eSchwarz\u003c\/li\u003e\n          \u003cli\u003eWeiß\u003c\/li\u003e\n          \u003cli\u003eGrau\u003c\/li\u003e\n          \u003cli\u003eGold\u003c\/li\u003e\n          \u003cli\u003eSilber\u003c\/li\u003e\n        \u003c\/ul\u003e\n\n        \u003cp\u003e\n          Sie wünschen eine andere Farbe passend zu Ihrem\n          Corporate Design? Individuelle Farben sind\n          \u003cstrong\u003eauf Anfrage\u003c\/strong\u003e möglich.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          \u003cem\u003e\n            Hinweis: Gold und Silber werden als farbige\n            3D-Druck-Oberflächen gefertigt und sind\n            keine metallbeschichteten Standfüße.\n          \u003c\/em\u003e\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails class=\"cc-accordion-item\"\u003e\n      \u003csummary class=\"cc-accordion-item__title\"\u003e\n        \u003ch3\u003eT-Aufsteller konfigurieren\u003c\/h3\u003e\n      \u003c\/summary\u003e\n\n      \u003cdiv class=\"cc-accordion-item__panel\"\u003e\n        \u003col\u003e\n          \u003cli\u003eZuschnitt auswählen: Rechteckig oder individueller Konturschnitt.\u003c\/li\u003e\n          \u003cli\u003eAcrylglasstärke wählen: 3 mm oder 5 mm.\u003c\/li\u003e\n          \u003cli\u003eBreite und Höhe in Millimetern eingeben.\u003c\/li\u003e\n          \u003cli\u003eGewünschte Bedruckung auswählen.\u003c\/li\u003e\n          \u003cli\u003eFarbe des 3D-gedruckten Standfußes festlegen.\u003c\/li\u003e\n          \u003cli\u003eDruckdaten hochladen und Stückzahl auswählen.\u003c\/li\u003e\n        \u003c\/ol\u003e\n\n        \u003cp\u003e\n          \u003cstrong\u003eHinweis zur Druckvorlage:\u003c\/strong\u003e\n          Die angegebenen Maße beziehen sich auf die sichtbare\n          Acrylglasplatte. Der separat gefertigte Standfuß\n          wird von VIS24 passend zur Konfiguration berücksichtigt.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n  \u003c\/div\u003e\n\u003c\/div\u003e","brand":"VIS24","offers":[{"title":"Standard","offer_id":57550536573193,"sku":null,"price":16.28,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0516\/7949\/4302\/files\/acrylglas-t-aufsteller-nach-mass-bedruckt-1013459.jpg?v=1794224713"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0516\/7949\/4302\/collections\/anfrage-acrylglas-transparent-384865.jpg?v=1794141727","url":"https:\/\/vis24.de\/collections\/bedruckte-aufsteller.oembed","provider":"VIS24","version":"1.0","type":"link"}