pasteToPrint / integračná dokumentácia

Manuál implementácie tlačidla IMPORT

Návod pre programátora hosťovského webu, ktorý chce odoslať text, HTML s CSS alebo vygenerovaný obrázok do aplikácie pasteToPrint.

Protokol: v1 Prenos: window.postMessage Bez serverového uploadu SDK: 1.5.0 48 jazykov Aktualizácia:

1. Účel integrácie

Hosťovský web môže obsahovať tlačidlo IMPORT do pasteToPrint. Po kliknutí sa otvorí pasteToPrint v novom okne a používateľovi sa ponúkne vloženie odoslaného obsahu.

Prenos prebieha iba v prehliadači pomocou štandardného API window.postMessage. Hosťovský server nepotrebuje prístup k serveru pasteToPrint, API kľúč ani CORS konfiguráciu.

1.1 Možnosti importu

Vyberte spôsob podľa obsahu a možností vášho webu alebo AI klienta.

SpôsobKedy ho použiť
Tlačidlo IMPORT (SDK) Text, HTML s CSS a obrázky z vlastného webu. Prenos cez prehliadač bez API kľúča; používateľ import potvrdí.
#text= Krátky obyčajný text z odkazu alebo chatbota bez API. Text zakódujte presne raz pomocou encodeURIComponent.
#ptdf= Krátky štruktúrovaný dokument PTDF 1.0 v odkaze. Použite overené kódovanie UTF-8 a Base64URL bez paddingu.
PTDF súbor alebo rozšírenie Dlhší dokument bez API: import súboru .ptdf alebo .ptdf.json, prípadne prenos vybranej odpovede cez rozšírenie Open in pasteToPrint.
Document API v2 / MCP Serverové a AI integrácie so spravovanou PTDF session a samostatným odkazom na úpravy alebo zobrazenie.
Public Sessions API v1 Malý jednorazový PTDF dokument bez registrácie. Dočasná session vráti editorový odkaz na kontrolu používateľom.
Limity odkazov a štruktúrovaných dokumentov

Pri inline odkazoch odporúčame najviac 8 000 znakov celej URL. Dlhší obsah neskracujte; použite PTDF súbor, MCP alebo API session.

SDK prijíma iba položky text, html a image. PTDF dokument odošlite samostatnou cestou uvedenou vyššie.

PTDF 1.0 · Deep links
  1. Používateľ klikne na tlačidlo IMPORT.
  2. Hosťovský web otvorí pasteToPrint.
  3. Web odošle text alebo obrázok.
  4. Používateľ import potvrdí.
Odporúčané použitie QR kódy, štítky, jednoduché reporty, objednávky, potvrdenia a texty pripravené v inom webovom nástroji.

2. Predpoklady

Implementátor hosťovského webu potrebuje:

  • možnosť vložiť HTML a JavaScript na hosťovskú stránku,
  • obsah, ktorý sa má odoslať: text, HTML alebo obrázok vo formáte data:image/...;base64,...,
  • povolené otváranie nového okna po kliknutí používateľa.
Čo nasadiť na vlastný web

Na svoj web vložte verejné SDK a obsluhu tlačidla podľa príkladu nižšie. Prijímací modul zabezpečuje pasteToPrint.

Pri vlastnom alebo lokálnom nasadení pasteToPrint musia byť SDK aj prijímací modul z rovnakej aktuálnej verzie projektu.

3. Rýchla implementácia

Dlhá komunikačná logika je uložená na serveri pasteToPrint. Hosťovský web načíta verejné SDK a pri kliknutí zavolá iba funkciu PasteToPrint.import().

3.1 Vložte SDK do časti head

Tento riadok vložte medzi značky <head> a </head>. Na jednej stránke ho stačí vložiť raz.

<script src="https://www.pastetoprint.com/assets/js/import-button.js?v=1.5.0" defer></script>

3.2 Vložte tlačidlo a krátku obsluhu kliknutia

Nasledujúci blok vložte na miesto, kde sa má zobraziť tlačidlo IMPORT. V ukážke sa odosiela obyčajný text.

<button type="button" id="pasteToPrintImportBtn" data-pastetoprint-button>
  IMPORT do pasteToPrint
</button>

<script>
document
  .getElementById('pasteToPrintImportBtn')
  .addEventListener('click', async () => {
    try {
      await PasteToPrint.import({
        title: 'Poznamka z hostovskeho webu',
        items: [
          {
            kind: 'text',
            text: 'Tento text bol odoslany z hostovskeho webu.'
          }
        ]
      });
    } catch (error) {
      alert(error.message);
    }
  });
</script>
Automatické logo tlačidla SDK pridá minimalistický symbol s textom pasteToPrint.com iba do prvku s atribútom data-pastetoprint-button. Branding vypnete nastavením data-pastetoprint-brand="false".
Kam vložiť vlastný obsah? V obsluhe kliknutia upravte hodnoty title a items. SDK načítané z pasteToPrint zostáva bez zmeny.

3.3 Voliteľné nastavenia SDK

Druhý parameter funkcie PasteToPrint.import() je určený pre lokálne testovanie alebo pre prísnejšie timeouty. V ostrej prevádzke ho zvyčajne netreba nastavovať.

await PasteToPrint.import(payload, {
  targetUrl: 'https://www.pastetoprint.com/',
  readyTimeoutMs: 20000,
  resultTimeoutMs: 120000,
  windowName: 'pasteToPrintImport'
});
Produkčná cieľová adresa V ostrej prevádzke použite iba https://www.pastetoprint.com/. Adresa bez www, protokol http alebo SEO podstránka môžu spôsobiť zmenu originu alebo otvorenie stránky bez prijímacieho modulu.

4. Príklady použitia

4.1 Vygenerovaný QR kód z elementu canvas

Použite v prípade, že QR generátor vykreslí obrázok do <canvas>. Identifikátor qrCanvas nahraďte identifikátorom použitým vo vašom projekte.

const qrDataUrl = document
  .getElementById('qrCanvas')
  .toDataURL('image/png');

await PasteToPrint.import({
  title: 'QR kod',
  items: [
    {
      kind: 'image',
      mime: 'image/png',
      name: 'qr-code.png',
      alt: 'Vygenerovany QR kod',
      dataUrl: qrDataUrl
    }
  ]
});

4.2 Vygenerovaný QR kód z elementu img

Tento variant použite, ak existujúci generátor nastavuje src obrázka priamo na hodnotu data:image/png;base64,....

const qrDataUrl = document
  .getElementById('generatedQrImage')
  .src;

await PasteToPrint.import({
  title: 'QR kod',
  items: [
    {
      kind: 'image',
      mime: 'image/png',
      name: 'qr-code.png',
      alt: 'Vygenerovany QR kod',
      dataUrl: qrDataUrl
    }
  ]
});

4.3 Text

await PasteToPrint.import({
  title: 'Objednavka 2026-001',
  items: [
    {
      kind: 'text',
      text: [
        'Objednavka: 2026-001',
        'Suma: 24,90 EUR',
        'Variabilny symbol: 123456'
      ].join('\n')
    }
  ]
});

4.4 Formátovaný HTML obsah s CSS

HTML vložte do povinného poľa html a CSS do voliteľného poľa css tej istej položky. pasteToPrint bezpečné CSS aplikuje priamo na zodpovedajúce HTML elementy, aby sa zachovalo v editore, tlači aj PDF. Skripty, formuláre, vložené objekty, externé zdroje a nepovolené značky, selektory, atribúty alebo CSS vlastnosti odstráni.

CSS podporuje bezpečné selektory značiek, tried a ID, vnorené a priame potomstvo, farby, typografiu, rozostupy, orámovanie, rozmery, flex, grid a zalomenia strán. Pravidlá sa prevedú na inline štýly, aby zostali zachované v editore, pri tlači aj exporte PDF. @import, vzdialené URL, spustiteľný kód, transformácie a animácie sa odstránia.

await PasteToPrint.import({
  title: 'Rekapitulacia objednavky',
  items: [
    {
      kind: 'html',
      html: [
        '<div class="rekapitulacia">',
        '  <h2>Objednavka 2026-001</h2>',
        '  <p class="suma"><strong>Suma:</strong> 24,90 EUR</p>',
        '<ul>',
        '  <li>Polozka A</li>',
        '  <li>Polozka B</li>',
        '</ul>',
        '</div>'
      ].join(''),
      css: [
        '.rekapitulacia { padding: 16px; border: 1px solid #93c5fd; }',
        '.rekapitulacia h2 { color: #1d4ed8; font-size: 24px; }',
        '.rekapitulacia .suma { color: #166534; font-weight: 700; }'
      ].join('\n')
    }
  ]
});

4.5 Kombinácia textu a obrázka

const qrDataUrl = document
  .getElementById('qrCanvas')
  .toDataURL('image/png');

await PasteToPrint.import({
  title: 'Platobny QR kod',
  mode: 'append',
  items: [
    {
      kind: 'html',
      html: '<h2>Platobne udaje</h2><p>Suma: 24,90 EUR</p>'
    },
    {
      kind: 'image',
      mime: 'image/png',
      name: 'payment-qr.png',
      alt: 'Platobny QR kod',
      dataUrl: qrDataUrl
    }
  ]
});

5. Formát správy

Rozlišujte verejný vstup funkcie PasteToPrint.import() a internú správu window.postMessage. SDK verejný vstup overí, doplní technické polia a vytvorí správu protokolu v1.

5.1 Verejný vstup SDK

{
  title: 'Nazov dokumentu',
  mode: 'append',
  options: {
    imageScale: 100
  },
  layout: {
    marginsMm: { top: 10, right: 11, bottom: 10, left: 10 }
  },
  items: [
    {
      kind: 'text',
      text: 'Obsah dokumentu'
    }
  ]
}

Pre názov dokumentu odporúčame koreňové pole title. SDK z dôvodu spätnej kompatibility prijme aj options.title a do internej správy ho vždy uloží ako options.title.

5.2 Interná správa postMessage

Pri použití SDK ju nevytvárajte ručne. Hosťovský web odosiela objekt typu pasteToPrint.import s verziou 1.

{
  type: 'pasteToPrint.import',
  version: 1,
  nonce: 'jednorazovy-identifikator',
  mode: 'append',
  options: {
    title: 'Nazov dokumentu',
    imageScale: 100
  },
  layout: {
    marginsMm: { top: 10, right: 11, bottom: 10, left: 10 }
  },
  items: [
    {
      kind: 'image',
      mime: 'image/png',
      name: 'qr-code.png',
      alt: 'QR kod',
      dataUrl: 'data:image/png;base64,...'
    }
  ]
}

5.3 Polia internej správy

Pole Povinné Popis
type áno Vždy hodnota pasteToPrint.import.
version áno Verzia integračného protokolu. Aktuálne 1.
nonce áno Jednorazový identifikátor vytvorený pri otvorení okna.
mode nie append pridá obsah na koniec. replace navrhne nahradenie aktuálneho obsahu. Predvolená hodnota je append.
options.title nie Navrhovaný názov dokumentu.
options.imageScale nie Navrhovaná mierka obrázka. Povolené hodnoty sú 25, 50, 75 a 100.
layout.marginsMm nie Okraje dokumentu v milimetroch. Objekt musí obsahovať top, right, bottom a left; každá hodnota musí byť od 3 do 80.
items áno Pole položiek určených na vloženie.

5.4 Podporované položky items

kind Povinné polia Použitie
text text Obyčajný text bez formátovania.
html html, voliteľne css Formátovaný obsah s bezpečným CSS. pasteToPrint ho pred vložením vyčistí a CSS vloží priamo do elementov.
image dataUrl Obrázok PNG, JPG, WEBP, GIF alebo BMP zakódovaný ako Data URL.

5.5 Limity protokolu v1

Hodnota Maximum
Počet položiek items 12
title / options.title 200 znakov
Jedna textová alebo HTML položka 500 000 znakov
CSS jednej HTML položky 100 000 znakov
Jedno obrazové dataUrl 1 500 000 znakov
image.name / image.alt 160 / 300 znakov
Súčet textu, HTML, CSS a obrazových Data URL 4 500 000 znakov
Nepodporované vo verzii 1 PDF dokumenty, vzdialené URL obrázkov, automatické spustenie tlače, zmena režimu Free/Premium a zmena firemných nastavení dokumentu.

6. Priebeh komunikácie

  1. Hosťovský web vytvorí jednorazový identifikátor nonce.
  2. Po kliknutí používateľa otvorí https://www.pastetoprint.com/?externalImport=1&nonce=...&sourceOrigin=....
  3. SDK opakovane odošle správu pasteToPrint.connect, kým sa cieľové okno nenačíta.
  4. pasteToPrint odpovie správou pasteToPrint.ready.
  5. SDK overí event.origin, event.source a nonce, potom odošle pasteToPrint.import.
  6. pasteToPrint zobrazí používateľovi náhľad a vyžiada potvrdenie.
  7. pasteToPrint odošle výsledok pasteToPrint.result.

6.1 Odpoveď po úspešnom importe

{
  type: 'pasteToPrint.result',
  version: 1,
  nonce: 'rovnaky-jednorazovy-identifikator',
  status: 'accepted'
}

Pri zrušení používateľom je hodnota status nastavená na cancelled. Pri chybe sa použije error a voliteľné pole message.

Promise vrátený funkciou PasteToPrint.import() sa vyrieši iba pri stave accepted. Stavy cancelled a error prejdú do catch. Od SDK 1.2.1 je pôvodná odpoveď dostupná aj ako error.result a stav ako error.status.

try {
  const result = await PasteToPrint.import(payload);
  console.log(result.status); // accepted
} catch (error) {
  if (error.status === 'cancelled') {
    console.log('Pouzivatel import zrusil.');
  } else {
    console.error(error.message, error.result);
  }
}

7. Bezpečnostné pravidlá

  • Okno pasteToPrint otvárajte iba po priamom kliknutí používateľa. Inak ho prehliadač môže zablokovať.
  • Pri postMessage vždy použite presný cieľ https://www.pastetoprint.com. Nepoužívajte *.
  • Pri prijímaní odpovede overte event.origin, event.source aj nonce. Ukážkový kód to už robí.
  • Neodosielajte heslá, prístupové tokeny ani iné citlivé údaje.
  • Pre obrázky používajte iba data:image/.... Neposielajte vzdialené URL.
  • V produkcii smerujte import iba na https://www.pastetoprint.com/, nie na jazykovú alebo SEO podstránku.
  • Odporúčaná maximálna dĺžka jedného dataUrl je 1 400 000 znakov. Prijímač odmietne hodnotu nad 1 500 000 znakov.
Prečo sa import ešte potvrdzuje? Hosťovský web navrhne vloženie obsahu, ale posledné slovo má používateľ. Externá stránka nesmie bez potvrdenia prepísať rozpracovaný dokument.

8. Testovanie

Pred odovzdaním integrácie overte nasledujúce scenáre:

  1. Po kliknutí sa otvorí nové okno pasteToPrint.
  2. pasteToPrint zobrazí dialóg s náhľadom importovaného obsahu.
  3. Po potvrdení sa text alebo QR kód zobrazí v editore a v náhľade tlače.
  4. Pri zrušení sa obsah dokumentu nezmení.
  5. Ak používateľ zablokuje vyskakovacie okná, hosťovský web zobrazí zrozumiteľnú chybu.
  6. Príliš veľký obrázok je odmietnutý so zrozumiteľnou správou.
  7. Funkčnosť je overená aspoň v aktuálnych verziách Chrome, Edge, Firefox a Safari.

8.1 Minimálny test integrácie

Pri teste hostiteľského webu proti produkcii použite presnú kanonickú adresu. Pri lokálnom teste prijímača nastavte targetUrl na lokálny súbor index.html obsluhovaný cez http://localhost alebo http://127.0.0.1. Integrácia nefunguje cez file://.

<script src="http://localhost/pasteToPrint/assets/js/import-button.js?v=1.5.0" defer></script>

<button type="button" id="localImportBtn" data-pastetoprint-button>
  Otestovať lokálny import
</button>

<script>
window.addEventListener('DOMContentLoaded', () => {
  document.getElementById('localImportBtn').addEventListener('click', async () => {
    try {
      const result = await PasteToPrint.import({
        title: 'Lokálny test',
        items: [{ kind: 'text', text: 'Testovací text' }]
      }, {
        targetUrl: 'http://localhost/pasteToPrint/index.html'
      });
      console.log(result.status);
    } catch (error) {
      if (error.status !== 'cancelled') alert(error.message);
    }
  });
});
</script>

Ukážku hostite cez lokálny HTTP server. Ak sa projekt nachádza v inom priečinku alebo na inom porte, upravte adresu SDK aj targetUrl.

Hotový test v projekte Pre rýchle overenie je pripravená stránka external-import-demo.html. Otvorte ju cez testovací hostiteľský web alebo nasadenú doménu.

9. Riešenie problémov

Problém Pravdepodobná príčina Riešenie
Okno sa neotvorí. Prehliadač zablokoval popup. Volajte PasteToPrint.import() priamo z obsluhy kliknutia.
Otvorí sa pasteToPrint, ale nič sa nestane. Prijímací modul nie je nasadený, cieľom je SEO podstránka alebo presmerovanie zmenilo origin. V produkcii použite presne https://www.pastetoprint.com/. Lokálne smerujte priamo na index.html.
Obrázok je odmietnutý. Nie je vo formáte Data URL alebo je príliš veľký. Použite canvas.toDataURL('image/png') a zmenšite obrázok.
HTML vyzerá po vložení jednoduchšie. pasteToPrint odstránil nepovolené značky alebo atribúty. Používajte základné značky ako h1, h2, p, strong, ul, ol, li, table a img.
Lokálny test nefunguje. Stránka bola otvorená cez file:// alebo zostala nastavená produkčná URL. Spustite lokálny HTTP server, načítajte lokálne SDK a nastavte druhý parameter targetUrl.