πŸš€ PDF Generator Service

БСрвис для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ PDF Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ· Handlebars шаблонов с использованиСм Nitro.js ΠΈ Puppeteer.

ДоступныС эндпоинты:

POST /v1/generate-pdf

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ PDF Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· локального шаблона ΠΈΠ»ΠΈ строки шаблона.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса:

{
  "template": "имя_шаблона",           // Π˜Π›Π˜
  "templateString": "{{title}}",      // строка шаблона
  "data": {                           // Π΄Π°Π½Π½Ρ‹Π΅ для шаблона
    "title": "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ",
    "content": "Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅"
  },
  "options": {                        // ΠΎΠΏΡ†ΠΈΠΈ PDF (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)
    "format": "A4",                   // A4, A3, A5, Letter, Legal, Tabloid
    "orientation": "portrait",        // portrait, landscape
    "margin": {
      "top": "20mm",
      "right": "20mm", 
      "bottom": "20mm",
      "left": "20mm"
    },
    "printBackground": true,          // ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΠ½Π°
    "displayHeaderFooter": false,     // ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ/ΠΏΠΎΠ΄Π²Π°Π»
    "scale": 1                        // ΠΌΠ°ΡΡˆΡ‚Π°Π± (0.1 - 2.0)
  },
  "filename": "document.pdf"          // имя Ρ„Π°ΠΉΠ»Π° (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)
}

GET /

Главная страница с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ API (эта страница).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

1. ГСнСрация PDF ΠΈΠ· строки шаблона:

curl -X POST http://localhost:3000/v1/generate-pdf \
  -H "Content-Type: application/json" \
  -d '{
    "templateString": "<h1>{{title}}</h1><p>{{content}}</p>",
    "data": {
      "title": "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!",
      "content": "Π­Ρ‚ΠΎ ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ PDF Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚."
    },
    "filename": "hello-world.pdf"
  }' \
  --output hello-world.pdf

2. ГСнСрация с настройками PDF:

curl -X POST http://localhost:3000/v1/generate-pdf \
  -H "Content-Type: application/json" \
  -d '{
    "templateString": "<h1>{{title}}</h1><p>{{content}}</p>",
    "data": {
      "title": "ΠžΡ‚Ρ‡Π΅Ρ‚",
      "content": "Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°..."
    },
    "options": {
      "format": "A4",
      "orientation": "landscape",
      "margin": {
        "top": "15mm",
        "bottom": "15mm",
        "left": "15mm", 
        "right": "15mm"
      }
    }
  }' \
  --output report.pdf

3. ИспользованиС с JavaScript:

const response = await fetch('/v1/generate-pdf', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    templateString: '<h1>{{title}}</h1>',
    data: { title: 'Мой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚' }
  })
});

if (response.ok) {
  const blob = await response.blob();
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'document.pdf';
  a.click();
}

ВозмоТности:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок:

API Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ стандартныС HTTP статус ΠΊΠΎΠ΄Ρ‹:

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки:
πŸ“š Nitro.js | 🎨 Handlebars | πŸ€– Puppeteer