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ôsob | Kedy 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. |
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.
- Používateľ klikne na tlačidlo IMPORT.
- Hosťovský web otvorí pasteToPrint.
- Web odošle text alebo obrázok.
- Používateľ import potvrdí.
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.
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>
data-pastetoprint-button. Branding vypnete nastavením
data-pastetoprint-brand="false".
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'
});
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 |
6. Priebeh komunikácie
- Hosťovský web vytvorí jednorazový identifikátor
nonce. - Po kliknutí používateľa otvorí
https://www.pastetoprint.com/?externalImport=1&nonce=...&sourceOrigin=.... - SDK opakovane odošle správu
pasteToPrint.connect, kým sa cieľové okno nenačíta. - pasteToPrint odpovie správou
pasteToPrint.ready. - SDK overí
event.origin,event.sourceanonce, potom odošlepasteToPrint.import. - pasteToPrint zobrazí používateľovi náhľad a vyžiada potvrdenie.
- 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
postMessagevždy použite presný cieľhttps://www.pastetoprint.com. Nepoužívajte*. - Pri prijímaní odpovede overte
event.origin,event.sourceajnonce. 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
dataUrlje 1 400 000 znakov. Prijímač odmietne hodnotu nad 1 500 000 znakov.
8. Testovanie
Pred odovzdaním integrácie overte nasledujúce scenáre:
- Po kliknutí sa otvorí nové okno pasteToPrint.
- pasteToPrint zobrazí dialóg s náhľadom importovaného obsahu.
- Po potvrdení sa text alebo QR kód zobrazí v editore a v náhľade tlače.
- Pri zrušení sa obsah dokumentu nezmení.
- Ak používateľ zablokuje vyskakovacie okná, hosťovský web zobrazí zrozumiteľnú chybu.
- Príliš veľký obrázok je odmietnutý so zrozumiteľnou správou.
- 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.
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. |