# Фото в PDF

Источник: https://smartpdf.ru/developers/docs/operations/photo-to-pdf

Собирает фото с телефона в PDF: каждое фото — лист A4 в его ориентации, файл легче за счёт уменьшения. Режим «Скан документа» находит лист на фото, выравнивает перспективу и делает белый фон.

- Запрос: `POST https://api.smartpdf.ru/v1/pdf/photo-to-pdf`, тело — JSON, ключ — заголовок `X-API-Key`

- Инструмент MCP: `photo_to_pdf` (вместо file_id — публичная ссылка file_url)

- Вход: JPG, PNG, WEBP, HEIC, TIFF, BMP — до 10 файлов на бесплатном тарифе, 20 на Про, 50 на Бизнесе

- Результат: PDF

- Единица цены: 10 МБ суммы файлов

## Параметры

| Параметр | Тип | Описание |
|---|---|---|
| `file_ids` (обязательный) | `string[]` | file_id загруженных файлов (POST /v1/upload) — в нужном порядке. |
| `order` | `integer[]` | Порядок страниц — индексы file_ids от 0, каждый ровно один раз. Без него — порядок file_ids. |
| `page` | `string` | a4 — лист A4 в ориентации фото; photo — страница по размеру фото. Значения: `"a4"`, `"photo"`. По умолчанию: `"a4"`. |
| `compact` | `boolean` | Уменьшить фото до 2000 пикселей по длинной стороне и убрать EXIF и геометку. По умолчанию: `true`. |
| `grayscale` | `boolean` | Оттенки серого. По умолчанию: `false`. |
| `mode` | `string` | scan — «Скан документа»: лист выравнивается во весь A4; page, compact и grayscale тогда не действуют. Значения: `"photo"`, `"scan"`. По умолчанию: `"photo"`. |
| `scan_color` | `string` | Для mode: scan — bw: чёрно-белый как со сканера; color: цветной с белым фоном. Значения: `"bw"`, `"color"`. По умолчанию: `"bw"`. |
| `corners` | `array \| null` | Для mode: scan — углы листа на каждом фото в порядке file_ids: [[x, y] × 4] долями кадра (левый верхний, правый верхний, правый нижний, левый нижний) или null — найти автоматически. Без параметра — у всех автоматически. |
| `webhook_url` | `string` | https-адрес: по завершении SmartPDF отправит на него POST с результатом и подписью — вместо опроса статуса (раздел «Вебхуки»). |

## Запрос

Шаг 2 полного цикла: файл уже загружен, статус и скачивание — как в быстром старте (https://smartpdf.ru/developers/docs/quickstart.md).

### cURL

```bash
BODY=$(jq -n --arg file_id_1 "$FILE_ID_1" --arg file_id_2 "$FILE_ID_2" '{file_ids: [$file_id_1, $file_id_2], page: "a4", compact: true}')
curl -sS --fail-with-body -H "X-API-Key: $SMARTPDF_API_KEY" -H "Content-Type: application/json" \
  -d "$BODY" https://api.smartpdf.ru/v1/pdf/photo-to-pdf
```

### Python

```python
task_id = call("POST", "/pdf/photo-to-pdf", json={"file_ids": file_ids, "page": "a4", "compact": True})["task_id"]
```

### Node.js

```javascript
const { task_id } = await call("/pdf/photo-to-pdf", { method: "POST", json: { file_ids: fileIds, page: "a4", compact: true } });
```

### PHP

```php
$taskId = call('POST', '/pdf/photo-to-pdf', ['file_ids' => $fileIds, 'page' => 'a4', 'compact' => true])['task_id'];
```

### Go

```go
payload, _ := json.Marshal(map[string]any{"file_ids": fileIDs, "page": "a4", "compact": true})
call("POST", "/pdf/photo-to-pdf", bytes.NewReader(payload), "application/json", &task)
```

### Java

```java
String body = JSON.writeValueAsString(Map.of("file_ids", fileIds, "page", "a4", "compact", true));
String taskId = call(HttpRequest.newBuilder(URI.create(API + "/pdf/photo-to-pdf"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(body))).get("task_id").asText();
```

### C#

```csharp
var task = await Read(await http.PostAsJsonAsync($"{Api}/pdf/photo-to-pdf", new { file_ids = fileIds, page = "a4", compact = true }));
```

## Ответ

`202 Accepted` — операция оплачена и поставлена в очередь:

```json
{
  "task_id": "3f2c5b0e-8a41-4d7e-9c1f-5d0b8f2e7a64"
}
```

Дальше — GET /v1/tasks/{task_id} (https://smartpdf.ru/developers/docs/tasks.md) или вебхук (https://smartpdf.ru/developers/docs/webhooks.md).
