feat: translate all pages, UI messages and docs and fix SEO redirects and indexing

This commit is contained in:
alam00000 committed 2026-10-25 12:55:21 +05:30
1 parent 5e019de5ae
commit 4edb1718cc
3344 files changed
+415643 -4759

No files matched your search

+136
View File
@@ -0,0 +1,136 @@
# Участие в разработке
Спасибо за интерес к участию в разработке BentoPDF! Это руководство поможет вам начать.
## Начало работы
### Требования
- Node.js 18+
- npm 9+
- Git
### Настройка
```bash
# Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/bentopdf.git
cd bentopdf
# Install dependencies
npm install
# Start development server
npm run dev
```
## Структура проекта
```
bentopdf/
├── src/
│ ├── js/
│ │ ├── config/ # Tool definitions
│ │ ├── logic/ # Tool page logic
│ │ ├── utils/ # Shared utilities
│ │ └── ui.ts # UI helpers
│ ├── pages/ # Tool HTML pages
│ └── css/ # Styles
├── public/
│ ├── locales/ # Translations
│ └── pymupdf-wasm/ # WASM modules
├── docs/ # Documentation (VitePress)
└── scripts/ # Build scripts
```
## Добавление нового инструмента
### Шаг 1: создайте файл логики
Создайте `src/js/logic/your-tool-page.ts`:
```typescript
import { showLoader, hideLoader, showAlert } from '../ui.js';
import { state } from '../state.js';
document.addEventListener('DOMContentLoaded', () => {
// Your tool logic here
});
```
### Шаг 2: создайте HTML-страницу
Создайте `src/pages/your-tool.html` по образцу существующих шаблонов инструментов.
### Шаг 3: зарегистрируйте инструмент
Добавьте в `src/js/config/tools.ts`:
```typescript
{
href: import.meta.env.BASE_URL + 'your-tool.html',
name: 'Your Tool',
icon: 'ph-icon-name',
subtitle: 'Description of your tool.',
}
```
### Шаг 4: добавьте в конфигурацию сборки
Добавьте страницу в `vite.config.ts`:
```typescript
'your-tool': resolve(__dirname, 'src/pages/your-tool.html'),
```
### Шаг 5: добавьте переводы
Добавьте записи во все файлы локалей в `public/locales/`:
```json
{
"yourTool": {
"name": "Your Tool",
"subtitle": "Description"
}
}
```
## Стиль кода
- Используйте TypeScript для всего нового кода
- Следуйте существующим шаблонам для единообразия
- Запускайте `npm run format` перед коммитом
- Без комментариев в рабочем коде (комментарии удаляются при сборке)
## Процесс отправки pull request
1. Создайте ветку для функции: `git checkout -b feature/your-feature`
2. Внесите изменения
3. Тщательно протестируйте: `npm run build`
4. Отправьте PR с понятным описанием
## Перевод
О добавлении новых языков читайте в [TRANSLATION.md](https://github.com/alam00000/bentopdf/blob/main/TRANSLATION.md).
## Лицензионное соглашение контрибьютора
Прежде чем ваш PR будет принят, нужно подписать наше CLA:
- [Индивидуальное CLA (ICLA)](https://github.com/alam00000/bentopdf/blob/main/ICLA.md)
- [Корпоративное CLA (CCLA)](https://github.com/alam00000/bentopdf/blob/main/CCLA.md)
## Помощь
- [GitHub Issues](https://github.com/alam00000/bentopdf/issues)
- [Сообщество в Discord](https://discord.gg/Bgq3Ay3f2w)
## Лицензия
BentoPDF распространяется по двойной лицензии:
- **AGPL-3.0** для проектов с открытым исходным кодом, где вы публикуете весь свой исходный код
- **Коммерческая лицензия** для проприетарных приложений с закрытым кодом: [Получить бессрочную лицензию за $79](https://buy.polar.sh/polar_cl_ThDfffbl733x7oAodcIryCzhlO57ZtcWPq6HJ1qMChd)
Участвуя в разработке, вы соглашаетесь, что ваш вклад будет лицензирован на этих условиях.
+80
View File
@@ -0,0 +1,80 @@
# Начало работы
Добро пожаловать в BentoPDF! Это руководство поможет вам быстро начать работу.
## Что такое BentoPDF?
BentoPDF: бесплатный набор PDF-инструментов с открытым исходным кодом и упором на приватность, который работает **целиком в вашем браузере**. Ваши файлы никогда не покидают устройство: вся обработка выполняется локально с помощью WebAssembly (WASM).
## Быстрый старт
### Вариант 1: размещённая версия
Откройте [bentopdf.com](https://www.bentopdf.com) и пользуйтесь BentoPDF сразу, без установки.
### Вариант 2: самостоятельный хостинг в Docker
> [!IMPORTANT]
> Для конвертации файлов Office нужен `SharedArrayBuffer`, а для него требуется всё перечисленное:
>
> - `Cross-Origin-Opener-Policy: same-origin`
> - `Cross-Origin-Embedder-Policy: require-corp`
> - безопасный контекст
>
> `http://localhost` подходит для локального тестирования, так как браузеры считают loopback доверенным. `http://192.168.x.x` и другие адреса локальной сети обычно не считаются, поэтому для конвертации Word/Excel/PowerPoint с других устройств в вашей сети понадобится HTTPS.
```bash
# Pull and run the Docker image (self-hosted build)
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
# Or use Docker Compose
curl -O https://raw.githubusercontent.com/alam00000/bentopdf/main/docker-compose.yml
docker compose up -d
```
> [!TIP]
> BentoPDF выпускается в двух сборках: **Self-Hosted** (`bentopdf-simple`, используется выше) для внутренних, командных и корпоративных развёртываний и **Commercial** (`bentopdf:latest`), которую использует сам bentopdf.com и владельцы коммерческой лицензии для публичных развёртываний. В обеих одинаковые PDF-инструменты, а Commercial добавляет главный экран, FAQ, отзывы и подвал bentopdf.com. Если сомневаетесь, берите сборку Self-Hosted.
Затем откройте `http://localhost:3000` в браузере.
> [!NOTE]
> Если вы готовите изолированное (air-gapped) развёртывание OCR, помимо воркера Tesseract, основного рантайма и файлов traineddata нужно разместить внутри сети и шрифты текстового слоя OCR. Полная настройка описана в разделе [Самостоятельный хостинг](/ru/self-hosting/), включая `VITE_OCR_FONT_BASE_URL` и поставляемый каталог `ocr-fonts/`.
### Вариант 3: сборка из исходников
```bash
# Clone the repository
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
# Install dependencies
npm install
# Start development server
npm run dev
```
## Возможности вкратце
| Категория | Инструменты |
| ---------------------- | --------------------------------------------------------------------- |
| **Конвертация в PDF** | Word, Excel, PowerPoint, изображения, Markdown, EPUB, MOBI и другое |
| **Конвертация из PDF** | JPG, PNG, текст, Excel, SVG и другое |
| **Правка и аннотации** | Подпись, выделение, скрытие данных, заполнение форм, штампы |
| **Организация** | Объединение, разделение, поворот, удаление страниц, изменение порядка |
| **Оптимизация** | Сжатие, восстановление, сведение слоёв, OCR |
| **Безопасность** | Шифрование, расшифровка, снятие ограничений |
## Поддержка браузеров
BentoPDF лучше всего работает в современных браузерах:
- ✅ Chrome/Edge 90+
- ✅ Firefox 90+
- ✅ Safari 15+
## Дальнейшие шаги
- [Изучите все инструменты](/ru/tools/)
- [Разверните BentoPDF у себя](/ru/self-hosting/)
- [Участвуйте в проекте](/ru/contributing)
+42
View File
@@ -0,0 +1,42 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: 'BentoPDF'
text: 'Бесплатные PDF-инструменты с открытым кодом'
tagline: Обрабатывайте PDF прямо в браузере. Без загрузок. Без серверов. Полная приватность.
actions:
- theme: brand
text: Начать
link: /ru/getting-started
- theme: alt
text: Инструменты
link: /ru/tools/
- theme: alt
text: Свой хостинг
link: /ru/self-hosting/
- theme: alt
text: Коммерческая лицензия
link: /ru/licensing
features:
- icon: 🔒
title: На 100% приватно
details: Ваши файлы не покидают устройство. Вся обработка выполняется локально в браузере с помощью WebAssembly.
- icon: ⚡
title: Быстро и бесплатно
details: Без регистрации, без ограничений, без водяных знаков. Обрабатывайте неограниченное число PDF бесплатно и навсегда.
- icon: 🛠️
title: Более 50 инструментов
details: Конвертация, правка, объединение, разделение, сжатие, подпись, OCR и многое другое. Всё нужное в одном месте.
- icon: 🌐
title: Можно развернуть у себя
details: 'Развёртывайте на своей инфраструктуре: Docker, Vercel, Netlify, AWS или полностью изолированные среды с собственными воркерами OCR, языковыми данными и шрифтами текстового слоя.'
---
## OCR офлайн
Если вы размещаете BentoPDF у себя в изолированной или офлайн-среде, для OCR нужны не только воркер Tesseract и файлы traineddata. Чтобы получать PDF с возможностью поиска, шрифты текстового слоя OCR тоже должны раздаваться изнутри.
Полную настройку, включая `VITE_OCR_FONT_BASE_URL`, поставляемый каталог `ocr-fonts/` и обновлённый процесс для изолированных сред, смотрите в разделе [Самостоятельный хостинг](/ru/self-hosting/).
+92
View File
@@ -0,0 +1,92 @@
# Commercial License
BentoPDF is dual-licensed under **AGPL-3.0** (for open-source projects) and a **Commercial License** (for proprietary/closed-source applications).
::: tip Full Details
For complete licensing information, delivery details, AGPL component notices, and invoicing, visit our [Licensing Page](https://www.bentopdf.com/licensing).
:::
## Get a Commercial License
**[Get Lifetime License for $79](https://buy.polar.sh/polar_cl_ThDfffbl733x7oAodcIryCzhlO57ZtcWPq6HJ1qMChd)**. A one-time purchase that includes all future updates forever.
## When Do You Need a Commercial License?
| Use Case | License Required |
| ------------------------------------------- | ---------------------- |
| Open-source project with public source code | AGPL-3.0 (Free) |
| Internal company tool (not distributed) | AGPL-3.0 (Free) |
| Proprietary/closed-source application | **Commercial License** |
| SaaS product without source code disclosure | **Commercial License** |
| Redistributing without AGPL compliance | **Commercial License** |
## Delivery & Licensing Model
- **No license key is required or provided.** BentoPDF intentionally does not use license keys to streamline deployment and reduce operational friction for users.
- Upon purchase, users receive a ZIP archive containing the complete BentoPDF source code and binaries.
- The source code provided is identical to the code published in our public open-source repository.
**GitHub Repository:** [github.com/alam00000/bentopdf](https://github.com/alam00000/bentopdf)
## Important Notice on Third-Party Components
::: info AGPL Components — Pre-configured via CDN
BentoPDF **does not bundle** AGPL-licensed processing libraries in its source code. These components are loaded at runtime from CDN URLs that are **pre-configured by default** — all features work out of the box with zero setup.
| Component | License | Status |
| --------------- | -------- | ---------------------- |
| **PyMuPDF** | AGPL-3.0 | Pre-configured via CDN |
| **Ghostscript** | AGPL-3.0 | Pre-configured via CDN |
| **CoherentPDF** | AGPL-3.0 | Pre-configured via CDN |
WASM module URLs are configured via environment variables at build time (`.env.production`). The defaults point to jsDelivr CDN. For custom deployments (air-gapped, self-hosted), you can override via environment variables, Docker build args, or per-user via **Advanced Settings** in the UI.
See [Self-Hosting > WASM Configuration](/ru/self-hosting/#конфигурация-wasm-компоненты-agpl) for details.
This approach ensures:
- BentoPDF's core code remains under its dual-license (AGPL-3.0 / Commercial)
- WASM binaries are loaded at runtime, not included in the source
- Clear compliance boundaries for commercial users
:::
::: tip Commercial License & AGPL Features
The commercial license covers BentoPDF's own code. If you configure and use AGPL components (PyMuPDF, Ghostscript, CoherentPDF), you must still comply with their respective AGPL-3.0 license terms, which may require source code disclosure if you distribute modified versions.
:::
## Invoicing
- Payments are handled by [Polar](https://polar.sh), which automatically emails an invoice after purchase.
- Polar handles VAT invoices for businesses in applicable regions. Select **"I'm purchasing as a business"** at checkout and enter your billing address and Tax/VAT number.
**Questions?** Contact [contact@bentopdf.com](mailto:contact@bentopdf.com) with your purchase details.
## What's Included
| Feature | Included |
| ----------------------------- | -------------- |
| Full source code | ✅ |
| All 50+ PDF tools | ✅ |
| Self-hosting rights | ✅ |
| Lifetime updates | ✅ |
| Remove branding (Simple Mode) | ✅ |
| Commercial support | ✅ (via email) |
| Priority feature requests | ✅ |
## FAQ
### Do I need a license key to use BentoPDF?
No. BentoPDF does not use license keys. The commercial license grants you legal rights to use the software in proprietary applications.
### Can I use BentoPDF in my SaaS product?
Yes, with a commercial license. Without it, you must comply with AGPL-3.0, which requires you to make your full source code available to users.
### What about the AGPL components?
Components like CoherentPDF are licensed under AGPL v3 and remain under that license. The commercial license covers BentoPDF's own code but does not override third-party AGPL obligations.
### How do I get an invoice?
Polar emails your invoice automatically after purchase. For a VAT invoice, select "I'm purchasing as a business" at checkout. If you need anything else, email [contact@bentopdf.com](mailto:contact@bentopdf.com) with your purchase details.
+275
View File
@@ -0,0 +1,275 @@
# Развёртывание на Apache
Размещение BentoPDF на Apache HTTP Server.
## Требования
- Apache 2.4+
- Включённый mod_rewrite
- SSL-сертификат (рекомендуется)
## Шаг 1: соберите проект
```bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build
```
Чтобы настроить брендинг, задайте переменные окружения перед сборкой:
```bash
VITE_BRAND_NAME="AcmePDF" VITE_BRAND_LOGO="images/acme-logo.svg" npm run build
```
## Шаг 2: скопируйте файлы
```bash
sudo mkdir -p /var/www/bentopdf
sudo cp -r dist/* /var/www/bentopdf/
sudo chown -R www-data:www-data /var/www/bentopdf
```
## Шаг 3: конфигурация Apache
Создайте `/etc/apache2/sites-available/bentopdf.conf`:
```apache
<VirtualHost *:80>
ServerName your-domain.com
Redirect permanent / https://your-domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName your-domain.com
DocumentRoot /var/www/bentopdf
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/your-domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem
<Directory /var/www/bentopdf>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# WASM MIME type
AddType application/wasm .wasm
# Prevent double-compression of pre-compressed files
SetEnvIfNoCase Request_URI "\.gz$" no-gzip
# Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json application/wasm
</IfModule>
# Cache headers
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/wasm "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
</IfModule>
# Required headers for SharedArrayBuffer (LibreOffice WASM)
Header always set Cross-Origin-Embedder-Policy "require-corp"
Header always set Cross-Origin-Opener-Policy "same-origin"
Header always set Cross-Origin-Resource-Policy "cross-origin"
# Security headers
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
# Pre-compressed LibreOffice WASM files
<FilesMatch "soffice\.wasm\.gz$">
ForceType application/wasm
Header set Content-Encoding "gzip"
</FilesMatch>
<FilesMatch "soffice\.data\.gz$">
ForceType application/octet-stream
Header set Content-Encoding "gzip"
</FilesMatch>
</VirtualHost>
```
## Шаг 4: .htaccess для маршрутизации
Создайте `/var/www/bentopdf/.htaccess`:
```apache
RewriteEngine On
RewriteBase /
# Existing files/dirs - serve directly
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# ============================================
# LANGUAGE ROUTES
# ============================================
# Supported languages: de, es, zh, zh-TW, vi, it, id, tr, fr, pt
# English has no prefix - served from root
# English prefix redirects to root
RewriteRule ^en/?$ / [R=301,L]
RewriteRule ^en/(.+)$ /$1 [R=301,L]
# Language prefix root (e.g., /de/ -> /de/index.html)
RewriteCond %{DOCUMENT_ROOT}/$1/index.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/?$ /$1/index.html [L]
# Language prefix with path (e.g., /de/merge-pdf -> /de/merge-pdf.html)
RewriteCond %{DOCUMENT_ROOT}/$1/$2.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/([^/]+)/?$ /$1/$2.html [L]
# ============================================
# ADD .HTML EXTENSION (ROOT LEVEL)
# ============================================
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/]+)$ $1.html [L]
ErrorDocument 404 /404.html
```
## Шаг 5: включите нужные модули
```bash
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod expires
sudo a2enmod deflate
```
## Шаг 6: включите сайт
```bash
sudo a2ensite bentopdf.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
```
## Развёртывание в подкаталоге
Чтобы разместить по адресу `/pdf/`:
1. Соберите проект с базовым URL:
```bash
BASE_URL=/pdf/ npm run build
```
2. Обновите `.htaccess`:
```apache
RewriteEngine On
RewriteBase /pdf/
# Existing files/dirs - serve directly
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Language routes
RewriteRule ^en/?$ /pdf/ [R=301,L]
RewriteRule ^en/(.+)$ /pdf/$1 [R=301,L]
RewriteCond %{DOCUMENT_ROOT}/pdf/$1/index.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/?$ /pdf/$1/index.html [L]
RewriteCond %{DOCUMENT_ROOT}/pdf/$1/$2.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/([^/]+)/?$ /pdf/$1/$2.html [L]
# Root level .html extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/]+)$ $1.html [L]
ErrorDocument 404 /pdf/404.html
```
## Устранение неполадок
### Ошибки 404 для WASM
Убедитесь, что настроен MIME-тип:
```apache
AddType application/wasm .wasm
```
### Sign PDF или Form Filler показывают пустой просмотрщик (ошибка MIME для `.mjs`)
Если в консоли браузера видно:
```
Failed to load module script: The server responded with a non-JavaScript
MIME type of "application/octet-stream". Strict MIME type checking is
enforced for module scripts per HTML spec.
```
…и неудачный запрос заканчивается на `.mjs`, в конфигурации Apache нет сопоставления `.mjs → application/javascript`. Встроенный PDF-просмотрщик поставляется с ES-модулями с расширением `.mjs`, а стандартный `mime.types` Apache их по умолчанию не содержит.
Добавьте в VirtualHost или `.htaccess`:
```apache
AddType application/javascript .mjs
```
Затем перезагрузите Apache:
```bash
sudo apache2ctl configtest && sudo systemctl reload apache2
```
Для проверки откройте DevTools браузера → вкладка Network, найдите неудачный запрос `.mjs` и посмотрите заголовок ответа `Content-Type`. Теперь он должен быть `application/javascript`, а не `application/octet-stream`.
### Rewrite не работает
Проверьте, что mod_rewrite включён:
```bash
sudo a2enmod rewrite
```
### Конвертация Word/ODT/Excel в PDF не работает
LibreOffice WASM требует `SharedArrayBuffer`, для которого нужны такие заголовки:
```apache
Header always set Cross-Origin-Embedder-Policy "require-corp"
Header always set Cross-Origin-Opener-Policy "same-origin"
```
Также нужен безопасный контекст. `http://localhost` подходит для локального тестирования, а для `http://192.168.x.x` и других адресов локальной сети обычно требуется HTTPS. Если заголовки есть, но `window.crossOriginIsolated` по-прежнему `false`, проверьте, не открывается ли страница по обычному HTTP с адреса, отличного от loopback.
Предварительно сжатым файлам `.wasm.gz` и `.data.gz` также нужен правильный `Content-Encoding`:
```apache
<FilesMatch "soffice\.wasm\.gz$">
ForceType application/wasm
Header set Content-Encoding "gzip"
</FilesMatch>
<FilesMatch "soffice\.data\.gz$">
ForceType application/octet-stream
Header set Content-Encoding "gzip"
</FilesMatch>
```
Убедитесь, что `mod_headers` включён: `sudo a2enmod headers`
### Отказано в доступе
```bash
sudo chown -R www-data:www-data /var/www/bentopdf
sudo chmod -R 755 /var/www/bentopdf
```
+200
View File
@@ -0,0 +1,200 @@
# Развёртывание на AWS S3 + CloudFront
Размещение BentoPDF на AWS для максимального контроля и масштабируемости.
## Архитектура
```
User → CloudFront (CDN) → S3 (Static Files)
```
## Шаг 1: создайте S3-бакет
```bash
# Create bucket
aws s3 mb s3://your-bentopdf-bucket --region us-east-1
# Enable static website hosting
aws s3 website s3://your-bentopdf-bucket \
--index-document index.html \
--error-document index.html
```
## Шаг 2: сборка и загрузка
```bash
# Build the project (optionally with custom branding)
# VITE_BRAND_NAME="AcmePDF" VITE_BRAND_LOGO="images/acme-logo.svg" npm run build
npm run build
# Sync to S3
aws s3 sync dist/ s3://your-bentopdf-bucket \
--delete \
--cache-control "max-age=31536000"
# Set correct MIME types for WASM
aws s3 cp s3://your-bentopdf-bucket/ s3://your-bentopdf-bucket/ \
--recursive \
--exclude "*" \
--include "*.wasm" \
--content-type "application/wasm" \
--metadata-directive REPLACE
# Set correct MIME type for ES module files (.mjs)
# S3 defaults .mjs to application/octet-stream, which browsers refuse to
# execute as ES modules. The bundled PDF viewer (Sign PDF, Form Filler)
# ships ES modules with .mjs extensions and will fail without this step.
aws s3 cp s3://your-bentopdf-bucket/ s3://your-bentopdf-bucket/ \
--recursive \
--exclude "*" \
--include "*.mjs" \
--content-type "application/javascript" \
--metadata-directive REPLACE
```
## Шаг 3: создайте дистрибутив CloudFront
```bash
aws cloudfront create-distribution \
--origin-domain-name your-bentopdf-bucket.s3.amazonaws.com \
--default-root-object index.html
```
Или воспользуйтесь консолью AWS:
1. Откройте CloudFront → Create distribution
2. Origin domain: выберите свой S3-бакет
3. Включите "Origin Access Control"
4. Default root object: `index.html`
5. Создайте дистрибутив
## Шаг 3b: политика заголовков ответа (обязательна для LibreOffice WASM)
Конвертации на основе LibreOffice (Word, Excel, PowerPoint в PDF) требуют `SharedArrayBuffer`, для которого нужны определённые заголовки ответа. Создайте политику заголовков ответа CloudFront (Response Headers Policy):
1. Откройте CloudFront → Policies → Response headers
2. Создайте собственную политику с такими заголовками:
| Заголовок | Значение |
| ------------------------------ | -------------- |
| `Cross-Origin-Embedder-Policy` | `require-corp` |
| `Cross-Origin-Opener-Policy` | `same-origin` |
| `Cross-Origin-Resource-Policy` | `cross-origin` |
3. Привяжите политику к default cache behavior вашего дистрибутива
Или через CLI:
```bash
aws cloudfront create-response-headers-policy \
--response-headers-policy-config '{
"Name": "BentoPDF-COEP-COOP",
"CustomHeadersConfig": {
"Quantity": 3,
"Items": [
{"Header": "Cross-Origin-Embedder-Policy", "Value": "require-corp", "Override": true},
{"Header": "Cross-Origin-Opener-Policy", "Value": "same-origin", "Override": true},
{"Header": "Cross-Origin-Resource-Policy", "Value": "cross-origin", "Override": true}
]
}
}'
```
## Шаг 3c: метаданные S3 для предварительно сжатых файлов WASM
Файлы LibreOffice WASM предварительно сжаты (`.wasm.gz`, `.data.gz`). Задайте правильные Content-Type и Content-Encoding, чтобы браузеры их распаковывали:
```bash
# Set correct headers for soffice.wasm.gz
aws s3 cp s3://your-bentopdf-bucket/libreoffice-wasm/soffice.wasm.gz \
s3://your-bentopdf-bucket/libreoffice-wasm/soffice.wasm.gz \
--content-type "application/wasm" \
--content-encoding "gzip" \
--metadata-directive REPLACE
# Set correct headers for soffice.data.gz
aws s3 cp s3://your-bentopdf-bucket/libreoffice-wasm/soffice.data.gz \
s3://your-bentopdf-bucket/libreoffice-wasm/soffice.data.gz \
--content-type "application/octet-stream" \
--content-encoding "gzip" \
--metadata-directive REPLACE
```
::: warning Важно
Без политики заголовков ответа `SharedArrayBuffer` недоступен, и конвертации LibreOffice WASM зависнут примерно на 55%. Без правильного Content-Encoding у файлов `.gz` браузер получает необработанные байты gzip, и компиляция WASM завершается ошибкой.
:::
## Шаг 4: политика S3-бакета
Разрешите CloudFront доступ к бакету:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontAccess",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bentopdf-bucket/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::ACCOUNT_ID:distribution/DISTRIBUTION_ID"
}
}
}
]
}
```
## Шаг 5: собственные страницы ошибок
Настройте возврат `index.html` при 404 для маршрутизации SPA:
1. CloudFront → Error pages
2. Создайте собственный ответ на ошибку:
- HTTP error code: 404
- Response page path: `/index.html`
- HTTP response code: 200
## Оценка стоимости
| Ресурс | Ориентировочная стоимость |
| -------------------------- | ------------------------- |
| S3 Storage (~500MB) | ~$0.01/мес. |
| CloudFront (1TB transfer) | ~$85/мес. |
| CloudFront (10GB transfer) | ~$0.85/мес. |
::: tip
Используйте S3 Intelligent Tiering, чтобы снизить расходы на редко запрашиваемые файлы.
:::
## Автоматизация с Terraform
```hcl
# main.tf
resource "aws_s3_bucket" "bentopdf" {
bucket = "your-bentopdf-bucket"
}
resource "aws_cloudfront_distribution" "bentopdf" {
origin {
domain_name = aws_s3_bucket.bentopdf.bucket_regional_domain_name
origin_id = "S3Origin"
}
enabled = true
default_root_object = "index.html"
default_cache_behavior {
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "S3Origin"
viewer_protocol_policy = "redirect-to-https"
}
}
```
+154
View File
@@ -0,0 +1,154 @@
# Развёртывание на Cloudflare Pages
[Cloudflare Pages](https://pages.cloudflare.com) предлагает быстрый глобальный хостинг статических сайтов с неограниченным трафиком.
## Быстрое развёртывание
1. Откройте [Cloudflare Pages](https://dash.cloudflare.com/?to=/:account/pages)
2. Нажмите "Create a project"
3. Подключите свой репозиторий GitHub
## Настройка сборки
| Параметр | Значение |
| ---------------------- | --------------- |
| Framework preset | None |
| Build command | `npm run build` |
| Build output directory | `dist` |
| Root directory | `/` |
## Переменные окружения
Добавьте их в Settings → Environment variables:
| Переменная | Значение |
| ----------------------- | ----------------------------------------------------------- |
| `NODE_VERSION` | `18` |
| `SIMPLE_MODE` | `false` (необязательно) |
| `VITE_BRAND_NAME` | Своё название бренда (необязательно) |
| `VITE_BRAND_LOGO` | Путь к логотипу относительно `public/` (необязательно) |
| `VITE_FOOTER_TEXT` | Свой текст подвала/копирайта (необязательно) |
| `VITE_DEFAULT_LANGUAGE` | Язык интерфейса по умолчанию, например `fr` (необязательно) |
## Файл конфигурации
Создайте `_headers` в папке `public`:
```
# Required security headers for SharedArrayBuffer (used by LibreOffice WASM)
/*
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: cross-origin
# Pre-compressed LibreOffice WASM binary
/libreoffice-wasm/soffice.wasm.gz
Content-Type: application/wasm
Content-Encoding: gzip
Cache-Control: public, max-age=31536000, immutable
# Pre-compressed LibreOffice WASM data
/libreoffice-wasm/soffice.data.gz
Content-Type: application/octet-stream
Content-Encoding: gzip
Cache-Control: public, max-age=31536000, immutable
# Cache WASM files aggressively
/*.wasm
Cache-Control: public, max-age=31536000, immutable
Content-Type: application/wasm
# Service worker
/sw.js
Cache-Control: no-cache
```
::: warning Важно
Заголовки `Cross-Origin-Embedder-Policy` и `Cross-Origin-Opener-Policy` обязательны для конвертации Word/ODT/Excel/PowerPoint в PDF. Без них `SharedArrayBuffer` недоступен, и движок LibreOffice WASM не сможет инициализироваться.
:::
Создайте `_redirects` для маршрутизации SPA:
```
/* /index.html 200
```
## Собственный домен
1. Откройте свой проект Pages
2. Нажмите "Custom domains"
3. Добавьте свой домен
4. Cloudflare автоматически настроит DNS, если домен находится в Cloudflare
## Преимущества
- **Бесплатный неограниченный трафик**
- **Глобальная CDN** с более чем 300 узлами
- **Автоматический HTTPS**
- **Предпросмотр развёртываний** для pull request
- **Быстрые сборки**
## Устранение неполадок
### Загрузка больших файлов
Cloudflare Pages поддерживает файлы размером до 25 МБ. Модули WASM должны проходить, но если вы упрётесь в лимит, попробуйте:
```bash
# Split large files during build
npm run build
```
### Ограничения размера Worker
Если вы используете Cloudflare Workers для сложной маршрутизации, учтите лимит 1 МБ на бесплатных тарифах.
## CORS-прокси Worker (для цифровых подписей)
Инструменту цифровой подписи нужен CORS-прокси для получения цепочек сертификатов. Разверните входящий в комплект worker:
```bash
cd cloudflare
npx wrangler login
npx wrangler deploy
```
### Функции безопасности
| Функция | Описание |
| ------------------------- | ----------------------------------- |
| **Ограничение URL** | Разрешены только URL сертификатов |
| **Лимит размера файла** | Максимум 10 МБ на запрос |
| **Ограничение частоты** | 60 запросов/IP/мин (нужен KV) |
| **Блокировка частных IP** | Блокирует localhost и внутренние IP |
### Включение ограничения частоты
```bash
# Create KV namespace
npx wrangler kv namespace create "RATE_LIMIT_KV"
# Add to wrangler.toml with returned ID:
# [[kv_namespaces]]
# binding = "RATE_LIMIT_KV"
# id = "YOUR_ID"
npx wrangler deploy
```
### Сборка с URL прокси
```bash
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build
```
Или с Docker:
```bash
export VITE_CORS_PROXY_URL="https://your-worker.workers.dev"
DOCKER_BUILDKIT=1 docker build \
--secret id=VITE_CORS_PROXY_URL,env=VITE_CORS_PROXY_URL \
-t your-bentopdf .
```
> **Примечание:** настройку подписи HMAC смотрите в [README](https://github.com/alam00000/bentopdf#digital-signature-cors-proxy-required).
+180
View File
@@ -0,0 +1,180 @@
# CORS-прокси для получения сертификатов
Инструмент цифровой подписи использует CORS-прокси для получения сертификатов издателей у внешних удостоверяющих центров (CA). Это нужно, потому что многие серверы CA не добавляют заголовки CORS в ответы, и браузер не может запросить сертификаты напрямую.
Кроме того, многие серверы CA отдают сертификаты по обычному HTTP. Если ваш экземпляр BentoPDF работает по HTTPS, браузеры блокируют такие HTTP-запросы (политика смешанного содержимого). CORS-прокси решает обе проблемы: запросы идут через HTTPS-endpoint с нужными заголовками.
## Как это работает
При подписании PDF сертификатом:
1. Библиотека `zgapdfsigner` пытается построить полную цепочку сертификатов
2. Она запрашивает сертификаты издателей по URL из расширения AIA (Authority Information Access) вашего сертификата
3. Эти запросы идут через CORS-прокси, который добавляет нужные заголовки `Access-Control-Allow-Origin`
4. Прокси возвращает данные сертификата в браузер
## Собственный CORS-прокси
Если вы размещаете BentoPDF у себя, для работы цифровых подписей с сертификатами, которым нужна загрузка цепочки, потребуется развернуть собственный CORS-прокси.
### Вариант 1: Cloudflare Workers (рекомендуется)
1. **Установите Wrangler CLI**:
```bash
npm install -g wrangler
```
2. **Войдите в Cloudflare**:
```bash
wrangler login
```
3. **Клонируйте BentoPDF и обновите разрешённые источники**:
```bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf/cloudflare
```
Откройте `cors-proxy-worker.js` и замените массив `ALLOWED_ORIGINS` на свой домен:
```js
const ALLOWED_ORIGINS = [
'https://your-domain.com',
'https://www.your-domain.com',
];
```
::: warning Важно
Без этого изменения прокси отклонит все запросы с вашего сайта с ошибкой **403 Forbidden**. По умолчанию разрешены только запросы с `bentopdf.com`.
:::
4. **Разверните прокси**:
```bash
wrangler deploy
```
Запомните URL своего worker (например, `https://bentopdf-cors-proxy.your-subdomain.workers.dev`).
5. **Пересоберите BentoPDF с URL прокси**:
Если вы используете Docker:
```bash
export VITE_CORS_PROXY_URL="https://your-worker.workers.dev"
DOCKER_BUILDKIT=1 docker build \
--secret id=VITE_CORS_PROXY_URL,env=VITE_CORS_PROXY_URL \
-t your-bentopdf .
```
Если вы собираете из исходников:
```bash
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build
```
### Вариант 2: собственный серверный прокси
Можно создать и собственный endpoint прокси. Требования:
1. Принимать GET-запросы с параметром запроса `url`
2. Запрашивать этот URL со своего сервера (на стороне сервера ограничений CORS нет)
3. Возвращать ответ с такими заголовками:
- `Access-Control-Allow-Origin: https://your-domain.com`
- `Access-Control-Allow-Methods: GET, OPTIONS`
- `X-Content-Type-Options: nosniff`
Пример реализации на Express.js:
```javascript
app.get('/api/cert-proxy', async (req, res) => {
const targetUrl = req.query.url;
// Validate it's a certificate URL
if (!isValidCertUrl(targetUrl)) {
return res.status(400).json({ error: 'Invalid URL' });
}
try {
const response = await fetch(targetUrl);
const data = await response.arrayBuffer();
res.set('Access-Control-Allow-Origin', 'https://your-domain.com');
res.set('Content-Type', 'application/octet-stream');
res.set('X-Content-Type-Options', 'nosniff');
res.send(Buffer.from(data));
} catch (error) {
res.status(500).json({ error: 'Proxy error' });
}
});
```
## Вопросы безопасности
В поставляемом Cloudflare Worker предусмотрено несколько мер безопасности:
| Функция | Описание |
| --------------------------- | ------------------------------------------------------------------------------------------------ |
| **Проверка источника** | Разрешает запросы только с доменов из `ALLOWED_ORIGINS` |
| **Ограничение URL** | Разрешает только URL сертификатов (`.crt`, `.cer`, `.pem`, `/certs/`, `/ocsp`, `/crl`) |
| **Блокировка частных IP** | Блокирует частные диапазоны IPv4/IPv6, link-local, loopback, десятичные IP и облачные метаданные |
| **Безопасный Content-Type** | Возвращает только безопасные MIME-типы сертификатов, блокирует подмену content-type источником |
| **Лимит размера файла** | Передаёт ответ потоком с лимитом 10 МБ и прерывает загрузку при превышении |
| **Ограничение частоты** | 60 запросов в минуту на IP или IPv6 /64 (нужен KV, при ошибках KV пропускает запросы) |
| **Подписи HMAC** | Необязательная подпись на стороне клиента (сдерживает случайные злоупотребления) |
### DNS rebinding (хостинг вне Cloudflare)
Worker отклоняет любой URL, который разрешается в частный или внутренний IP. Фиксированный список разрешённых хостов использовать нельзя, так как URL цепочек сертификатов указывают на тот CA, который выдал сертификат (FNMT, корпоративные CA и так далее), и адреса заранее неизвестны. Поэтому остаётся небольшое окно для rebinding: тот, кто управляет DNS своего домена, может отдать проверке безопасности публичный IP, а настоящему запросу чуть позже частный.
В Cloudflare это не эксплуатируется: Workers не могут обращаться к частным IP и endpoint метаданных `169.254.169.254`, поэтому rebind ни к чему не приведёт. Только не давайте worker доступа внутрь: не подключайте Tunnel, Service или привязку к частной сети (ему нужен лишь `RATE_LIMIT_KV`).
Если вы запускаете его вне Cloudflare (workerd, Node и подобное) внутри VPC, среда _может_ обращаться к внутренним IP. Поставьте перед ней исходящий файрвол и заблокируйте частные диапазоны: `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `127.0.0.0/8`, `169.254.0.0/16` и их аналоги IPv6. Код приложения не может этого обеспечить, когда вы вне Cloudflare.
## Отключение прокси
Если CORS-прокси вам не нужен, задайте переменной окружения пустую строку:
```
VITE_CORS_PROXY_URL=
```
**Примечание**: без прокси подпись сертификатами, которым нужна внешняя загрузка цепочки (например, FNMT или некоторые корпоративные CA), завершится ошибкой "Failed to fetch".
## Устранение неполадок
### "Signing error: TypeError: Failed to fetch"
Обычно это означает одно из двух:
1. **CORS-прокси не настроен**: задайте `VITE_CORS_PROXY_URL` и пересоберите проект
2. **Смешанное содержимое заблокировано**: ваш сайт работает по HTTPS, а URL издателя сертификата по HTTP. CORS-прокси решает эту проблему.
3. **CORS-прокси отклоняет ваш источник**: проверьте, что ваш домен есть в массиве `ALLOWED_ORIGINS` в `cors-proxy-worker.js`
### "403 Forbidden" от прокси
Вашего домена нет в списке `ALLOWED_ORIGINS`. Отредактируйте `cors-proxy-worker.js`:
```js
const ALLOWED_ORIGINS = ['https://your-domain.com'];
```
Затем разверните заново: `npx wrangler deploy`
### Проверка прокси
```bash
curl -H "Origin: https://your-domain.com" \
"https://your-proxy.workers.dev?url=http://www.cert.fnmt.es/certs/ACUSU.crt"
```
### Сертификаты, работающие без прокси
Некоторые сертификаты содержат полную цепочку в файле P12/PFX и не требуют внешней загрузки:
- Самоподписанные сертификаты
- Некоторые коммерческие CA, которые включают промежуточные сертификаты
- Сертификаты, для которых вы вручную собрали полную цепочку
+622
View File
@@ -0,0 +1,622 @@
# Развёртывание с Docker / Podman
Самый простой способ развернуть BentoPDF у себя в рабочей среде.
> [!IMPORTANT]
> **Обязательные заголовки для конвертации файлов Office**
>
> Инструментам на основе LibreOffice (конвертация Word, Excel, PowerPoint) для поддержки `SharedArrayBuffer` нужны такие HTTP-заголовки:
>
> - `Cross-Origin-Opener-Policy: same-origin`
> - `Cross-Origin-Embedder-Policy: require-corp`
>
> Страница также должна отдаваться из безопасного контекста. `http://localhost` подходит для локального тестирования, а `http://192.168.x.x` и другие адреса локальной сети обычно под это не подпадают, поэтому конвертация Office по обычному HTTP не сработает, даже если заголовки есть.
>
> Официальные образы контейнеров включают эти заголовки. Если вы используете обратный прокси (Traefik, Caddy и т. д.), убедитесь, что эти заголовки сохраняются или добавляются, и используйте HTTPS для доступа не через loopback.
> [!TIP]
> **Пользователям Podman:** все команды `docker` работают и с Podman, если заменить `docker` на `podman`, а `docker-compose` на `podman-compose`.
## Быстрый старт
> [!TIP]
> BentoPDF выпускается в двух сборках:
>
> - **Сборка Self-Hosted**: `ghcr.io/alam00000/bentopdf-simple:latest`. Все PDF-инструменты **без** маркетинговой обвязки (без главного экрана, FAQ, отзывов и подвала). Используйте её для внутренних, командных и корпоративных развёртываний. Это **не** урезанная «лёгкая» версия.
> - **Сборка Commercial**: `ghcr.io/alam00000/bentopdf:latest`. Полный маркетинговый сайт, который использует сам bentopdf.com и владельцы коммерческой лицензии для публичных развёртываний.
>
> Если сомневаетесь, берите сборку Self-Hosted.
```bash
# Docker
docker run -d \
--name bentopdf \
-p 3000:8080 \
--restart unless-stopped \
ghcr.io/alam00000/bentopdf-simple:latest
# Podman
podman run -d \
--name bentopdf \
-p 3000:8080 \
ghcr.io/alam00000/bentopdf-simple:latest
```
## Docker Compose / Podman Compose
Создайте `docker-compose.yml`:
```yaml
services:
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
container_name: bentopdf
ports:
- '3000:8080'
restart: unless-stopped
healthcheck:
test: ['CMD', 'wget', '--spider', '-q', 'http://localhost:8080']
interval: 30s
timeout: 10s
retries: 3
```
Запустите:
```bash
# Docker Compose
docker compose up -d
# Podman Compose
podman-compose up -d
```
## Собственный образ
```dockerfile
# Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginxinc/nginx-unprivileged:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
```
Соберите и запустите:
```bash
docker build -t bentopdf:custom .
docker run -d -p 3000:8080 bentopdf:custom
```
## Переменные окружения
| Переменная | Описание | По умолчанию |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| `SIMPLE_MODE` | Собрать вариант Self-Hosted (скрывает маркетинговую обвязку bentopdf.com: главный экран, FAQ, отзывы, подвал). Все PDF-инструменты остаются. | `false` |
| `BASE_URL` | Развёртывание в подкаталог | `/` |
| `VITE_WASM_PYMUPDF_URL` | URL модуля PyMuPDF WASM | `https://cdn.jsdelivr.net/npm/@bentopdf/pymupdf-wasm@0.11.16/` |
| `VITE_WASM_GS_URL` | URL модуля Ghostscript WASM | `https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/` |
| `VITE_WASM_CPDF_URL` | URL модуля CoherentPDF WASM | `https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/` |
| `VITE_TESSERACT_WORKER_URL` | URL скрипта воркера OCR | _(пусто; CDN Tesseract.js по умолчанию)_ |
| `VITE_TESSERACT_CORE_URL` | Каталог основного рантайма OCR | _(пусто; CDN Tesseract.js по умолчанию)_ |
| `VITE_TESSERACT_LANG_URL` | Каталог traineddata для OCR | _(пусто; CDN Tesseract.js по умолчанию)_ |
| `VITE_TESSERACT_AVAILABLE_LANGUAGES` | Языки OCR через запятую, показываемые в интерфейсе | _(пусто; показать весь каталог)_ |
| `VITE_OCR_FONT_BASE_URL` | Каталог шрифтов текстового слоя OCR | _(пусто; удалённые URL шрифтов Noto)_ |
| `VITE_DEFAULT_LANGUAGE` | Язык интерфейса по умолчанию | `en` |
| `VITE_BRAND_NAME` | Своё название бренда | `BentoPDF` |
| `VITE_BRAND_LOGO` | Путь к логотипу относительно `public/` | `images/favicon-no-bg.svg` |
| `VITE_FOOTER_TEXT` | Свой текст подвала/копирайта | `© 2026 BentoPDF. All rights reserved.` |
| `DISABLE_TOOLS` | ID инструментов через запятую, которые нужно скрыть | _(пусто; все инструменты включены)_ |
| `DISABLE_GITHUB_STARS` | Пропускать запрос числа звёзд GitHub при загрузке страницы и убирать `api.github.com` из CSP. Сборки Simple Mode всегда его пропускают. | `false` |
| `SITE_URL` | Публичный URL, записываемый в canonical, hreflang и ссылки sitemap. Оставьте значение по умолчанию, если не хотите, чтобы поисковые системы считали ваше развёртывание отдельным сайтом. | `https://www.bentopdf.com` |
| `ALLOW_INDEXING` | При собственном `SITE_URL` каждая страница помечается `noindex`, чтобы ваша копия не конкурировала с bentopdf.com в поисковой выдаче. Задайте `true`, чтобы разрешить индексацию. | `false` |
URL модулей WASM заранее настроены на значения CDN по умолчанию, поэтому все расширенные функции работают сразу. Переопределите их для изолированных (air-gapped) или самостоятельно размещаемых развёртываний.
### Поисковые системы
По умолчанию каждая страница указывает поисковым системам на bentopdf.com как на оригинал, поэтому ваше развёртывание не считается дубликатом. Для частного или внутреннего экземпляра ничего менять не нужно.
- **Полностью скрыть экземпляр из поисковой выдачи:** запустите контейнер с `-e ROBOTS_NOINDEX=true`. Нужен только перезапуск, пересборка не требуется.
- **Сделать экземпляр отдельным сайтом в поисковой выдаче:** соберите с `--build-arg SITE_URL=https://your-domain.example --build-arg ALLOW_INDEXING=true`. Без `ALLOW_INDEXING=true` собственный `SITE_URL` помечает каждую страницу как `noindex`.
### Content-Security-Policy
Образ nginx поставляется с действующим заголовком `Content-Security-Policy`. Директивы CSP `script-src`, `connect-src` и `font-src` **генерируются при сборке** из перечисленных выше переменных URL `VITE_*`: все хосты, которые вы передаёте через `--build-arg`, автоматически добавляются в политику.
Как следствие:
- Если вы переопределяете `VITE_CORS_PROXY_URL` или `VITE_WASM_*_URL` при сборке, CSP автоматически разрешает эти источники, дополнительная настройка не нужна.
- Для URL на `cdn.jsdelivr.net` директива `script-src` разрешает только точную папку пакета с версией, например `https://cdn.jsdelivr.net/npm/@bentopdf/pymupdf-wasm@0.11.16/`, а не весь CDN. jsDelivr раздаёт любой публичный пакет npm или репозиторий GitHub, поэтому разрешение всего хоста позволило бы запускать любой из них на вашем экземпляре. URL на любых других хостах разрешаются по источнику (origin).
- Если вы задаёте собственные URL WASM во _время работы_ на странице расширенных настроек приложения, эти источники **не** попадают в CSP, и браузер заблокирует запросы к ним. Это относится и к другой версии того же пакета на `cdn.jsdelivr.net`, так как разрешена только версия, заданная при сборке. Настройка во время работы предназначена для экспериментов; для постоянных собственных URL задайте соответствующий аргумент сборки `VITE_*`.
- В изолированных развёртываниях, где переопределены все три значения `VITE_WASM_*_URL`, из CSP также удаляются эти папки пакетов `cdn.jsdelivr.net` (каждое значение по умолчанию заменяется, а не дополняется). Значения Tesseract OCR по умолчанию на `cdn.jsdelivr.net` остаются в политике, пока вы не зададите и три значения `VITE_TESSERACT_*`. Аналогично, задание `VITE_CORS_PROXY_URL` заменяет публичное значение по умолчанию `bentopdf-cors-proxy.bentopdf.workers.dev`.
CSP включает `'unsafe-eval'` в `script-src`, потому что среда LibreOffice WASM (используется инструментами конвертации Word/Excel/PowerPoint) и библиотека изображений wasm-vips (используется для PDF в TIFF) компилируют внутренний диспетчерский код через `new Function()`. Если убрать его, эти инструменты перестанут работать. Если вы собираете в `SIMPLE_MODE` (без LibreOffice) и PDF в TIFF вам не нужен, можно вручную отредактировать сгенерированный `security-headers.conf` и убрать `'unsafe-eval'` для более строгой политики.
Для OCR оставьте переменные `VITE_TESSERACT_*` пустыми, чтобы использовать онлайн-ресурсы по умолчанию, или задайте все три вместе для OCR на своём сервере или офлайн. Частичное переопределение отклоняется, потому что воркер, основной рантайм и каталог traineddata должны соответствовать друг другу. Для полностью офлайнового вывода PDF с возможностью поиска также задайте `VITE_OCR_FONT_BASE_URL`, чтобы шрифты текстового слоя OCR загружались с вашего внутреннего сервера, а не по публичным URL Noto.
`VITE_DEFAULT_LANGUAGE` задаёт язык интерфейса для новых посетителей. Поддерживаемые значения: `en`, `ar`, `be`, `fr`, `de`, `es`, `zh`, `zh-TW`, `vi`, `tr`, `id`, `it`, `pt`, `nl`, `da`. Пользователи по-прежнему могут переключать язык: меняется только значение по умолчанию.
Пример:
```bash
# Build with French as the default language
docker build --build-arg VITE_DEFAULT_LANGUAGE=fr -t bentopdf .
docker run -d -p 3000:8080 bentopdf
```
### Свой брендинг
Замените стандартные логотип, название и текст подвала BentoPDF своими. Поместите файл логотипа в папку `public/` (или используйте существующее изображение), затем передайте переменные брендинга при сборке:
```bash
docker build \
--build-arg VITE_BRAND_NAME="AcmePDF" \
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
-t acmepdf .
```
Брендинг работает и в полном режиме, и в Simple Mode, и сочетается со всеми остальными параметрами сборки.
### Отключение отдельных инструментов
Скройте инструменты в интерфейсе по требованиям соответствия или безопасности. Отключённые инструменты удаляются с главной страницы, из результатов поиска, сочетаний клавиш и конструктора рабочих процессов. При прямом переходе по URL показывается страница «инструмент недоступен».
ID инструмента: URL страницы без `.html`. Например, если инструмент находится по адресу `bentopdf.com/edit-pdf.html`, его ID равен `edit-pdf`.
#### Как найти ID инструментов
Проще всего открыть любой инструмент в BentoPDF и посмотреть на URL. Последняя часть пути (без `.html`) и есть ID инструмента.
<details>
<summary>Полный список ID инструментов</summary>
**Правка и аннотации:** `edit-pdf`, `bookmark`, `table-of-contents`, `page-numbers`, `add-page-labels`, `bates-numbering`, `add-watermark`, `header-footer`, `invert-colors`, `scanner-effect`, `adjust-colors`, `background-color`, `text-color`, `sign-pdf`, `add-stamps`, `remove-annotations`, `crop-pdf`, `form-filler`, `form-creator`, `remove-blank-pages`
**Конвертация в PDF:** `image-to-pdf`, `jpg-to-pdf`, `png-to-pdf`, `webp-to-pdf`, `svg-to-pdf`, `bmp-to-pdf`, `heic-to-pdf`, `tiff-to-pdf`, `txt-to-pdf`, `markdown-to-pdf`, `json-to-pdf`, `csv-to-pdf`, `rtf-to-pdf`, `odt-to-pdf`, `word-to-pdf`, `excel-to-pdf`, `powerpoint-to-pdf`, `xps-to-pdf`, `mobi-to-pdf`, `epub-to-pdf`, `fb2-to-pdf`, `cbz-to-pdf`, `wpd-to-pdf`, `wps-to-pdf`, `xml-to-pdf`, `pages-to-pdf`, `odg-to-pdf`, `ods-to-pdf`, `odp-to-pdf`, `pub-to-pdf`, `vsd-to-pdf`, `psd-to-pdf`, `email-to-pdf`
**Конвертация из PDF:** `pdf-to-jpg`, `pdf-to-png`, `pdf-to-webp`, `pdf-to-bmp`, `pdf-to-tiff`, `pdf-to-cbz`, `pdf-to-svg`, `pdf-to-csv`, `pdf-to-excel`, `pdf-to-greyscale`, `pdf-to-json`, `pdf-to-docx`, `extract-images`, `pdf-to-markdown`, `prepare-pdf-for-ai`, `pdf-to-text`
**Организация и управление:** `ocr-pdf`, `merge-pdf`, `alternate-merge`, `organize-pdf`, `add-attachments`, `extract-attachments`, `edit-attachments`, `pdf-multi-tool`, `pdf-layers`, `extract-tables`, `split-pdf`, `divide-pages`, `extract-pages`, `delete-pages`, `add-blank-page`, `reverse-pages`, `rotate-pdf`, `rotate-custom`, `n-up-pdf`, `pdf-booklet`, `combine-single-page`, `view-metadata`, `edit-metadata`, `pdf-to-zip`, `compare-pdfs`, `posterize-pdf`, `page-dimensions`
**Оптимизация и восстановление:** `compress-pdf`, `pdf-to-pdfa`, `fix-page-size`, `linearize-pdf`, `remove-restrictions`, `repair-pdf`, `rasterize-pdf`, `deskew-pdf`, `font-to-outline`
**Безопасность:** `encrypt-pdf`, `sanitize-pdf`, `decrypt-pdf`, `flatten-pdf`, `remove-metadata`, `change-permissions`, `digital-sign-pdf`, `validate-signature-pdf`, `timestamp-pdf`
</details>
#### Вариант 1: при сборке (аргумент сборки Docker)
```bash
docker build \
--build-arg DISABLE_TOOLS="edit-pdf,sign-pdf,encrypt-pdf" \
-t bentopdf .
```
Список отключённых инструментов встраивается в JavaScript-бандл. Для изменения нужна пересборка.
#### Вариант 2: во время работы (config.json)
Смонтируйте файл `config.json` в раздаваемый каталог, пересборка не нужна:
```json
{
"disabledTools": ["edit-pdf", "sign-pdf", "encrypt-pdf"]
}
```
```bash
docker run -d \
-p 3000:8080 \
-v ./config.json:/usr/share/nginx/html/config.json:ro \
ghcr.io/alam00000/bentopdf-simple:latest
```
Или с Docker Compose:
```yaml
services:
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
ports:
- '3000:8080'
volumes:
- ./config.json:/usr/share/nginx/html/config.json:ro
```
Оба способа можно сочетать: списки объединяются. Если инструмент указан в любом из них, он отключён.
#### Отключение функций редактора
Можно также отключить отдельные функции внутри PDF-редактора (например, скрытие данных, аннотации, формы), не отключая весь инструмент редактора. Добавьте `editorDisabledCategories` в свой `config.json`:
```json
{
"editorDisabledCategories": ["redaction", "annotation-stamp"]
}
```
<details>
<summary>Полный список категорий редактора</summary>
**Масштаб:** `zoom`, `zoom-in`, `zoom-out`, `zoom-fit-page`, `zoom-fit-width`, `zoom-marquee`, `zoom-level`
**Аннотации:** `annotation`, `annotation-markup`, `annotation-highlight`, `annotation-underline`, `annotation-strikeout`, `annotation-squiggly`, `annotation-ink`, `annotation-text`, `annotation-stamp`
**Фигуры:** `annotation-shape`, `annotation-rectangle`, `annotation-circle`, `annotation-line`, `annotation-arrow`, `annotation-polygon`, `annotation-polyline`
**Формы:** `form`, `form-textfield`, `form-checkbox`, `form-radio`, `form-select`, `form-listbox`, `form-fill-mode`
**Скрытие данных:** `redaction`, `redaction-area`, `redaction-text`, `redaction-apply`, `redaction-clear`
**Документ:** `document`, `document-open`, `document-close`, `document-print`, `document-capture`, `document-export`, `document-fullscreen`, `document-protect`
**Страница:** `page`, `spread`, `rotate`, `scroll`, `navigation`
**Панель:** `panel`, `panel-sidebar`, `panel-search`, `panel-comment`
**Инструменты:** `tools`, `pan`, `pointer`, `capture`
**Выделение:** `selection`, `selection-copy`
**История:** `history`, `history-undo`, `history-redo`
</details>
Категории иерархичны: отключение родительской (например, `annotation`) отключает все дочерние.
### Отключение счётчика звёзд GitHub
В навигационной панели показывается актуальное число звёзд GitHub, которое запрашивается с `api.github.com` при загрузке страницы. Это единственный внешний запрос, не связанный с PDF-функциями. Отключите его при сборке, чтобы убрать код запроса из бандла и исключить `api.github.com` из Content-Security-Policy:
```bash
docker build --build-arg DISABLE_GITHUB_STARS=true -t bentopdf .
```
Сборки Simple Mode (`bentopdf-simple`) всегда пропускают счётчик звёзд: этот флаг нужен только для сборки Commercial или собственных полных сборок.
### Собственные URL WASM (изолированная среда / свой хостинг)
> [!IMPORTANT]
> URL WASM встраиваются в JavaScript **при сборке**. Файлы WASM скачиваются **браузером пользователя** во время работы: Docker не загружает их при сборке. Для изолированных сетей нужно разместить файлы WASM на внутреннем сервере, доступном браузерам.
**Полный процесс для изолированной среды:**
```bash
# 1. On a machine WITH internet — download WASM packages
bash scripts/prepare-airgap.sh --list-ocr-languages
bash scripts/prepare-airgap.sh --search-ocr-language german
# 2. Download WASM/OCR packages
npm pack @bentopdf/pymupdf-wasm@0.11.14
npm pack @bentopdf/gs-wasm
npm pack coherentpdf
npm pack tesseract.js@7.0.0
npm pack tesseract.js-core@7.0.0
mkdir -p tesseract-langdata
curl -fsSL https://cdn.jsdelivr.net/npm/@tesseract.js-data/eng/4.0.0_best_int/eng.traineddata.gz -o tesseract-langdata/eng.traineddata.gz
mkdir -p ocr-fonts
curl -fsSL https://raw.githack.com/googlefonts/noto-fonts/main/hinted/ttf/NotoSans/NotoSans-Regular.ttf -o ocr-fonts/NotoSans-Regular.ttf
# 3. Build the image with your internal server URLs
docker build \
--build-arg VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/ \
--build-arg VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/ \
--build-arg VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/ \
--build-arg VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js \
--build-arg VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core \
--build-arg VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data \
--build-arg VITE_TESSERACT_AVAILABLE_LANGUAGES=eng,deu \
--build-arg VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts \
-t bentopdf .
# 4. Export the image
docker save bentopdf -o bentopdf.tar
# 5. Transfer bentopdf.tar + the .tgz packages + tesseract-langdata/ + ocr-fonts/ into the air-gapped network
# 6. Inside the air-gapped network — load and run
docker load -i bentopdf.tar
# Extract WASM packages to your internal web server
mkdir -p /var/www/wasm/pymupdf /var/www/wasm/gs /var/www/wasm/cpdf /var/www/wasm/ocr/core /var/www/wasm/ocr/lang-data /var/www/wasm/ocr/fonts
tar xzf bentopdf-pymupdf-wasm-0.11.14.tgz -C /var/www/wasm/pymupdf --strip-components=1
tar xzf bentopdf-gs-wasm-*.tgz -C /var/www/wasm/gs --strip-components=1
tar xzf coherentpdf-*.tgz -C /var/www/wasm/cpdf --strip-components=1
TEMP_TESS=$(mktemp -d)
tar xzf tesseract.js-7.0.0.tgz -C "$TEMP_TESS"
cp "$TEMP_TESS/package/dist/worker.min.js" /var/www/wasm/ocr/worker.min.js
rm -rf "$TEMP_TESS"
tar xzf tesseract.js-core-7.0.0.tgz -C /var/www/wasm/ocr/core --strip-components=1
cp ./tesseract-langdata/*.traineddata.gz /var/www/wasm/ocr/lang-data/
cp ./ocr-fonts/* /var/www/wasm/ocr/fonts/
# Run BentoPDF
docker run -d -p 3000:8080 --restart unless-stopped bentopdf
```
Используйте коды, которые выводит `bash scripts/prepare-airgap.sh --list-ocr-languages`, или ищите по названию через `bash scripts/prepare-airgap.sh --search-ocr-language <term>`, для `--ocr-languages`. Когда вы собираете с ограниченным набором языков OCR, передайте те же коды в `VITE_TESSERACT_AVAILABLE_LANGUAGES`, чтобы приложение показывало только включённые языки. Для полностью офлайнового вывода OCR также разместите поставляемый каталог `ocr-fonts/` и укажите на него `VITE_OCR_FONT_BASE_URL`.
Задайте переменной пустую строку, чтобы отключить этот модуль (пользователям придётся настроить его вручную в расширенных настройках).
## Свой порт
По умолчанию BentoPDF слушает порт `8080` внутри контейнера. Чтобы изменить его, задайте переменную окружения `PORT` во время работы:
```bash
docker run -p 3000:9090 -e PORT=9090 ghcr.io/alam00000/bentopdf-simple:latest
```
| Переменная | Описание | По умолчанию |
| ---------- | ----------------------- | ------------ |
| `PORT` | Порт Nginx в контейнере | `8080` |
Это работает и со стандартным, и с nonroot-Dockerfile.
## Свой ID пользователя (PUID/PGID)
Для сред, где нужен запуск от конкретного непривилегированного пользователя (NAS-устройства, Kubernetes с контекстами безопасности, организационные политики), BentoPDF предоставляет отдельный Dockerfile с поддержкой PUID/PGID в стиле LSIO.
### Сборка и запуск
```bash
# Build the non-root image
docker build -f Dockerfile.nonroot -t bentopdf-nonroot .
# Run with custom UID/GID
docker run -d \
--name bentopdf \
-p 3000:8080 \
-e PUID=1000 \
-e PGID=1000 \
--restart unless-stopped \
bentopdf-nonroot
```
### Переменные окружения
| Переменная | Описание | По умолчанию |
| -------------- | --------------------------- | ------------ |
| `PUID` | ID пользователя для запуска | `1000` |
| `PGID` | ID группы для запуска | `1000` |
| `PORT` | Порт Nginx | `8080` |
| `DISABLE_IPV6` | Отключить слушатель IPv6 | `false` |
### Docker Compose
```yaml
services:
bentopdf:
build:
context: .
dockerfile: Dockerfile.nonroot
container_name: bentopdf
ports:
- '3000:8080'
environment:
- PUID=1000
- PGID=1000
restart: unless-stopped
```
### Как это работает
Контейнер стартует от root, создаёт пользователя с заданными PUID/PGID, меняет владельца всех каталогов с правом записи, затем сбрасывает привилегии через `su-exec`. Процесс nginx работает целиком от указанного вами пользователя.
> [!NOTE]
> Стандартный `Dockerfile` использует `nginx-unprivileged` (UID 101) и рекомендуется для большинства развёртываний. Используйте `Dockerfile.nonroot` только когда нужен конкретный UID/GID.
> [!WARNING]
> PUID/PGID не могут быть равны `0` (root). Точка входа проверяет значения и завершится с ошибкой при недопустимых.
## С Traefik (обратный прокси)
```yaml
services:
traefik:
image: traefik:v2.10
command:
- '--providers.docker=true'
- '--entrypoints.web.address=:80'
- '--entrypoints.websecure.address=:443'
- '--certificatesresolvers.letsencrypt.acme.email=you@example.com'
- '--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json'
- '--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web'
ports:
- '80:80'
- '443:443'
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.bentopdf.rule=Host(`pdf.example.com`)'
- 'traefik.http.routers.bentopdf.entrypoints=websecure'
- 'traefik.http.routers.bentopdf.tls.certresolver=letsencrypt'
- 'traefik.http.services.bentopdf.loadbalancer.server.port=8080'
# Required headers for SharedArrayBuffer (LibreOffice WASM)
- 'traefik.http.routers.bentopdf.middlewares=bentopdf-headers'
- 'traefik.http.middlewares.bentopdf-headers.headers.customresponseheaders.Cross-Origin-Opener-Policy=same-origin'
- 'traefik.http.middlewares.bentopdf-headers.headers.customresponseheaders.Cross-Origin-Embedder-Policy=require-corp'
restart: unless-stopped
```
## С Caddy (обратный прокси)
```yaml
services:
caddy:
image: caddy:2
ports:
- '80:80'
- '443:443'
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
restart: unless-stopped
volumes:
caddy_data:
```
Caddyfile:
```
pdf.example.com {
reverse_proxy bentopdf:8080
header Cross-Origin-Opener-Policy "same-origin"
header Cross-Origin-Embedder-Policy "require-corp"
}
```
## Ограничения ресурсов
```yaml
services:
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
```
## Podman Quadlet (интеграция с systemd)
[Quadlet](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html) позволяет запускать контейнеры Podman как службы systemd. Это идеально подходит для рабочих развёртываний в Linux.
### Базовая настройка Quadlet
Создайте файл юнита контейнера `~/.config/containers/systemd/bentopdf.container` (пользовательский) или `/etc/containers/systemd/bentopdf.container` (системный):
```ini
[Unit]
Description=BentoPDF - Privacy-first PDF toolkit
After=network-online.target
Wants=network-online.target
[Container]
Image=ghcr.io/alam00000/bentopdf-simple:latest
ContainerName=bentopdf
PublishPort=3000:8080
AutoUpdate=registry
[Service]
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=default.target
```
### Включение и запуск
```bash
# Reload systemd to detect new unit
systemctl --user daemon-reload
# Start the service
systemctl --user start bentopdf
# Enable on boot
systemctl --user enable bentopdf
# Check status
systemctl --user status bentopdf
# View logs
journalctl --user -u bentopdf -f
```
> [!TIP]
> Для общесистемного развёртывания используйте `systemctl` без флага `--user` и поместите файл в `/etc/containers/systemd/`.
### Quadlet с проверкой работоспособности
```ini
[Unit]
Description=BentoPDF with health monitoring
After=network-online.target
Wants=network-online.target
[Container]
Image=ghcr.io/alam00000/bentopdf-simple:latest
ContainerName=bentopdf
PublishPort=3000:8080
AutoUpdate=registry
HealthCmd=wget --spider -q http://localhost:8080 || exit 1
HealthInterval=30s
HealthTimeout=10s
HealthRetries=3
[Service]
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=default.target
```
### Автообновление с Quadlet
Podman может автоматически обновлять контейнеры, когда появляются новые образы:
```bash
# Enable auto-update timer
systemctl --user enable --now podman-auto-update.timer
# Check for updates manually
podman auto-update
# Dry run (check without updating)
podman auto-update --dry-run
```
### Сетевая конфигурация Quadlet
Для собственной сетевой конфигурации создайте файл сети `bentopdf.network`:
```ini
[Network]
Subnet=10.89.0.0/24
Gateway=10.89.0.1
```
Затем сошлитесь на него в файле контейнера:
```ini
[Container]
Image=ghcr.io/alam00000/bentopdf-simple:latest
ContainerName=bentopdf
PublishPort=3000:8080
Network=bentopdf.network
```
## Обновление
```bash
# Pull latest image
docker compose pull
# Recreate container
docker compose up -d
```
+266
View File
@@ -0,0 +1,266 @@
# Развёртывание на Hostinger
[Hostinger](https://hostinger.com) популярный провайдер виртуального хостинга. Это руководство описывает развёртывание BentoPDF на виртуальном хостинге Hostinger.
## Требования
- Тариф хостинга Hostinger с доступом к файловому менеджеру
- Node.js, установленный локально для сборки
## Шаг 1: соберите проект
```bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build
```
Готовые файлы будут в папке `dist`.
## Шаг 2: загрузите на Hostinger
### Развёртывание в корне домена
1. Войдите в свой аккаунт Hostinger
2. Откройте **File Manager** → **public_html**
3. **Удалите** все существующие файлы (при необходимости сделайте резервную копию)
4. **Загрузите** всё содержимое локальной папки `dist` в `public_html`
### Развёртывание в подкаталоге
Если вы развёртываете в подкаталог (например, `yourdomain.com/pdf-tools/`):
1. Соберите проект с правильным базовым URL:
```bash
BASE_URL=/pdf-tools/ npm run build
```
2. Создайте папку на Hostinger:
- Откройте **File Manager** → **public_html**
- Создайте новую папку: `pdf-tools`
3. Загрузите всё содержимое `dist` в `public_html/pdf-tools/`
## Шаг 3: создайте файл .htaccess
Создайте файл `.htaccess` в корне папки развёртывания (`public_html` или `public_html/pdf-tools/`):
::: warning Важно
При развёртывании в подкаталог замените `RewriteBase /` на `RewriteBase /pdf-tools/` (или имя вашей папки).
:::
```apache
RewriteEngine On
RewriteBase /
# ============================================
# 1. SECURITY HEADERS (CRITICAL FOR WASM)
# ============================================
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
# REQUIRED for soffice.js (SharedArrayBuffer)
Header always set Cross-Origin-Opener-Policy "same-origin"
Header always set Cross-Origin-Embedder-Policy "require-corp"
</IfModule>
# ============================================
# 2. BROWSER CACHING
# ============================================
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/wasm "access plus 1 year"
ExpiresByType application/gzip "access plus 1 year"
ExpiresByType text/html "access plus 0 seconds"
</IfModule>
# ============================================
# 3. COMPRESSION (STANDARD)
# ============================================
# Prevent server from double-compressing files
SetEnvIfNoCase Request_URI "\.gz$" no-gzip
SetEnvIfNoCase Request_URI "\.br$" no-gzip
SetEnvIfNoCase Request_URI "\.wasm$" no-gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE font/woff
AddOutputFilterByType DEFLATE font/ttf
</IfModule>
# ============================================
# 4. MIME TYPES & SPECIAL FILE HANDLING
# ============================================
AddType application/javascript .js .mjs
AddType application/wasm .wasm
AddType font/woff2 .woff2
AddType font/woff .woff
AddType image/webp .webp
# Handle soffice.wasm.gz correctly
<FilesMatch "soffice\.wasm\.gz$">
ForceType application/wasm
Header set Content-Encoding "gzip"
Header set Cross-Origin-Resource-Policy "cross-origin"
Header append Vary Accept-Encoding
</FilesMatch>
# Handle data.gz
<FilesMatch "soffice\.data\.gz$">
ForceType application/octet-stream
Header set Content-Encoding "gzip"
Header append Vary Accept-Encoding
</FilesMatch>
# ============================================
# 5. REDIRECTS & ROUTING
# ============================================
# Canonical WWW (update domain as needed)
RewriteCond %{HTTP_HOST} ^bentopdf\.com [NC]
RewriteRule ^(.*)$ https://www.bentopdf.com/$1 [L,R=301]
# Force HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Remove trailing slash (except for language root directories)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/$
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
# Existing files/dirs - serve directly
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# ============================================
# 5.1. LANGUAGE ROUTES
# ============================================
# Supported languages: de, es, zh, zh-TW, vi, it, id, tr, fr, pt
# English has no prefix - served from root
# English prefix redirects to root (for SEO consistency)
RewriteRule ^en/?$ / [R=301,L]
RewriteRule ^en/(.+)$ /$1 [R=301,L]
# Language prefix root (e.g., /de/ -> /de/index.html)
RewriteCond %{DOCUMENT_ROOT}/$1/index.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/?$ /$1/index.html [L]
# Language prefix with path (e.g., /de/merge-pdf -> /de/merge-pdf.html)
RewriteCond %{DOCUMENT_ROOT}/$1/$2.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/([^/]+)/?$ /$1/$2.html [L]
# ============================================
# 5.5. DOCS ROUTING (VitePress)
# ============================================
RewriteCond %{REQUEST_URI} ^/docs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]
# ============================================
# 6. ADD .HTML EXTENSION IF FILE EXISTS (ROOT LEVEL ONLY)
# ============================================
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/]+)$ $1.html [L]
# ============================================
# 7. ERROR PAGES
# ============================================
ErrorDocument 404 /404.html
```
## Пример .htaccess для подкаталога
Для `yourdomain.com/pdf-tools/` измените такие строки:
```apache
RewriteBase /pdf-tools/
# ... (same content as above, but update paths) ...
# Language prefix root
RewriteCond %{DOCUMENT_ROOT}/pdf-tools/$1/index.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/?$ /pdf-tools/$1/index.html [L]
# Language prefix with path
RewriteCond %{DOCUMENT_ROOT}/pdf-tools/$1/$2.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/([^/]+)/?$ /pdf-tools/$1/$2.html [L]
# Root level .html extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/]+)$ $1.html [L]
ErrorDocument 404 /pdf-tools/404.html
```
## Устранение неполадок
### Файлы WASM не загружаются
Убедитесь, что MIME-типы правильно заданы в `.htaccess`:
```apache
AddType application/wasm .wasm
```
### Инструменты LibreOffice не работают
Заголовки безопасности критически важны для SharedArrayBuffer:
```apache
Header always set Cross-Origin-Opener-Policy "same-origin"
Header always set Cross-Origin-Embedder-Policy "require-corp"
```
Если заголовки не применяются, обратитесь в поддержку Hostinger, чтобы включить `mod_headers`.
### Ошибки 404 при обновлении страницы
Убедитесь, что правило для расширения `.html` и языковые маршруты настроены правильно. BentoPDF использует статические HTML-файлы, а не маршрутизацию SPA:
```apache
# Language routes serve actual files from language directories
RewriteCond %{DOCUMENT_ROOT}/$1/$2.html -f
RewriteRule ^(de|es|zh|zh-TW|vi|it|id|tr|fr|pt)/([^/]+)/?$ /$1/$2.html [L]
# Root level pages
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/]+)$ $1.html [L]
```
### Ограничения на загрузку файлов
У Hostinger могут быть ограничения на размер файлов. Если массовая загрузка не удаётся, загружайте файлы WASM отдельно.
+538
View File
@@ -0,0 +1,538 @@
# Руководство по самостоятельному размещению
BentoPDF можно разместить на собственной инфраструктуре. В этом руководстве описаны разные варианты развертывания.
## Быстрый старт с Docker / Podman
Самый быстрый способ разместить BentoPDF у себя:
> [!TIP]
> BentoPDF поставляется в двух сборках:
>
> - **Сборка для самостоятельного размещения**: `ghcr.io/alam00000/bentopdf-simple:latest`. Все инструменты PDF, **без** маркетингового оформления (без главного экрана, FAQ, отзывов и подвала). Используйте ее для внутренних развертываний в команде или организации. Это **не** урезанная «облегченная» версия.
> - **Коммерческая сборка**: `ghcr.io/alam00000/bentopdf:latest`. Полный маркетинговый сайт, который использует сам bentopdf.com и держатели коммерческих лицензий для публичных развертываний.
>
> Если сомневаетесь, берите сборку для самостоятельного размещения.
> [!IMPORTANT]
> Для конвертации офисных файлов нужен `SharedArrayBuffer`, а значит, приложение должно быть изолировано между источниками (cross-origin isolated) и раздаваться из защищенного контекста. Официальный образ уже отправляет нужные заголовки COOP/COEP, но браузеры все равно отключают `SharedArrayBuffer` на обычных HTTP-адресах в локальной сети, например `http://192.168.x.x`.
>
> Используйте `http://localhost` только для проверки на одном устройстве. Если пользователи открывают BentoPDF по IP-адресу или имени хоста в локальной сети, настройте HTTPS.
```bash
# Docker
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
# Podman
podman run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
```
Или с помощью Docker Compose / Podman Compose:
```yaml
# docker-compose.yml
services:
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
ports:
- '3000:8080'
restart: unless-stopped
```
```bash
# Docker Compose
docker compose up -d
# Podman Compose
podman-compose up -d
```
## Podman Quadlet (Linux Systemd)
Запустите BentoPDF как службу systemd. Создайте `~/.config/containers/systemd/bentopdf.container`:
```ini
[Container]
Image=ghcr.io/alam00000/bentopdf-simple:latest
ContainerName=bentopdf
PublishPort=3000:8080
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=default.target
```
```bash
systemctl --user daemon-reload
systemctl --user enable --now bentopdf
```
Полную документацию по Quadlet смотрите в [руководстве по развертыванию Docker](/ru/self-hosting/docker).
## Сборка из исходного кода
```bash
# Clone and build
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build
# The built files are in the `dist` folder
```
## Параметры конфигурации
### Сборка для самостоятельного размещения (Simple Mode)
Сборка для самостоятельного размещения (образ `bentopdf-simple`, также называемая Simple Mode) **функционально идентична** коммерческой сборке: все инструменты PDF на месте и работают одинаково. Она лишь скрывает маркетинговое оформление, которое имеет смысл только на самом bentopdf.com или в коммерческом публичном развертывании. **Это не урезанная и не «облегченная» версия.**
**Что скрывает сборка для самостоятельного размещения** (только оформление, функции PDF не удаляются):
- Панель навигации, главный экран, раздел возможностей, FAQ, отзывы, подвал
- Заголовок страницы меняется на «Инструменты PDF»
**Что сохраняет сборка для самостоятельного размещения** (все, что реально работает с PDF):
- Все инструменты PDF (объединение, разделение, редактирование, подпись, OCR, конвертация офисных файлов и т. д.)
- Поддержку собственного брендинга, всю конфигурацию на этапе сборки и во время работы
Коммерческая сборка (`ghcr.io/alam00000/bentopdf:latest`) лежит в основе самого bentopdf.com, и ее используют держатели коммерческих лицензий для публичных развертываний. Она добавляет главный экран, FAQ, отзывы и подвал, которые не нужны во внутреннем инструменте.
Если вы размещаете BentoPDF для своей команды, организации или как внутренний инструмент, берите сборку для самостоятельного размещения:
```bash
# Use the pre-built image (recommended)
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
# Or build it yourself
SIMPLE_MODE=true npm run build
```
Подробности смотрите в [SIMPLE_MODE.md](https://github.com/alam00000/bentopdf/blob/main/SIMPLE_MODE.md).
### Коммерческая сборка (публичные развертывания под вашим брендом)
Коммерческая сборка (образ `bentopdf`, без суффикса `-simple`) лежит в основе самого bentopdf.com. Она включает полный маркетинговый сайт (главный экран, возможности, FAQ, отзывы, подвал) в дополнение ко всем инструментам PDF. Используйте эту сборку, когда хотите **развернуть BentoPDF как публичный сервис PDF под собственным брендом**, например:
- Вы запускаете BentoPDF как размещаемый SaaS для конечных пользователей на своем домене
- Вам нужна посадочная страница (маркетинговые разделы плюс инструменты), а не только сами инструменты
- Вы держатель коммерческой лицензии и встраиваете BentoPDF в коммерческий продукт
**Запустите как есть** (с брендингом BentoPDF, удобно для предпросмотра сборки):
```bash
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
```
**Соберите со своим брендом** (типичный коммерческий сценарий):
```bash
docker build \
--build-arg VITE_BRAND_NAME="AcmePDF" \
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. All rights reserved." \
-t acmepdf .
docker run -p 3000:8080 acmepdf
```
Все остальные параметры времени сборки (`BASE_URL`, `VITE_DEFAULT_LANGUAGE`, `DISABLE_TOOLS`, переопределения URL для WASM и т. д.) работают так же, как в сборке для самостоятельного размещения.
::: warning Лицензирование
Запуск коммерческой сборки разрешен по любому из двух вариантов лицензии BentoPDF:
- **AGPL-3.0** (бесплатно): допускается, если ваше развертывание публикует весь исходный код под AGPL, включая любые изменения брендинга и окружающую бизнес-логику.
- **Коммерческая лицензия** (79 $ навсегда): требуется для закрытых и проприетарных развертываний, где вы не публикуете исходный код своего форка с брендингом или бизнес-код.
Полное сравнение смотрите на [странице лицензирования](https://www.bentopdf.com/licensing). Модули WASM под лицензией AGPL (PyMuPDF, Ghostscript, CoherentPDF) загружаются из CDN во время работы, поэтому они не попадают в ваш образ и не меняют ваш лицензионный статус.
:::
### Базовый URL
Развертывание в подкаталоге:
```bash
BASE_URL=/pdf-tools/ npm run build
```
### Собственный брендинг
Замените стандартные логотип, название и текст подвала BentoPDF на свои при сборке:
| Переменная | Описание | По умолчанию |
| ------------------ | -------------------------------------- | --------------------------------------- |
| `VITE_BRAND_NAME` | Название бренда в заголовке и подвале | `BentoPDF` |
| `VITE_BRAND_LOGO` | Путь к логотипу относительно `public/` | `images/favicon-no-bg.svg` |
| `VITE_FOOTER_TEXT` | Свой текст подвала и авторских прав | `© 2026 BentoPDF. All rights reserved.` |
```bash
# Place your logo in public/, then build
VITE_BRAND_NAME="AcmePDF" \
VITE_BRAND_LOGO="images/acme-logo.svg" \
VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
npm run build
```
Или через Docker:
```bash
docker build \
--build-arg VITE_BRAND_NAME="AcmePDF" \
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
-t acmepdf .
```
Брендинг работает как в полном режиме, так и в Simple Mode и сочетается со всеми остальными параметрами времени сборки (`BASE_URL`, `SIMPLE_MODE`, `VITE_DEFAULT_LANGUAGE`).
### Отключение отдельных инструментов
Скрывайте отдельные инструменты ради соответствия требованиям или безопасности. Отключенные инструменты удаляются с главной страницы, из поиска, быстрых клавиш, конструктора рабочих процессов и недоступны по прямому URL.
Идентификаторы инструментов совпадают с URL страницы без `.html`: откройте любой инструмент и посмотрите на адрес (например, `edit-pdf`, `sign-pdf`, `encrypt-pdf`).
**Во время сборки** (вшивается в бандл):
```bash
DISABLE_TOOLS="edit-pdf,sign-pdf" npm run build
```
**Во время работы** (пересборка не нужна, смонтируйте `config.json`):
```json
{
"disabledTools": ["edit-pdf", "sign-pdf"]
}
```
```bash
docker run -d -p 3000:8080 \
-v ./config.json:/usr/share/nginx/html/config.json:ro \
ghcr.io/alam00000/bentopdf-simple:latest
```
Оба способа можно сочетать: списки объединяются.
Вы также можете отключить отдельные функции внутри редактора PDF (например, редактирование с удалением данных), не отключая инструмент целиком, добавив `editorDisabledCategories` в `config.json`. Полный список категорий смотрите в [руководстве по Docker](/ru/self-hosting/docker#отключение-функции-редактора).
## Руководства по развертыванию
Выберите платформу:
- [Vercel](/ru/self-hosting/vercel)
- [Netlify](/ru/self-hosting/netlify)
- [Cloudflare Pages](/ru/self-hosting/cloudflare)
- [AWS S3 + CloudFront](/ru/self-hosting/aws)
- [Hostinger](/ru/self-hosting/hostinger)
- [Nginx](/ru/self-hosting/nginx)
- [Apache](/ru/self-hosting/apache)
- [Docker](/ru/self-hosting/docker)
- [Kubernetes](/ru/self-hosting/kubernetes)
- [CORS-прокси](/ru/self-hosting/cors-proxy) - необходим для цифровых подписей
## Частые проблемы
### Конвертация Word / ODT / Excel / PowerPoint в PDF зависает (SharedArrayBuffer недоступен)
**Симптом**: конвертация документов через LibreOffice (Word, ODT, Excel, PowerPoint в PDF) зависает примерно на 55% или не запускается. В консоли браузера может быть:
> `ReferenceError: SharedArrayBuffer is not defined`
…или `window.crossOriginIsolated` возвращает `false`, или компиляция WASM сообщает `expected magic word 00 61 73 6d, found 1f 8b 08 08`.
**Причина**: LibreOffice WASM требует `SharedArrayBuffer`, который браузер включает, только когда страница **изолирована между источниками (cross-origin isolated)** И раздается из **защищенного контекста**. Для этого должны выполняться два условия:
1. В каждом ответе есть оба заголовка:
- `Cross-Origin-Embedder-Policy: require-corp`
- `Cross-Origin-Opener-Policy: same-origin`
2. Страница раздается по `https://...` или `http://localhost`. Обычный HTTP на IP-адресе в локальной сети (например, `http://192.168.x.x`) защищенным НЕ считается: браузеры отключают там `SharedArrayBuffer`.
Несовпадение `00 61 73 6d / 1f 8b 08 08` является отдельным подсимптомом: у предварительно сжатых файлов `.wasm.gz` / `.data.gz` нет заголовка ответа `Content-Encoding: gzip`, поэтому браузер получает необработанные байты gzip вместо распакованного WASM.
**Решение**: точную конфигурацию смотрите в руководстве для вашей платформы:
- [Nginx →](/ru/self-hosting/nginx#конвертация-word-odt-excel-в-pdf-не-работает)
- [Apache →](/ru/self-hosting/apache#конвертация-word-odt-excel-в-pdf-не-работает)
- [AWS S3 + CloudFront →](/ru/self-hosting/aws#шаг-3b-политика-заголовков-ответа-обязательна-для-libreoffice-wasm)
- [Cloudflare Pages →](/ru/self-hosting/cloudflare#фаил-конфигурации) (файл `_headers`)
- [Netlify →](/ru/self-hosting/netlify#конвертация-word-odt-excel-в-pdf-зависает-на-55) (`netlify.toml`)
- [Vercel →](/ru/self-hosting/vercel#конвертация-word-odt-excel-в-pdf-не-работает) (`vercel.json`)
- [Hostinger →](/ru/self-hosting/hostinger#инструменты-libreoffice-не-работают) (`.htaccess`)
- [Kubernetes →](/ru/self-hosting/kubernetes#сохранение-заголовков-sharedarraybuffer-ingress-gateway)
- **Docker**: обрабатывается автоматически встроенной конфигурацией nginx, никаких действий не требуется.
**Проверка**: откройте консоль DevTools на любой странице BentoPDF и выполните:
```js
console.log(window.crossOriginIsolated); // should be true
console.log(typeof SharedArrayBuffer); // should be "function"
```
Если страница раздается по HTTPS или `http://localhost` И оба заголовка COEP/COOP присутствуют в каждом ответе, обе проверки пройдут. Если вы открываете `http://192.168.x.x` или другой HTTP-адрес не из loopback, настройте HTTPS: решения только через заголовки не существует.
### Файлы `.mjs` отдаются как `application/octet-stream`
**Симптом**: Sign PDF / Form Filler и некоторые другие инструменты показывают пустой просмотрщик или не загружаются. В консоли браузера:
> `Failed to load module script: The server responded with a non-JavaScript MIME type of "application/octet-stream". Strict MIME type checking is enforced for module scripts per HTML spec.`
**Причина**: в вашем веб-сервере или обратном прокси нет соответствия MIME-типа для файлов `.mjs` (встроенный просмотрщик PDF поставляется с ES-модулями с таким расширением). Во многих стандартных конфигурациях для неизвестных расширений по умолчанию используется `application/octet-stream`, и браузеры отказываются выполнять такие файлы как ES-модули.
**Решение**: нужный фрагмент смотрите в руководстве для вашей платформы:
- [Nginx →](/ru/self-hosting/nginx#sign-pdf-или-form-filler-показывает-пустои-просмотрщик-ошибка-mime-для-mjs)
- [Apache →](/ru/self-hosting/apache#sign-pdf-или-form-filler-показывают-пустои-просмотрщик-ошибка-mime-для-mjs)
- [AWS S3 + CloudFront →](/ru/self-hosting/aws#шаг-2-сборка-и-загрузка) (см. `aws s3 cp ... --include "*.mjs"`)
- [Kubernetes →](/ru/self-hosting/kubernetes#ошибки-mime-типа-mjs-пустои-iframe-в-sign-pdf-form-filler)
- **Docker, Vercel, Netlify, Cloudflare Pages, Hostinger**: обрабатывается автоматически, никаких действий не требуется.
**Проверка**: откройте DevTools → вкладка Network, найдите неудавшийся запрос `.mjs` и проверьте заголовок ответа `Content-Type`. Там должно быть `application/javascript`. Если по-прежнему `application/octet-stream`, возможно, внешний обратный прокси или CDN заново определяет тип: проверьте каждый уровень вашей цепочки.
## Конфигурация WASM (компоненты AGPL)
BentoPDF **не включает** библиотеки обработки под лицензией AGPL в свой исходный код, но **заранее настраивает URL CDN**, поэтому все функции работают сразу, без ручной настройки.
::: tip Работает без настройки
Начиная с v2.0.0, модули WASM заранее настроены на загрузку из CDN jsDelivr через переменные окружения. Все расширенные функции работают сразу, без какой-либо настройки пользователем.
:::
| Компонент | Лицензия | Возможности |
| --------------- | -------- | -------------------------------------------------------------- |
| **PyMuPDF** | AGPL-3.0 | Конвертация EPUB/MOBI/FB2/XPS, извлечение изображений и таблиц |
| **Ghostscript** | AGPL-3.0 | Конвертация в PDF/A, сжатие, выравнивание, растрирование |
| **CoherentPDF** | AGPL-3.0 | Оглавление, вложения, объединение PDF с закладками |
### Переменные окружения по умолчанию
Они заданы в `.env.production` и вшиваются в сборку:
```bash
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/pymupdf-wasm@0.11.16/
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/
VITE_TESSERACT_WORKER_URL=
VITE_TESSERACT_CORE_URL=
VITE_TESSERACT_LANG_URL=
VITE_TESSERACT_AVAILABLE_LANGUAGES=
VITE_OCR_FONT_BASE_URL=
```
### Переопределение URL для WASM
Значения по умолчанию можно переопределить при сборке для нестандартных развертываний:
```bash
# Via Docker build args
docker build \
--build-arg VITE_WASM_PYMUPDF_URL=https://your-server.com/pymupdf/ \
--build-arg VITE_WASM_GS_URL=https://your-server.com/gs/ \
--build-arg VITE_WASM_CPDF_URL=https://your-server.com/cpdf/ \
--build-arg VITE_TESSERACT_WORKER_URL=https://your-server.com/ocr/worker.min.js \
--build-arg VITE_TESSERACT_CORE_URL=https://your-server.com/ocr/core \
--build-arg VITE_TESSERACT_LANG_URL=https://your-server.com/ocr/lang-data \
--build-arg VITE_TESSERACT_AVAILABLE_LANGUAGES=eng,deu \
--build-arg VITE_OCR_FONT_BASE_URL=https://your-server.com/ocr/fonts \
-t bentopdf .
# Or via .env.production before building from source
VITE_WASM_PYMUPDF_URL=https://your-server.com/pymupdf/ npm run build
```
Чтобы полностью отключить модуль (пользователю придется настраивать его вручную в расширенных настройках), задайте его переменной пустую строку.
Для OCR либо оставьте все переменные `VITE_TESSERACT_*` пустыми и используйте стандартные онлайн-ресурсы, либо задайте URL воркера, ядра и языковых данных вместе для автономного OCR на своей инфраструктуре. Если вы включаете в сборку только некоторые языки OCR, задайте также `VITE_TESSERACT_AVAILABLE_LANGUAGES` с теми же кодами через запятую, чтобы интерфейс предлагал только установленные языки, а неподдерживаемый выбор завершался понятной ошибкой. Для полностью автономного создания PDF с возможностью поиска задайте также `VITE_OCR_FONT_BASE_URL` с адресом внутренней директории, где лежат встроенные шрифты OCR.
Пользователи также могут в любой момент переопределить эти значения через **расширенные настройки** в интерфейсе: пользовательские настройки, сохраненные в браузере, имеют приоритет над значениями окружения по умолчанию.
### Развертывание в изолированной сети / офлайн
Для сетей без доступа в интернет (госсектор, здравоохранение, финансы и т. д.). URL для WASM вшиваются в JavaScript **при сборке**, а сами файлы WASM скачивает **браузер пользователя** во время работы. Поэтому все нужно подготовить на машине с интернетом, а затем перенести во внутреннюю сеть.
#### Автоматический скрипт (рекомендуется)
Входящий в состав скрипт `prepare-airgap.sh` автоматизирует весь процесс: скачивает пакеты WASM, собирает образ Docker и создает самодостаточный пакет со скриптом установки.
```bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
# Show supported OCR language codes (for --ocr-languages)
bash scripts/prepare-airgap.sh --list-ocr-languages
# Search OCR language codes by name or abbreviation
bash scripts/prepare-airgap.sh --search-ocr-language german
# Interactive mode — prompts for all options
bash scripts/prepare-airgap.sh
# Or fully automated
bash scripts/prepare-airgap.sh --wasm-base-url https://internal.example.com/wasm
```
В результате создается директория с пакетом:
```
bentopdf-airgap-bundle/
bentopdf.tar # Docker image
*.tgz # WASM packages (PyMuPDF, Ghostscript, CoherentPDF, Tesseract)
tesseract-langdata/ # OCR traineddata files
ocr-fonts/ # OCR text-layer font files
setup.sh # Setup script for the air-gapped side
README.md # Instructions
```
Перенесите пакет в изолированную сеть через USB, внутренний репозиторий артефактов или другим разрешенным способом. Затем запустите входящий в него скрипт установки:
```bash
cd bentopdf-airgap-bundle
bash setup.sh
```
Скрипт установки загружает образ Docker, распаковывает файлы WASM и при желании запускает контейнер.
**Параметры скрипта:**
| Флаг | Описание | По умолчанию |
| ------------------------------ | -------------------------------------------------------------- | --------------------------------------------- |
| `--wasm-base-url <url>` | Где файлы WASM будут размещены внутри сети | _(обязателен, запрашивается, если не указан)_ |
| `--image-name <name>` | Тег образа Docker | `bentopdf` |
| `--output-dir <path>` | Директория для итогового пакета | `./bentopdf-airgap-bundle` |
| `--simple-mode` | Включить Simple Mode | выкл. |
| `--base-url <path>` | Базовый URL подкаталога (например, `/pdf/`) | `/` |
| `--language <code>` | Язык интерфейса по умолчанию (например, `fr`, `de`) | _(нет)_ |
| `--brand-name <name>` | Свое название бренда | _(нет)_ |
| `--brand-logo <path>` | Путь к логотипу относительно `public/` | _(нет)_ |
| `--footer-text <text>` | Свой текст подвала | _(нет)_ |
| `--ocr-languages <list>` | Языки OCR для включения в пакет через запятую | `eng` |
| `--list-ocr-languages` | Вывести поддерживаемые коды и названия OCR и выйти | выкл. |
| `--search-ocr-language <term>` | Поиск кодов OCR по названию или сокращению | выкл. |
| `--dockerfile <path>` | Используемый Dockerfile | `Dockerfile` |
| `--skip-docker` | Пропустить сборку и экспорт Docker | выкл. |
| `--skip-wasm` | Пропустить загрузку WASM (использовать имеющиеся файлы `.tgz`) | выкл. |
Интерактивный режим также принимает `list`, чтобы вывести полный список поддерживаемых кодов Tesseract, и `search <term>`, чтобы найти совпадения, например `search german` или `search chi`.
::: warning Требование одного источника
Файлы WASM должны раздаваться с **того же источника** (origin), что и приложение BentoPDF. Веб-воркеры используют `importScripts()`, который не может загружать скрипты с другого источника. Например, если BentoPDF работает на `https://internal.example.com`, базовый URL для WASM тоже должен быть `https://internal.example.com/wasm`.
:::
#### Ручные шаги
<details>
<summary>Если вы предпочитаете выполнить все вручную, без скрипта</summary>
**Шаг 1: Скачайте пакеты WASM и OCR** (на машине с интернетом)
```bash
npm pack @bentopdf/pymupdf-wasm@0.11.14
npm pack @bentopdf/gs-wasm
npm pack coherentpdf
npm pack tesseract.js@7.0.0
npm pack tesseract.js-core@7.0.0
mkdir -p tesseract-langdata
curl -fsSL https://cdn.jsdelivr.net/npm/@tesseract.js-data/eng/4.0.0_best_int/eng.traineddata.gz -o tesseract-langdata/eng.traineddata.gz
mkdir -p ocr-fonts
curl -fsSL https://raw.githack.com/googlefonts/noto-fonts/main/hinted/ttf/NotoSans/NotoSans-Regular.ttf -o ocr-fonts/NotoSans-Regular.ttf
```
**Шаг 2: Соберите образ Docker с внутренними URL**
```bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
docker build \
--build-arg VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/ \
--build-arg VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/ \
--build-arg VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/ \
--build-arg VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js \
--build-arg VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core \
--build-arg VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data \
--build-arg VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts \
-t bentopdf .
```
**Шаг 3: Экспортируйте образ Docker**
```bash
docker save bentopdf -o bentopdf.tar
```
**Шаг 4: Перенесите во внутреннюю изолированную сеть**
Скопируйте через USB, внутренний репозиторий артефактов или другой разрешенный способ передачи:
- `bentopdf.tar`: образ Docker
- Пять пакетов `.tgz` WASM/OCR из шага 1
- Директорию `tesseract-langdata/` из шага 1
- Директорию `ocr-fonts/` из шага 1
**Шаг 5: Настройте внутри изолированной сети**
```bash
# Load the Docker image
docker load -i bentopdf.tar
# Extract WASM packages
mkdir -p ./wasm/pymupdf ./wasm/gs ./wasm/cpdf ./wasm/ocr/core ./wasm/ocr/lang-data ./wasm/ocr/fonts
tar xzf bentopdf-pymupdf-wasm-0.11.14.tgz -C ./wasm/pymupdf --strip-components=1
tar xzf bentopdf-gs-wasm-*.tgz -C ./wasm/gs --strip-components=1
tar xzf coherentpdf-*.tgz -C ./wasm/cpdf --strip-components=1
TEMP_TESS=$(mktemp -d)
tar xzf tesseract.js-7.0.0.tgz -C "$TEMP_TESS"
cp "$TEMP_TESS/package/dist/worker.min.js" ./wasm/ocr/worker.min.js
rm -rf "$TEMP_TESS"
tar xzf tesseract.js-core-7.0.0.tgz -C ./wasm/ocr/core --strip-components=1
cp ./tesseract-langdata/*.traineddata.gz ./wasm/ocr/lang-data/
cp ./ocr-fonts/* ./wasm/ocr/fonts/
# Run BentoPDF
docker run -d -p 3000:8080 --restart unless-stopped bentopdf
```
Убедитесь, что файлы доступны по URL, настроенным на шаге 2, включая `.../ocr/worker.min.js`, `.../ocr/core`, `.../ocr/lang-data` и `.../ocr/fonts`.
</details>
::: info Собираете из исходного кода, а не через Docker?
Задайте переменные в `.env.production` перед запуском `npm run build`:
```bash
VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/
VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/
VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/
VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js
VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core
VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data
VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts
```
:::
### Собственный прокси для WASM
Если нужно раздавать файлы WASM под лицензией AGPL с правильными заголовками CORS, можно развернуть простой прокси. Пример реализации смотрите в [руководстве по Cloudflare WASM Proxy](https://github.com/alam00000/bentopdf/blob/main/cloudflare/WASM-PROXY.md).
::: tip Зачем разделять?
Такое разделение обеспечивает:
- Юридическую ясность для коммерческих пользователей
- Ядро BentoPDF остается под двойной лицензией (AGPL-3.0 / коммерческая)
- Файлы WASM загружаются во время работы и не входят в исходный код
:::
## Системные требования
| Требование | Минимум |
| ---------- | ------------------------------- |
| Диск | ~100 МБ (ядро без модулей AGPL) |
| ОЗУ | 512 МБ |
| Процессор | Любой современный |
::: tip
BentoPDF является статическим сайтом: база данных и серверная часть не нужны!
:::
+211
View File
@@ -0,0 +1,211 @@
# Развертывание в Kubernetes
Kubernetes может быть избыточен для статического сайта, но он хорошо подходит, если вы уже стандартизировали процессы на Helm и GitOps.
> [!IMPORTANT]
> **Обязательные заголовки для конвертации офисных файлов**
>
> Инструментам на основе LibreOffice (конвертация Word, Excel, PowerPoint) для поддержки `SharedArrayBuffer` нужны следующие HTTP-заголовки:
>
> - `Cross-Origin-Opener-Policy: same-origin`
> - `Cross-Origin-Embedder-Policy: require-corp`
>
> Официальные образы BentoPDF на nginx уже отправляют эти заголовки. В Kubernetes **контроллеры Ingress и Gateway тоже являются обратными прокси**, поэтому убедитесь, что заголовки сохраняются (или добавьте их на границе).
## Требования
- Кластер Kubernetes
- Helm v3
- Образ BentoPDF на nginx (например, `ghcr.io/alam00000/bentopdf:<tag>`), который работает на **порту 8080**
## Развертывание с помощью Helm
### Установка из этого репозитория (локальный чарт)
```bash
kubectl create namespace bentopdf
helm upgrade --install bentopdf /path/to/bentopdf/chart \
--namespace bentopdf \
--set image.repository=ghcr.io/alam00000/bentopdf \
--set image.tag=latest
```
### Установка из GHCR (чарт OCI)
Если чарт опубликован в GHCR как артефакт OCI:
```bash
export GHCR_USERNAME="<github-org-or-user>"
helm upgrade --install bentopdf oci://ghcr.io/$GHCR_USERNAME/charts/bentopdf \
--namespace bentopdf \
--create-namespace \
--version 0.1.0 \
--set image.repository=ghcr.io/alam00000/bentopdf \
--set image.tag=latest
```
## Как открыть доступ
### Port-forward (быстрая проверка)
```bash
kubectl -n bentopdf port-forward deploy/bentopdf 8080:8080
```
### Ingress (необязательно)
Включите Ingress (пример для nginx-ingress):
```yaml
ingress:
enabled: true
className: nginx
hosts:
- host: pdf.example.com
paths:
- path: /
pathType: Prefix
```
### Gateway API (необязательно)
Чарт поддерживает `Gateway` и `HTTPRoute` из Gateway API.
Пример (оператор Cloudflare Gateway API):
```yaml
gateway:
enabled: true
name: bento-tunnel
namespace: bentopdf
gatewayClassName: cloudflare
httpRoute:
enabled: true
parentRefs:
- name: bento-tunnel
namespace: bentopdf
sectionName: http
hostnames:
- pdfs.example.com
```
## Сохранение заголовков SharedArrayBuffer (Ingress/Gateway)
### Что должно происходить
Конфигурация nginx в BentoPDF задает нужные заголовки ответа. Большинство контроллеров Ingress и Gateway **передают заголовки ответа апстрима без изменений**.
### Что может сломаться
- Политика контроллера или границы, которая **переопределяет** или **удаляет** заголовки ответа
- Промежуточный слой «заголовков безопасности», который задает другие значения COOP/COEP
### Как проверить
Выполните команду для вашего публичного адреса:
```bash
curl -I https://pdf.example.com/ | egrep -i 'cross-origin-opener-policy|cross-origin-embedder-policy'
```
Вы должны увидеть:
- `Cross-Origin-Opener-Policy: same-origin`
- `Cross-Origin-Embedder-Policy: require-corp`
### Если ваш контроллер Ingress не сохраняет заголовки
Добавьте заголовки на границе (способ зависит от контроллера). Пример для **nginx-ingress**:
```yaml
ingress:
enabled: true
className: nginx
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
```
## Ошибки MIME-типа `.mjs` (пустой iframe в Sign PDF / Form Filler)
Если в консоли браузера появляется `Failed to load module script: ... non-JavaScript MIME type "application/octet-stream"` для запроса `.mjs`, значит контроллер Ingress или Gateway перед nginx из BentoPDF подменяет заголовок `Content-Type` апстрима на `application/octet-stream`.
Nginx в образе BentoPDF уже отдает `.mjs` как `application/javascript`. Нужно запретить контроллеру удалять или заменять этот заголовок. Для nginx-ingress:
```yaml
ingress:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
location ~* \.mjs$ {
types {} default_type application/javascript;
}
```
Либо используйте фильтр `ResponseHeaderModifier` в Gateway API, чтобы задать `Content-Type: application/javascript` для путей `.mjs`. Проверьте на вкладке Network в DevTools: у неудавшегося запроса `.mjs` теперь должно быть `content-type: application/javascript`.
### Если вы используете Gateway API и хотите принудительно добавить заголовки
Gateway API поддерживает фильтр `ResponseHeaderModifier`. Его можно подключить в `httpRoute.rules[*].filters`:
```yaml
httpRoute:
enabled: true
hostnames: [pdf.example.com]
parentRefs:
- name: bento-tunnel
namespace: misc
sectionName: http
rules:
- matches:
- path: { type: PathPrefix, value: / }
filters:
- type: ResponseHeaderModifier
responseHeaderModifier:
set:
- name: Cross-Origin-Opener-Policy
value: same-origin
- name: Cross-Origin-Embedder-Policy
value: require-corp
```
Поддержка конкретных фильтров зависит от вашего контроллера Gateway. Если фильтр игнорируется, добавьте заголовки на уровне границы или контроллера.
## Отключение отдельных инструментов
Используйте ConfigMap, чтобы отключать инструменты во время работы без пересборки образа:
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: bentopdf-config
namespace: bentopdf
data:
config.json: |
{
"disabledTools": ["edit-pdf", "sign-pdf", "encrypt-pdf"]
}
```
Смонтируйте его в раздаваемую директорию:
```yaml
spec:
containers:
- name: bentopdf
volumeMounts:
- name: config
mountPath: /usr/share/nginx/html/config.json
subPath: config.json
readOnly: true
volumes:
- name: config
configMap:
name: bentopdf-config
```
Идентификаторы инструментов совпадают с URL страницы без `.html`: откройте любой инструмент и посмотрите на адрес (например, `edit-pdf`, `merge-pdf`, `compress-pdf`). Отключенные инструменты скрыты с главной страницы, из поиска, быстрых клавиш, конструктора рабочих процессов и недоступны по прямому URL. Полный список параметров смотрите в [руководстве по Docker](/ru/self-hosting/docker#отключение-отдельных-инструментов).
+139
View File
@@ -0,0 +1,139 @@
# Развертывание в Netlify
[Netlify](https://netlify.com) предлагает отличный хостинг статических сайтов с щедрым бесплатным тарифом.
## Развертывание в один клик
[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/alam00000/bentopdf)
## Ручное развертывание
### Шаг 1: Подключите репозиторий
1. Войдите в [Netlify](https://app.netlify.com)
2. Нажмите «Add new site» → «Import an existing project»
3. Подключите свой аккаунт GitHub
4. Выберите свой форк BentoPDF
### Шаг 2: Настройте параметры сборки
| Параметр | Значение |
| ----------------- | --------------- |
| Build command | `npm run build` |
| Publish directory | `dist` |
| Node version | 18+ |
### Шаг 3: Разверните
Нажмите «Deploy site» и дождитесь завершения сборки.
## Файл конфигурации
Создайте `netlify.toml` в корне проекта:
```toml
[build]
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "18"
# Required security headers for SharedArrayBuffer (used by LibreOffice WASM)
[[headers]]
for = "/*"
[headers.values]
Cross-Origin-Embedder-Policy = "require-corp"
Cross-Origin-Opener-Policy = "same-origin"
Cross-Origin-Resource-Policy = "cross-origin"
# Pre-compressed LibreOffice WASM binary - must be served with Content-Encoding
[[headers]]
for = "/libreoffice-wasm/soffice.wasm.gz"
[headers.values]
Content-Type = "application/wasm"
Content-Encoding = "gzip"
Cache-Control = "public, max-age=31536000, immutable"
# Pre-compressed LibreOffice WASM data - must be served with Content-Encoding
[[headers]]
for = "/libreoffice-wasm/soffice.data.gz"
[headers.values]
Content-Type = "application/octet-stream"
Content-Encoding = "gzip"
Cache-Control = "public, max-age=31536000, immutable"
# Cache other WASM files
[[headers]]
for = "*.wasm"
[headers.values]
Cache-Control = "public, max-age=31536000, immutable"
Content-Type = "application/wasm"
# SPA routing
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
```
::: warning Важно
Заголовки `Cross-Origin-Embedder-Policy` и `Cross-Origin-Opener-Policy` необходимы для конвертации Word/ODT/Excel/PowerPoint в PDF. Без них `SharedArrayBuffer` недоступен, и движок LibreOffice WASM не сможет запуститься.
Заголовки `Content-Encoding: gzip` для файлов `.wasm.gz` и `.data.gz` указывают браузеру распаковывать их автоматически. Без них браузер получает необработанные байты gzip, и компиляция WASM завершается ошибкой.
:::
## Переменные окружения
Задайте их в Site settings → Environment variables:
| Переменная | Описание |
| ----------------------- | ----------------------------------------------------------------------- |
| `SIMPLE_MODE` | Укажите `true` для минимальной сборки |
| `VITE_BRAND_NAME` | Свое название бренда (заменяет «BentoPDF») |
| `VITE_BRAND_LOGO` | Путь к логотипу относительно `public/` (например, `images/my-logo.svg`) |
| `VITE_FOOTER_TEXT` | Свой текст подвала и авторских прав |
| `VITE_DEFAULT_LANGUAGE` | Язык интерфейса по умолчанию (например, `fr`, `de`, `es`) |
## Собственный домен
1. Перейдите в Site settings → Domain management
2. Нажмите «Add custom domain»
3. Следуйте инструкциям по настройке DNS
## Большие медиафайлы
Для больших файлов WASM рассмотрите включение [Netlify Large Media](https://docs.netlify.com/large-media/overview/):
```bash
netlify lm:setup
git lfs track "*.wasm"
```
## Устранение неполадок
### Конвертация Word/ODT/Excel в PDF зависает на 55%
Если конвертация документов зависает на 55%, откройте консоль DevTools и проверьте:
```js
console.log(window.crossOriginIsolated); // should be true
console.log(typeof SharedArrayBuffer); // should be "function"
```
Если `crossOriginIsolated` равно `false`, заголовки COEP/COOP из вашего `netlify.toml` не применяются. Убедитесь, что файл лежит в корне проекта, и разверните сайт заново.
Если в консоли появляется `expected magic word 00 61 73 6d, found 1f 8b 08 08`, у файлов `.wasm.gz` нет заголовков `Content-Encoding: gzip`. Убедитесь, что блоки `[[headers]]` для `soffice.wasm.gz` и `soffice.data.gz` есть в вашем `netlify.toml`.
### Сборка завершается ошибкой
Проверьте совместимость версии Node:
```toml
[build.environment]
NODE_VERSION = "20"
```
### Медленная первая загрузка
Включите оптимизацию ресурсов в Site settings → Build & deploy → Asset optimization.
+232
View File
@@ -0,0 +1,232 @@
# Развертывание с Nginx
Разместите BentoPDF на собственном сервере с помощью Nginx.
## Требования
- Сервер Ubuntu/Debian
- Установленный Nginx
- SSL-сертификат (рекомендуется Let's Encrypt)
## Шаг 1: Соберите проект
```bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build
```
Чтобы настроить брендинг, задайте переменные окружения перед сборкой:
```bash
VITE_BRAND_NAME="AcmePDF" VITE_BRAND_LOGO="images/acme-logo.svg" npm run build
```
## Шаг 2: Скопируйте файлы
```bash
sudo mkdir -p /var/www/bentopdf
sudo cp -r dist/* /var/www/bentopdf/
sudo chown -R www-data:www-data /var/www/bentopdf
```
## Шаг 3: Конфигурация Nginx
Создайте `/etc/nginx/sites-available/bentopdf`:
```nginx
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
# SSL Configuration
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
root /var/www/bentopdf;
index index.html;
# Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/wasm;
gzip_min_length 1000;
# WASM MIME type
types {
application/wasm wasm;
}
# Required headers for SharedArrayBuffer (LibreOffice WASM)
# These must be on every response - especially HTML pages
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Resource-Policy "cross-origin" always;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Pre-compressed LibreOffice WASM binary
location ~* /libreoffice-wasm/soffice\.wasm\.gz$ {
gzip off;
types {} default_type application/wasm;
add_header Content-Encoding gzip;
add_header Cache-Control "public, immutable";
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
}
# Pre-compressed LibreOffice WASM data
location ~* /libreoffice-wasm/soffice\.data\.gz$ {
gzip off;
types {} default_type application/octet-stream;
add_header Content-Encoding gzip;
add_header Cache-Control "public, immutable";
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
}
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|wasm)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
}
# SPA routing - serve index.html for all routes
location / {
try_files $uri $uri/ /index.html;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
}
}
```
## Шаг 4: Включите сайт
```bash
sudo ln -s /etc/nginx/sites-available/bentopdf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
## Шаг 5: SSL с Let's Encrypt
```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
```
## Развертывание в подкаталоге
Чтобы разместить сайт по адресу `/pdf/`:
```nginx
location /pdf/ {
alias /var/www/bentopdf/;
try_files $uri $uri/ /pdf/index.html;
}
```
Соберите проект так:
```bash
BASE_URL=/pdf/ npm run build
```
## Настройка производительности
Добавьте в `nginx.conf`:
```nginx
http {
# Enable sendfile
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# Increase buffer sizes
client_max_body_size 100M;
# Worker connections
worker_connections 2048;
}
```
## Устранение неполадок
### WASM не загружается
Убедитесь, что задан MIME-тип:
```nginx
types {
application/wasm wasm;
}
```
### Sign PDF или Form Filler показывает пустой просмотрщик (ошибка MIME для `.mjs`)
Если в консоли браузера появляется:
```
Failed to load module script: The server responded with a non-JavaScript
MIME type of "application/octet-stream". Strict MIME type checking is
enforced for module scripts per HTML spec.
```
…и неудавшийся запрос оканчивается на `.mjs`, значит в вашем nginx нет соответствия `.mjs → application/javascript`. Встроенный просмотрщик PDF (его используют Sign PDF, Form Filler и несколько других инструментов) содержит файлы ES-модулей с расширением `.mjs`, а стандартный `mime.types` в nginx их по умолчанию не включает.
Исправьте это, добавив `mjs` в существующую строку `application/javascript` в `/etc/nginx/mime.types`:
```nginx
application/javascript js mjs;
```
> НЕ добавляйте _вторую_ строку `application/javascript`: nginx разбирает `mime.types` построчно, и в некоторых версиях вторая строка для того же типа молча игнорируется. Отредактируйте существующую строку, добавив `mjs` рядом с `js`.
Или переопределите это локально в блоке server (без правки глобального файла):
```nginx
types {
application/javascript js mjs;
application/wasm wasm;
}
```
После изменения перезагрузите nginx:
```bash
sudo nginx -t && sudo systemctl reload nginx
```
Для проверки найдите в DevTools на вкладке Network неудавшийся запрос `.mjs` и посмотрите заголовок ответа `Content-Type`. Теперь там должно быть `application/javascript`, а не `application/octet-stream`.
### Конвертация Word/ODT/Excel в PDF не работает
LibreOffice WASM требует `SharedArrayBuffer`, а для него нужны заголовки `Cross-Origin-Embedder-Policy` и `Cross-Origin-Opener-Policy`. Также нужен защищенный контекст: `http://localhost` подходит для локальной проверки, но для `http://192.168.x.x` и других адресов в локальной сети обычно требуется HTTPS. Учтите, что директивы `add_header` в блоке `location` **переопределяют** директивы `add_header` уровня server, а не объединяются с ними. Каждый блок `location` со своими `add_header` должен включать заголовки COEP/COOP.
Проверьте так:
```bash
curl -I https://your-domain.com/ | grep -i cross-origin
```
Если перед nginx стоит обратный прокси, убедитесь, что он сохраняет эти заголовки.
### 502 Bad Gateway
Проверьте журнал ошибок Nginx:
```bash
sudo tail -f /var/log/nginx/error.log
```
+122
View File
@@ -0,0 +1,122 @@
# Развертывание в Vercel
[Vercel](https://vercel.com) предлагает самый простой способ развертывания статических сайтов.
## Развертывание в один клик
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/alam00000/bentopdf)
## Ручное развертывание
### Шаг 1: Сделайте форк репозитория
Сделайте форк [bentopdf/bentopdf](https://github.com/alam00000/bentopdf) в свой аккаунт GitHub.
### Шаг 2: Импортируйте в Vercel
1. Перейдите на [vercel.com/new](https://vercel.com/new)
2. Выберите свой форк репозитория
3. Настройте проект:
| Параметр | Значение |
| ---------------- | --------------- |
| Framework Preset | Vite |
| Build Command | `npm run build` |
| Output Directory | `dist` |
| Install Command | `npm install` |
### Шаг 3: Переменные окружения (необязательно)
Добавьте их при необходимости:
| Переменная | Описание |
| ----------------------- | ----------------------------------------------------------------------- |
| `SIMPLE_MODE` | Укажите `true` для минимального интерфейса |
| `VITE_BRAND_NAME` | Свое название бренда (заменяет «BentoPDF») |
| `VITE_BRAND_LOGO` | Путь к логотипу относительно `public/` (например, `images/my-logo.svg`) |
| `VITE_FOOTER_TEXT` | Свой текст подвала и авторских прав |
| `VITE_DEFAULT_LANGUAGE` | Язык интерфейса по умолчанию (например, `fr`, `de`, `es`) |
### Шаг 4: Разверните
Нажмите «Deploy» и дождитесь завершения сборки.
## Собственный домен
1. Откройте настройки проекта
2. Перейдите в раздел «Domains»
3. Добавьте свой домен
4. Настройте DNS по инструкции
## Ограничения
::: warning Большие файлы
У serverless-функций Vercel есть ограничение в 50 МБ. Поскольку BentoPDF является статическим сайтом, это не должно вас затронуть, но модули WASM велики (около 100 МБ в сумме). Убедитесь, что они раздаются из папки `/public`.
:::
## Устранение неполадок
### Тайм-аут сборки
Если сборка завершается по тайм-ауту, попробуйте:
```json
// vercel.json
{
"buildCommand": "npm run build",
"outputDirectory": "dist"
}
```
### Ошибка 404 при обновлении страницы
Добавьте `vercel.json` для маршрутизации SPA:
```json
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}
```
### Конвертация Word/ODT/Excel в PDF не работает
Для конвертации через LibreOffice WASM нужен `SharedArrayBuffer`, а для него на всех страницах должны быть следующие заголовки ответа:
- `Cross-Origin-Embedder-Policy: require-corp`
- `Cross-Origin-Opener-Policy: same-origin`
Предварительно сжатым файлам `.wasm.gz` и `.data.gz` также нужен заголовок `Content-Encoding: gzip`, чтобы браузер их распаковывал.
Добавьте это в свой `vercel.json`:
```json
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }],
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
{ "key": "Cross-Origin-Opener-Policy", "value": "same-origin" },
{ "key": "Cross-Origin-Resource-Policy", "value": "cross-origin" }
]
},
{
"source": "/libreoffice-wasm/soffice.wasm.gz",
"headers": [
{ "key": "Content-Type", "value": "application/wasm" },
{ "key": "Content-Encoding", "value": "gzip" }
]
},
{
"source": "/libreoffice-wasm/soffice.data.gz",
"headers": [
{ "key": "Content-Type", "value": "application/octet-stream" },
{ "key": "Content-Encoding", "value": "gzip" }
]
}
]
}
```
Для проверки откройте консоль DevTools и выполните `console.log(window.crossOriginIsolated)`: должно вернуться `true`.
+49
View File
@@ -0,0 +1,49 @@
---
title: Добавление вложений
description: Встраивайте файлы любого типа в PDF на уровне документа или прикрепляйте их к определенным страницам.
---
# Добавление вложений
Встраивайте один или несколько файлов прямо в PDF-документ. Вложения можно добавить на уровне документа (они видны в панели вложений любой программы для чтения PDF) или привязать к определенным страницам.
## Как это работает
1. Загрузите PDF, к которому нужно прикрепить файлы.
2. В зоне для вложений выберите файлы, которые хотите встроить (любого типа).
3. Выберите уровень вложения: **Документ** (по умолчанию) или **Страница**.
4. Если выбран уровень страницы, укажите диапазон страниц (например, `1-3` или `5`).
5. Нажмите кнопку обработки. Измененный PDF скачается со встроенными файлами.
## Возможности
- Вложения любых типов: изображения, таблицы, архивы, исполняемые файлы, что угодно
- Размещение вложений на уровне документа или страницы
- Несколько файлов можно прикрепить за одну операцию
- Отображаются имена и размеры всех выбранных вложений
- В результате сохраняется исходное содержимое PDF, к которому добавлены встроенные файлы
## Параметры
| Параметр | Описание |
| --------------------- | --------------------------------------------------------------- |
| **Уровень документа** | Прикрепляет файлы к PDF целиком, они доступны в панели вложений |
| **Уровень страницы** | Прикрепляет файлы к определенным страницам, заданным диапазоном |
## Сценарии использования
- Добавление исходных данных (файлов Excel, CSV) к PDF-отчету
- Прикрепление исходных изображений к PDF-портфолио фотографа
- Встраивание подтверждающих документов в договор или коммерческое предложение
- Добавление дополнительных материалов к отдельным страницам учебного пособия
## Советы
- Вложения на уровне документа поддерживаются в программах для чтения PDF лучше всего. Вложения на уровне страницы могут быть видны не во всех программах.
- Ограничения на размер вложений нет, но очень большие встроенные файлы пропорционально увеличат размер PDF.
## Похожие инструменты
- [Извлечение вложений](./extract-attachments)
- [Редактирование вложений](./edit-attachments)
- [Объединение PDF](./merge-pdf)
+40
View File
@@ -0,0 +1,40 @@
---
title: Добавление пустой страницы
description: Вставляйте одну или несколько пустых страниц в любое место PDF-документа.
---
# Добавление пустой страницы
Вставляйте пустые страницы в PDF в указанное место. Вы сами выбираете, куда поместить пустые страницы и сколько их добавить.
## Как это работает
1. Загрузите PDF-файл. Инструмент покажет количество страниц.
2. Введите **позицию**, в которую нужно вставить пустые страницы. Укажите `0`, чтобы вставить в самое начало, или общее число страниц, чтобы добавить в конец.
3. Введите **количество** добавляемых пустых страниц (по умолчанию 1).
4. Нажмите кнопку обработки. Измененный PDF скачается со вставленными пустыми страницами.
## Возможности
- Вставка в любое место: в начало, середину или конец документа
- Добавление нескольких пустых страниц за одну операцию
- Подсказка по позиции динамически обновляется в зависимости от числа страниц загруженного PDF
- Пустые страницы стандартного размера A4
## Сценарии использования
- Добавление пустой страницы-разделителя между разделами сводного документа
- Вставка пустых страниц для правильной двусторонней печати
- Добавление места для рукописных заметок в распечатанном учебном пособии
- Дополнение документа до минимально необходимого числа страниц
## Советы
- Позиция `0` вставляет страницы перед первой. Позиция, равная общему числу страниц, добавляет их после последней.
- Если нужно вставить в определенное место не просто пустые страницы, а содержимое, используйте [Мультиинструмент PDF](./pdf-multi-tool), чтобы вставить другой PDF после заданной страницы.
## Похожие инструменты
- [Упорядочивание и дублирование](./organize-pdf)
- [Мультиинструмент PDF](./pdf-multi-tool)
- [Объединение PDF](./merge-pdf)
+53
View File
@@ -0,0 +1,53 @@
---
title: Добавить метки страниц
description: Добавляйте метки страниц PDF с римскими цифрами, буквенными префиксами, произвольной нумерацией и несколькими правилами на документ.
---
# Добавить метки страниц
Метки страниц определяют, как номера страниц отображаются в программах для чтения PDF (номер в панели инструментов, а не напечатанный на странице). Этот инструмент позволяет назначать разные схемы нумерации разным диапазонам страниц: римские цифры для вводной части, обычные числа для основного текста, буквенные приложения и другое.
## Как это работает
1. Загрузите PDF-файл.
2. Появится панель параметров с одним правилом меток по умолчанию.
3. Для каждого правила задайте диапазон страниц, стиль, необязательный префикс и начальное значение.
4. Нажмите **Добавить правило**, чтобы создать дополнительные правила для других разделов.
5. Нажмите **Добавить метки страниц**, чтобы применить все правила и скачать результат.
## Параметры
У каждого правила меток есть следующие настройки:
- **Диапазон страниц**: страницы, к которым применяется правило. Оставьте пустым для всех страниц. Поддерживаются записи вида `1-4`, `7`, `odd` или `1-9,30-40`.
- **Стиль метки**: десятичные арабские цифры, строчные римские (i, ii, iii), прописные римские (I, II, III), строчные буквы (a, b, c), прописные буквы (A, B, C) или без метки (только префикс).
- **Префикс метки**: необязательный текст перед каждой меткой, например «A-», чтобы получились метки A-1, A-2, A-3.
- **Начальное значение**: число, с которого начинается счет. По умолчанию 1. Укажите 0 для нумерации с нуля.
- **Продолжать нумерацию в несмежных диапазонах**: включите, если правило охватывает несмежные страницы (например, `1-9,30-40` или `odd`) и нумерация должна идти подряд.
- **Удалить существующие метки страниц**: включено по умолчанию. Очищает все прежние метки перед применением новых правил.
## Возможности
- Несколько правил меток на документ для сложных схем нумерации
- Шесть стилей меток, покрывающих все стандартные системы нумерации
- Произвольные префиксы для нумерации по разделам
- Поддержка несмежных диапазонов со сквозной нумерацией
- Возможность сохранить или удалить существующие метки
## Сценарии использования
- Римские цифры (i, ii, iii) для предисловия книги и обычные числа для основного текста
- Нумерация страниц приложений с буквенными префиксами, например «A-1», «A-2», «B-1», «B-2»
- Исправление меток страниц в отсканированном документе, где номера на бумаге не совпадают с порядком страниц в PDF
- Нумерация с нуля для технических документов
## Советы
- Метки страниц являются метаданными, которые программы для чтения PDF показывают в панели навигации. На самой странице они не печатаются. Для видимых номеров используйте [Номера страниц](./page-numbers).
- Для этого инструмента нужно настроить CoherentPDF (CPDF) в настройках WASM. Если он не настроен, вам предложат это сделать.
## Похожие инструменты
- [Номера страниц](./page-numbers)
- [Bates-нумерация](./bates-numbering)
- [Редактирование закладок](./bookmark)
+45
View File
@@ -0,0 +1,45 @@
---
title: Добавление штампов
description: Добавляйте штампы-изображения на страницы PDF с помощью встроенной панели аннотаций с указанием имени автора.
---
# Добавление штампов
Размещайте штампы-изображения на страницах PDF во встроенном просмотрщике с панелью аннотаций для штампов. Штампы могут содержать ваше имя, что удобно для процессов согласования, проверки и маркировки документов.
## Как это работает
1. Введите свое имя в поле **Имя автора штампа**. Это имя будет указано на создаваемых штампах.
2. Загрузите PDF-файл, нажав на зону загрузки или перетащив файл в нее.
3. Откроется редактор штампов с загруженным документом в просмотрщике.
4. С помощью инструмента штампа-изображения на панели выберите и разместите штампы на любой странице.
5. При необходимости измените положение и размер штампов.
6. Нажмите **Сохранить PDF со штампами**, чтобы скачать результат.
## Возможности
- Встроенный просмотрщик PDF с панелью аннотаций для штампов
- Указание имени автора на созданных штампах
- Размещение штампов-изображений на любой странице
- Перетаскивание и изменение размера штампов
- Автоматический подбор размера просмотрщика по пропорциям страницы
- Отображение имени и размера файла
## Сценарии использования
- Добавление штампов «УТВЕРЖДЕНО» или «ПРОВЕРЕНО» в документы в процессе согласования
- Размещение изображений печати компании или нотариуса на официальных документах
- Отметка страниц штампами «ПОЛУЧЕНО» с именем проверяющего
- Добавление штампов контроля качества в акты проверок
## Советы
- Задайте имя автора штампа до загрузки PDF. Имя встраивается в метаданные штампа.
- Высота просмотрщика подстраивается под пропорции первой страницы PDF для удобного просмотра.
- Для текстовых водяных знаков вместо штампов-изображений используйте инструмент [Добавление водяных знаков](./add-watermark).
## Похожие инструменты
- [Подпись PDF](./sign-pdf)
- [Добавление водяных знаков](./add-watermark)
- [Редактор PDF](./edit-pdf)
+79
View File
@@ -0,0 +1,79 @@
---
title: Добавление водяных знаков
description: Накладывайте текстовые или графические водяные знаки на страницы PDF с помощью визуального редактора с перетаскиванием и предпросмотром в реальном времени.
---
# Добавление водяных знаков
Добавляйте текстовые или графические водяные знаки на страницы PDF с помощью визуального редактора. Положение знака можно задать, перетащив его прямо на предпросмотре, размер меняется угловыми маркерами, а также настраиваются прозрачность, поворот, шрифт и цвет. У каждой страницы может быть свое положение знака, либо можно сразу применить один и тот же знак ко всем страницам.
## Как это работает
1. Загрузите PDF-файл.
2. Откроется редактор с предпросмотром первой страницы в реальном времени и перетаскиваемым водяным знаком.
3. Выберите режим **Текст** или **Изображение** с помощью переключателей.
4. Настройте параметры водяного знака на боковой панели.
5. Перетащите знак на предпросмотре в нужное место. Для изменения размера используйте угловые маркеры.
6. Переключайтесь между страницами, чтобы задать знаки для каждой страницы отдельно, либо оставьте включенным **Применить ко всем страницам**.
7. Нажмите **Добавить водяной знак**, чтобы обработать файл и скачать результат.
## Параметры
**Параметры текстового водяного знака:**
- **Текст**: текст знака (например, «КОНФИДЕНЦИАЛЬНО», «ЧЕРНОВИК»).
- **Размер шрифта**: от 10 до 200 пунктов. По умолчанию 72.
- **Цвет**: любой цвет через палитру.
- **Прозрачность**: от полностью прозрачного до полностью непрозрачного.
- **Поворот**: поворот текста знака от -180 до 180 градусов.
**Параметры графического водяного знака:**
- **Загрузка изображения**: загрузите PNG, JPG или другой файл изображения для использования в качестве знака.
- **Прозрачность**: управление прозрачностью изображения.
- **Масштаб**: изменение размера изображения-знака.
**Параметры расположения:**
- **Одиночный**: один знак на страницу, положение задается перетаскиванием или готовыми пресетами позиции.
- **Мозаика**: повторяет знак по всей странице в диагональной сетке, которая следует углу поворота, поэтому знак покрывает документ от края до края.
- **Горизонтальный интервал**: расстояние между плитками вдоль направления текста в процентах от ширины знака (только в режиме мозаики).
- **Вертикальный интервал**: расстояние между рядами плиток в процентах от высоты знака (только в режиме мозаики).
**Общие параметры:**
- **Применить ко всем страницам**: если включено, один и тот же знак применяется к каждой странице. Отключите, чтобы задавать знаки для страниц по отдельности.
- **Диапазон страниц**: укажите, на какие страницы наносится знак (например, «1-3, 5, 7-9» или «all»).
## Возможности
- Визуальное размещение перетаскиванием на предпросмотре PDF в реальном времени
- Изменение размера знака угловыми маркерами
- Текстовый и графический режимы водяных знаков
- Одиночное или мозаичное (повторяющееся) расположение по всей странице с настраиваемыми интервалами
- Применение к отдельным страницам или ко всему документу
- Постраничная навигация в предпросмотре
- Управление прозрачностью и поворотом
- Фильтрация по диапазону страниц
## Сценарии использования
- Пометка черновиков словом «ЧЕРНОВИК» перед рассылкой на согласование
- Добавление водяных знаков «КОНФИДЕНЦИАЛЬНО» в закрытые финансовые отчеты
- Брендирование документов водяным знаком с логотипом компании
- Нанесение отметки «ОБРАЗЕЦ» на документацию, которую показывают потенциальным клиентам
- Добавление уведомлений об авторских правах в распространяемые PDF-материалы
## Советы
- Для диагональных водяных знаков по странице задайте поворот около 45 градусов и увеличьте размер шрифта.
- Режим мозаики сильно затрудняет повторное использование документа после обрезки: даже если убрать один знак, останутся десятки других. При мозаичном расположении уменьшите непрозрачность, чтобы текст под знаками оставался читаемым.
- Изображения-знаки с прозрачным фоном (формат PNG) естественнее сочетаются с содержимым документа.
- Если на разных страницах нужен разный текст знака, отключите «Применить ко всем страницам» и переходите от страницы к странице.
## Похожие инструменты
- [Колонтитулы](./header-footer)
- [Добавление штампов](./add-stamps)
- [Bates-нумерация](./bates-numbering)
- [Подпись PDF](./sign-pdf)
+55
View File
@@ -0,0 +1,55 @@
---
title: Настройка цвета
description: Точно настраивайте яркость, контрастность, насыщенность, оттенок, температуру, тон, гамму и сепию в вашем PDF.
---
# Настройка цвета
Полный набор инструментов цветокоррекции для PDF. Настраивайте восемь независимых параметров: яркость, контрастность, насыщенность, сдвиг оттенка, температуру, тон, гамму и сепию. Предпросмотр обновляется в реальном времени при движении каждого ползунка.
## Как это работает
1. Загрузите PDF-файл.
2. Откроется редактор с предпросмотром первой страницы и панелью настроек цвета.
3. Двигайте ползунки, чтобы изменить каждый параметр цвета. Предпросмотр обновляется сразу.
4. Нажмите **Сбросить**, чтобы вернуть все ползунки в исходное положение.
5. Нажмите **Применить**, чтобы обработать все страницы и скачать скорректированный PDF.
## Параметры
- **Яркость**: осветление или затемнение всей страницы (от -100 до +100).
- **Контрастность**: увеличение или уменьшение разницы между светлыми и темными областями (от -100 до +100).
- **Насыщенность**: усиление или ослабление интенсивности цвета (от -100 до +100). При значении -100 получается изображение в оттенках серого.
- **Сдвиг оттенка**: поворот цветового круга, равномерно сдвигающий все цвета.
- **Температура**: сдвиг цветов в теплую (желтую или оранжевую) или холодную (синюю) сторону.
- **Тон**: добавление зеленого или пурпурного оттенка.
- **Гамма**: настройка яркости средних тонов по гамма-кривой. Значения меньше 1,0 затемняют средние тона, больше 1,0 осветляют их.
- **Сепия**: классический эффект сепии. Чем выше значение, тем сильнее коричневый оттенок.
## Возможности
- Восемь независимо настраиваемых параметров цвета
- Предпросмотр в реальном времени, мгновенно реагирующий на ползунки
- Кнопка сброса для быстрого возврата к значениям по умолчанию
- Обработка всех страниц документа
- Работает с любым содержимым PDF (текст, изображения, графика)
## Сценарии использования
- Осветление темного скана или исправление переэкспонированных страниц
- Снижение насыщенности цветного документа, чтобы сэкономить краску при печати
- Применение сепии для старинного вида сертификатов или наград
- Коррекция цветовой температуры фотографий, встроенных в PDF
- Повышение контрастности выцветших или низкокачественных сканов
## Советы
- Для быстрого перевода в оттенки серого передвиньте ползунок насыщенности до -100.
- Ползунок гаммы особенно полезен для улучшения читаемости сканов, у которых средние тона слишком темные или слишком светлые.
- Как и другие инструменты с эффектами изображения, этот растрирует каждую страницу. Результат будет состоять из изображений, поэтому текст нельзя будет выделить.
## Похожие инструменты
- [Инвертирование цветов](./invert-colors)
- [Эффект сканера](./scanner-effect)
- [Цвет фона](./background-color)
+42
View File
@@ -0,0 +1,42 @@
---
title: Объединение документов с чередованием страниц
description: Объединяйте PDF, чередуя страницы из каждого файла по очереди, с сохранением закладок.
---
# Объединение документов с чередованием страниц
Чередуйте страницы нескольких PDF-файлов так, чтобы они шли по очереди из разных документов. Этот инструмент нужен, когда обычное объединение просто склеивает файлы один за другим, а вам требуется страница 1 файла A, затем страница 1 файла B, затем страница 2 файла A и так далее.
## Как это работает
1. Загрузите не менее двух PDF-файлов через зону загрузки.
2. Инструмент покажет каждый файл с числом страниц и размером.
3. Перетаскивайте маркеры, чтобы изменить, страницы какого файла идут первыми в последовательности чередования.
4. Нажмите **Смешать страницы**, чтобы получить результат с чередованием.
5. Результат скачается как `alternated-mixed.pdf`.
## Возможности
- Чередование страниц любого числа PDF (минимум два)
- Изменение порядка файлов перетаскиванием для управления приоритетом чередования
- Сохранение закладок исходных документов
- Отображение числа страниц и размера каждого загруженного файла
- Обработка в отдельном веб-воркере, чтобы интерфейс оставался отзывчивым
## Сценарии использования
- Сборка двусторонних сканов, когда нечетные и четные страницы сканировались отдельно
- Объединение листов с вопросами и ответами, чтобы после каждого вопроса шел ответ
- Постраничное объединение документов на двух языках (например, английский на одной странице, перевод на следующей)
- Чередование лицевых и оборотных сканов, полученных на одностороннем сканере
## Советы
- Если в исходных PDF разное число страниц, страницы более короткого документа закончатся первыми, а оставшиеся страницы более длинного окажутся в конце.
- Порядок файлов важен: первый файл в списке дает первую страницу результата. При необходимости перетащите файлы, чтобы изменить порядок.
## Похожие инструменты
- [Объединение PDF](./merge-pdf)
- [Упорядочивание и дублирование](./organize-pdf)
- [Разделение PDF](./split-pdf)
+45
View File
@@ -0,0 +1,45 @@
---
title: Цвет фона
description: Меняйте цвет фона на каждой странице PDF, сохраняя все содержимое поверх него.
---
# Цвет фона
Задайте сплошной цвет фона за всем существующим содержимым PDF. Инструмент создает цветной прямоугольник на каждой странице и накладывает поверх него исходное содержимое, поэтому текст, изображения и графика остаются полностью видимыми на новом фоне.
## Как это работает
1. Загрузите PDF-файл.
2. Выберите цвет фона с помощью палитры. По умолчанию это светло-желтый (#FFFFCC).
3. Нажмите **Изменить цвет фона**, чтобы начать обработку.
4. Обновленный PDF скачается автоматически.
## Параметры
- **Цвет фона**: стандартная палитра для выбора любого сплошного цвета. По умолчанию светло-желтый.
## Возможности
- Единый цвет фона на каждой странице
- Все исходное содержимое (текст, изображения, векторная графика) сохраняется поверх цветного слоя
- Исходные размеры страниц сохраняются
- Работает с документами с любым числом страниц
## Сценарии использования
- Светлый кремовый или цвета слоновой кости фон, чтобы документ выглядел мягче, как бумага
- Цветовая маркировка наборов документов с разными фонами для разных категорий
- Создание визуально различимых версий одного документа для разных аудиторий
- Легкий оттенок фона для лучшей читаемости при показе документов на экране
## Советы
- Лучше всего подходят светлые приглушенные цвета. Очень темный фон затрудняет чтение текста, если только сам текст уже не светлый.
- Если нужно изменить и фон, и цвет текста, сначала примените цвет фона, а затем используйте [Изменение цвета текста](./text-color) для результата.
- Инструмент работает на структурном уровне PDF (без растрирования), поэтому текст в результате остается выделяемым и доступным для поиска.
## Похожие инструменты
- [Изменение цвета текста](./text-color)
- [Инвертирование цветов](./invert-colors)
- [Настройка цвета](./adjust-colors)
+62
View File
@@ -0,0 +1,62 @@
---
title: Bates-нумерация
description: Применяйте Bates-номера к одному или нескольким PDF с настраиваемыми шаблонами, дополнением нулями, шрифтами и расположением.
---
# Bates-нумерация
Bates-нумерация проставляет последовательные идентификаторы на каждой странице ваших PDF. Это стандартный способ маркировки документов в судебных разбирательствах, аудитах и процессах комплаенса. Инструмент поддерживает несколько файлов и настраиваемые шаблоны, а результат выдает в виде отдельных пронумерованных PDF или одного ZIP-архива.
## Как это работает
1. Загрузите один или несколько PDF-файлов. Можно перетащить сразу несколько.
2. Выберите готовый стиль или создайте собственный шаблон.
3. Настройте положение, шрифт, размер, цвет и начальные номера.
4. Нажмите **Применить Bates-номера**, чтобы начать обработку.
5. Один файл скачивается напрямую. Несколько файлов скачиваются как ZIP-архив.
## Параметры
- **Готовый стиль**: выберите один из встроенных форматов:
- Exhibit + Case + Bates + Page (например, «Exhibit 1 Case XYZ 000001 Page 1»)
- Exhibit + Case + Bates (без номера страницы)
- Case + Bates
- Только Bates-номер (например, «000001»)
- Пользовательский (напишите свой шаблон)
- **Настроить стиль**: строка шаблона с плейсхолдерами: `[BATES]`, `[PAGE]`, `[FILE]`, `[FILENAME]`.
- **Дополнение Bates-номера**: количество цифр (от 3 до 6) для Bates-номеров с ведущими нулями. Видно только в пользовательском режиме.
- **Положение**: верхний или нижний колонтитул, слева, по центру или справа.
- **Bates-нумерация начинается с**: первый Bates-номер. По умолчанию 1. Нумерация продолжается между файлами.
- **Счетчик файлов начинается с**: начальное число для плейсхолдера `[FILE]`.
- **Шрифт**: Helvetica, Times New Roman или Courier.
- **Размер шрифта**: размер наносимого текста.
- **Цвет**: палитра для цвета текста Bates-номера.
## Возможности
- Предпросмотр в реальном времени показывает, как Bates-номера будут выглядеть во всех загруженных файлах
- Поддержка нескольких файлов со сквозной нумерацией между документами
- Изменение порядка файлов перетаскиванием для управления последовательностью нумерации
- Шесть вариантов положения (верх или низ, слева, по центру, справа)
- Адаптивный расчет полей с учетом разных размеров страниц
- Результат в ZIP для пакетной обработки нескольких файлов
- Плейсхолдеры в шаблонах для максимальной гибкости
## Сценарии использования
- Нумерация документов раскрытия в судебном процессе последовательными номерами доказательств
- Нумерация пакетов аудиторских доказательств, состоящих из десятков файлов
- Нанесение регуляторных справочных номеров на документацию по комплаенсу
- Маркировка приложений к патентной заявке идентификаторами конкретного дела
## Советы
- Перетащите файлы в списке, чтобы изменить их порядок перед обработкой. Последовательность Bates-номеров следует этому порядку.
- Используйте плейсхолдер `[FILENAME]`, чтобы включить в штамп исходное имя файла: так проще отследить страницы до исходных документов.
- Окно предпросмотра обновляется в реальном времени при изменении настроек, поэтому формат можно проверить до обработки.
## Похожие инструменты
- [Номера страниц](./page-numbers)
- [Добавить метки страниц](./add-page-labels)
- [Колонтитулы](./header-footer)
+44
View File
@@ -0,0 +1,44 @@
---
title: BMP в PDF
description: Конвертируйте растровые изображения BMP в PDF прямо в браузере, без загрузки на какой-либо сервер.
---
# BMP в PDF
Конвертируйте файлы Windows Bitmap (BMP) в PDF. BMP, несжатый формат изображений, до сих пор встречается в устаревших системах, медицинской визуализации и промышленных сканерах. Этот инструмент превращает их в PDF без установки чего-либо.
## Поддерживаемые форматы
| Формат | Расширения |
| :----- | :--------- |
| BMP | `.bmp` |
## Как это работает
1. Нажмите на зону загрузки или перетащите в нее файлы BMP.
2. Просмотрите список файлов. Добавьте еще файлы или удалите ненужные.
3. Нажмите **Конвертировать в PDF**. Результат скачается как `from_bmps.pdf`.
Каждое BMP рисуется на canvas, экспортируется в PNG и затем встраивается в PDF с помощью pdf-lib. Размер страницы совпадает с размерами исходного изображения.
## Параметры
У этого инструмента нет дополнительных настроек качества. Изображения встраиваются в исходном разрешении как PNG без потерь внутри PDF.
## Сценарии использования
- Конвертация старых отсканированных документов в формате BMP в архивные PDF
- Превращение снимков экрана в BMP из старых приложений Windows в документы, которыми удобно делиться
- Обработка результатов медицинских или промышленных сканеров, которые по умолчанию сохраняют BMP
- Перенос старых архивов изображений в более переносимый формат
## Советы
- Файлы BMP не сжаты, поэтому обычно велики. Итоговый PDF будет заметно меньше, так как внутри изображения перекодируются в PNG.
- Если у вас есть файлы BMP вместе с другими форматами изображений, используйте инструмент [Изображения в PDF](./image-to-pdf), чтобы конвертировать все за один раз.
## Похожие инструменты
- [Изображения в PDF](./image-to-pdf)
- [PNG в PDF](./png-to-pdf)
- [TIFF в PDF](./tiff-to-pdf)
+57
View File
@@ -0,0 +1,57 @@
---
title: Редактирование закладок
description: Добавляйте, редактируйте, импортируйте, экспортируйте и удаляйте закладки PDF в визуальном редакторе с поддержкой CSV и JSON.
---
# Редактирование закладок
Редактор закладок дает полный контроль над навигационными закладками PDF (их также называют структурой документа). Вы можете добавлять новые закладки, редактировать существующие, менять иерархию, а также импортировать и экспортировать данные закладок в форматах CSV и JSON.
## Как это работает
1. Загрузите PDF, щелкнув по области загрузки или перетащив в нее файл.
2. При желании отметьте **Автоматически извлекать существующие закладки**, чтобы загрузить текущее дерево закладок документа.
3. Редактор откроется в режиме разделенного экрана: слева просмотр PDF, справа панель закладок.
4. Введите название закладки и нажмите **Добавить на страницу**, чтобы создать закладку на текущую страницу.
5. Кнопками на панели инструментов можно переставлять, оформлять или удалять закладки.
6. Нажмите **Сохранить PDF с закладками**, чтобы скачать обновленный файл.
## Возможности
- Визуальный просмотр PDF с навигацией по страницам, масштабированием и переходом к нужной странице
- Добавление закладки на любую страницу одним щелчком
- Щелчок прямо по PDF для точного задания места назначения закладки (режим выбора)
- Вложенная иерархия закладок с изменением порядка перетаскиванием
- Пакетные операции: выберите несколько закладок, чтобы сразу изменить цвет, стиль или удалить их
- Поиск по закладкам для быстрого нахождения записей в больших деревьях
- Отмена и повтор всех изменений
- Импорт закладок из CSV (название, страница, уровень) или JSON
- Экспорт закладок в CSV или JSON для внешнего редактирования
- Оформление закладок: цвет (красный, синий, зеленый, желтый, фиолетовый) и начертание (полужирный, курсив, полужирный курсив)
- Быстрая навигация: прокручивайте страницы клавишами Page Up и Page Down
## Параметры
- **Автоматически извлекать существующие закладки**: если отмечено, инструмент при загрузке считывает и показывает текущие закладки PDF.
- **Пакетный режим**: включите, чтобы выбирать несколько закладок и применять к ним массовое изменение цвета, стиля или удаление.
- **Развернуть всё / Свернуть всё**: быстро показывает или скрывает вложенные закладки.
## Сценарии использования
- Добавление оглавления в учебник или руководство, где нет закладок
- Перестройка закладок в отсканированном документе после распознавания текста
- Экспорт закладок в CSV, правка в электронной таблице и повторный импорт
- Очистка автоматически созданных закладок с неверными ссылками на страницы
- Цветные закладки для выделения важных разделов в юридическом документе
## Советы
- Для массового создания закладок используйте импорт CSV. Формат простой: `title,page,level`, где уровень 1 означает верхний уровень.
- Режим выбора позволяет щелкнуть по точному месту на странице PDF и задать место назначения закладки, что точнее, чем указание только номера страницы.
- Экспортируйте закладки перед крупными изменениями, чтобы иметь резервную копию.
## Связанные инструменты
- [Оглавление](./table-of-contents)
- [Редактор PDF](./edit-pdf)
- [Добавить метки страниц](./add-page-labels)
+47
View File
@@ -0,0 +1,47 @@
---
title: CBZ в PDF
description: Преобразуйте архивы комиксов CBZ и CBR в PDF прямо в браузере. Бесплатно, конфиденциально, без загрузки на сервер.
---
# CBZ в PDF
Превращайте архивы комиксов в PDF. CBZ и CBR являются стандартными форматами цифровых комиксов: это обычные архивы ZIP или RAR с изображениями. Инструмент извлекает каждую страницу, сохраняет порядок чтения и создает аккуратный PDF, где каждое изображение становится страницей полного размера.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :----- | :--------- | :------------------------------------------------------------------ |
| CBZ | `.cbz` | Архив комикса на основе ZIP (обрабатывается локально через pdf-lib) |
| CBR | `.cbr` | Архив комикса на основе RAR (обрабатывается движком PyMuPDF) |
Конвертер CBZ распознает изображения JPEG, PNG, GIF, BMP, WebP, AVIF, TIFF, HEIC и JXL внутри архива. Нестандартные форматы перед встраиванием автоматически преобразуются в PNG.
## Как это работает
1. Щелкните по области загрузки или перетащите в нее файлы CBZ или CBR. В одной партии можно смешивать оба формата.
2. Проверьте список файлов. Удалите ненужные или нажмите **Добавить еще файлы**, чтобы добавить еще.
3. Нажмите **Преобразовать в PDF**. Для файлов CBZ инструмент распаковывает архив, сортирует изображения по имени в естественном порядке, определяет реальный формат каждого изображения и встраивает их в PDF с помощью pdf-lib. Файлы CBR обрабатываются движком PyMuPDF.
4. Один файл скачивается как PDF. Несколько файлов дают ZIP-архив с именем `comic-converted.zip`.
## Параметры
Настройка не требуется. Каждое изображение становится страницей того же размера, что и оригинал, поэтому развороты остаются широкими, а одиночные страницы узкими.
## Сценарии использования
- Чтение комиксов на планшете или в приложении для телефона, которое поддерживает PDF, но не CBZ/CBR
- Печать отдельных страниц цифрового комикса
- Архивирование коллекции комиксов в формат, который откроет любой просмотрщик
- Передача комикса тому, у кого нет специальной программы для чтения комиксов
## Советы
- Изображения внутри архива сортируются в естественном порядке (так что `page2.jpg` идет раньше `page10.jpg`). Нумеруйте файлы единообразно, чтобы страницы шли в правильной последовательности.
- Конвертер определяет формат изображений по двоичным сигнатурам, а не по расширениям. PNG, случайно названный `.jpg`, все равно будет встроен правильно.
- Файлы CBZ обрабатываются полностью в браузере без загрузки движка PyMuPDF, поэтому конвертируются быстрее, чем CBR.
## Связанные инструменты
- [EPUB в PDF](./epub-to-pdf)
- [MOBI в PDF](./mobi-to-pdf)
- [Изображения в PDF](./image-to-pdf)
+61
View File
@@ -0,0 +1,61 @@
---
title: Изменение разрешений
description: Задавайте или меняйте разрешения PDF на печать, копирование, редактирование и добавление аннотаций. Используется 256-битное шифрование AES.
---
# Изменение разрешений
Гибко настройте, что получатели могут делать с вашим PDF. В отличие от обычного шифрования, которое просто закрывает файл паролем, этот инструмент позволяет выборочно разрешать или запрещать печать, копирование, редактирование, аннотирование, заполнение форм, сборку документа и извлечение страниц. Все ограничения обеспечиваются 256-битным шифрованием AES.
## Как это работает
1. Загрузите PDF-файл.
2. Если PDF уже зашифрован, введите **Текущий пароль**.
3. Задайте **Новый пароль пользователя** (нужен для открытия) и/или **Новый пароль владельца** (управляет разрешениями).
4. Включайте и отключайте отдельные разрешения с помощью флажков.
5. Нажмите **Изменение разрешений**.
6. Скачайте обновленный PDF.
Если оставить оба поля нового пароля пустыми, инструмент полностью расшифрует PDF, сняв все шифрование и ограничения.
## Управление разрешениями
| Разрешение | Что оно контролирует |
| -------------------------------- | --------------------------------------------------- |
| **Разрешить печать** | Можно ли печатать документ |
| **Разрешить копирование текста** | Можно ли выделять и копировать текст и изображения |
| **Разрешить изменение** | Можно ли редактировать содержимое документа |
| **Разрешить аннотирование** | Можно ли добавлять комментарии, выделения и штампы |
| **Разрешить заполнение форм** | Можно ли заполнять интерактивные поля форм |
| **Разрешить сборку документа** | Можно ли вставлять, удалять и поворачивать страницы |
| **Разрешить извлечение страниц** | Можно ли извлекать отдельные страницы |
Для работы любых разрешений необходим пароль владельца. Без пароля владельца флаги разрешений игнорируются большинством программ для чтения PDF.
## Как работают разрешения в PDF
Разрешения PDF входят в спецификацию шифрования. Они хранятся как битовые флаги в словаре шифрования, и их соблюдают совместимые программы для чтения PDF. Главное различие:
- **Пароль пользователя**: нужен, чтобы вообще открыть файл.
- **Пароль владельца**: нужен, чтобы изменить разрешения или снять ограничения. Без него флаги разрешений определяют, какие операции доступны пользователю.
Если задать только пароль владельца (без пароля пользователя), файл сможет открыть любой, но ему будут доступны только разрешенные операции. Если задать оба пароля, для открытия файла потребуется пароль, а после аутентификации действуют ограничения.
## Сценарии использования
- Рассылка отчета, который можно смотреть и печатать, но нельзя редактировать и копировать
- Передача шаблона договора, который получатели могут заполнить, но не изменить
- Публикация PDF-каталога с отключенным копированием изображений
- Разрешение аннотировать черновик для рецензирования при запрете структурных изменений
## Советы
- Чтобы защита работала, всегда задавайте пароль владельца. Разрешения без пароля владельца невозможно обеспечить.
- Некоторые сторонние PDF-инструменты игнорируют флаги разрешений. Для более надежной защиты рассмотрите растеризацию PDF или DRM.
- Используйте этот инструмент, чтобы обновить старые PDF с шифрованием RC4 до AES-256.
## Связанные инструменты
- [Защита PDF](./protect-pdf): простая защита паролем без гибких разрешений
- [Разблокировка PDF](./unlock-pdf): полное снятие шифрования
- [Снятие ограничений](./remove-restrictions): удаление всех ограничений, если у вас есть пароль владельца
+55
View File
@@ -0,0 +1,55 @@
---
title: Объединение в одну страницу
description: Склейте все страницы PDF в одну непрерывную вертикальную или горизонтальную ленту.
---
# Объединение в одну страницу
Объедините все страницы PDF в одну длинную страницу. Страницы склеиваются по вертикали (как свиток) или по горизонтали (рядом друг с другом), и на выходе получается одна непрерывная страница.
## Как это работает
1. Загрузите PDF-файл.
2. Выберите направление: **Вертикально** (страницы друг под другом) или **Горизонтально** (страницы рядом).
3. Задайте расстояние между страницами в пунктах.
4. Выберите цвет фона для промежутков между страницами.
5. При желании включите разделители (тонкие линии между страницами) и настройте их толщину и цвет.
6. Нажмите кнопку обработки. На выходе будет одностраничный PDF.
## Возможности
- Вертикальная или горизонтальная склейка страниц
- Настраиваемое расстояние между страницами
- Выбор цвета фона для промежутков
- Необязательные линии-разделители с настраиваемой толщиной и цветом
- Каждая исходная страница отображается в полном разрешении на общем холсте
## Параметры
| Параметр | Описание |
| ------------------------------ | ----------------------------------------------- |
| **Направление раскладки** | Вертикально (стопкой) или горизонтально (рядом) |
| **Интервал** | Расстояние между страницами в пунктах |
| **Цвет фона** | Цвет области между страницами |
| **Добавить линии-разделители** | Включает тонкие линии между страницами |
| **Толщина разделителя** | Толщина линии в пунктах |
| **Цвет разделителя** | Цвет линий-разделителей |
## Сценарии использования
- Создание одного длинного изображения из многостраничного макета или прототипа
- Непрерывный прокручиваемый вид документа для встраивания на веб-страницу
- Склейка многостраничного комикса или раскадровки в одну ленту
- Панорамный вид последовательных страниц для рецензирования
## Советы
- Вертикальная ориентация лучше подходит для документов с книжными страницами. Горизонтальная лучше для альбомного содержимого.
- Большие документы с множеством страниц дадут очень высокий или очень широкий результат. Некоторые программы просмотра PDF могут плохо справляться со слишком большими одиночными страницами.
- Разделители контрастного цвета помогают легко увидеть, где заканчивается одна исходная страница и начинается следующая.
## Связанные инструменты
- [N-Up PDF](./n-up-pdf)
- [Объединение PDF](./merge-pdf)
- [Разделение страниц](./divide-pages)
+60
View File
@@ -0,0 +1,60 @@
---
title: Сравнение документов
description: Сравнивайте два PDF-документа рядом или в режиме наложения с подробным выявлением и классификацией изменений.
---
# Сравнение документов
Загрузите два PDF и узнайте, что именно изменилось. Инструмент интеллектуально сопоставляет страницы, находит различия в тексте, изображениях, аннотациях, колонтитулах и оформлении и показывает их рядом или в режиме наложения.
## Как это работает
1. Загрузите два PDF-файла: оригинал (слева) и исправленную версию (справа).
2. Инструмент сопоставляет страницы документов по сигнатурам содержимого.
3. Выберите режим просмотра: **Рядом** или **Наложение**.
4. Переключайтесь между парами страниц с помощью элементов постраничной навигации.
5. Различия выделяются и классифицируются. Панель фильтров помогает сосредоточиться на нужных типах изменений.
6. При желании экспортируйте сравнение в виде PDF-отчета.
## Возможности
- Автоматическое сопоставление страниц по схожести содержимого
- Режимы сравнения рядом и с наложением
- Классификация изменений: текст, изображение, колонтитулы, аннотации, оформление, фон
- Переключатели фильтров по категориям для показа или скрытия отдельных типов изменений
- Поиск по изменениям текста с фильтрацией по запросу
- Поддержка OCR для сравнения отсканированных документов
- Масштабирование для детального просмотра
- Синхронная прокрутка панелей в режиме рядом
- Экспорт результатов сравнения в PDF
## Параметры
| Параметр | Описание |
| --------------------- | ----------------------------------------------------------------------------------------------- |
| **Режим просмотра** | Рядом или наложение |
| **OCR** | Включает и отключает OCR для сравнения отсканированных документов |
| **Язык OCR** | Язык для извлечения текста методом OCR |
| **Фильтры категорий** | Переключает видимость изменений текста, изображений, колонтитулов, аннотаций, оформления и фона |
| **Область изменений** | В режиме наложения: все изменения или только изменения содержимого |
| **Масштаб** | Настройка масштаба для детального просмотра |
## Сценарии использования
- Проверка правок договора, чтобы увидеть, что именно изменилось между версиями
- Сравнение макетов, чтобы убедиться, что экспорт в PDF соответствует ожиданиям
- Аудит изменений документов в регулируемых отраслях, где нужно отслеживать каждую правку
- Проверка того, что преобразование в PDF точно сохранило исходное содержимое
- Сверка переводов документов с оригиналом на предмет изменений верстки
## Советы
- Режим наложения помещает оба документа друг на друга, поэтому пространственные различия (сдвинутые элементы, измененные размеры изображений) сразу заметны.
- Включайте OCR при сравнении отсканированных документов без текстового слоя. Движок сравнения извлечет текст из изображений страниц.
- Используйте фильтры категорий, чтобы сосредоточиться на важном. Например, скройте изменения оформления, если вас интересуют только различия в тексте.
## Связанные инструменты
- [Просмотр метаданных](./view-metadata)
- [Распознавание текста в PDF](./ocr-pdf)
- [Объединение PDF](./merge-pdf)
+73
View File
@@ -0,0 +1,73 @@
---
title: Сжатие PDF
description: Уменьшайте размер PDF до 90% с помощью движка Hyper Compress. Поддерживаются целевой размер файла, пакетная обработка и пользовательские настройки качества.
---
# Сжатие PDF
Уменьшайте PDF-файлы, не разрушая их. Сжатие PDF работает на [Hyper Compress](https://www.bentopdf.com/hyper-compress), собственном движке сжатия BentoPDF. Он пережимает изображения, создает подмножества шрифтов и объединяет их, а также удаляет лишний вес: встроенные миниатюры и приватные данные приложений. PDF остается полностью рабочим: текст можно выделять, ссылки и поля форм продолжают работать.
Hyper Compress скомпилирован в WebAssembly и поставляется вместе с BentoPDF, поэтому сжатие работает офлайн и в изолированных развертываниях без дополнительной настройки.
## Как это работает
1. Загрузите один или несколько PDF, щелкнув по области загрузки или перетащив файлы.
2. Выберите **Уровень сжатия**: Низкий, Средний, Высокий или Без потерь.
3. При желании введите **Целевой размер файла** или раскройте **Пользовательские настройки** для тонкой настройки, включая **Конвертировать в оттенки серого**.
4. Нажмите **Сжатие PDF**. Для нескольких файлов вы получите один ZIP-архив.
## Особые документы
- **PDF с цифровой подписью** возвращаются без изменений, так как любое изменение сделает подпись недействительной. Включите **Игнорировать защиту содержимого** в разделе «Пользовательские настройки», чтобы удалить подписи и сжать файл: видимая подпись останется на странице, но файл больше не будет подписан.
- **Файлы PDF/A** после сжатия теряют метку PDF/A, чтобы файл не заявлял соответствие, которому он больше не отвечает. Включите **Сохранить PDF/A** в разделе «Пользовательские настройки», чтобы сохранить соответствие.
- **PDF, защищенные паролем**, получают поле пароля на карточке файла. Введите пароль там, и Hyper Compress откроет файл сам, без отдельного шага расшифровки. Если заблокированных файлов два и больше, одно общее поле открывает все файлы с одинаковым паролем. У сжатой копии пароля нет; чтобы снова добавить его, используйте [Защита PDF](./protect-pdf).
- **Сканы без текстового слоя** можно сжать сильнее с помощью **Растеризовать страницы в изображения** в разделе «Пользовательские настройки», который заменяет каждую страницу одним оптимизированным изображением. Это пропускается для любого документа с выделяемым текстом, включая сканы с распознанным текстом, если не включено **Игнорировать защиту содержимого**. Тогда текстовые страницы тоже становятся изображениями, текст перестает выделяться, а ссылки перестают работать.
## Уровни сжатия
| Уровень | Качество изображений | Макс. разрешение | Лучше всего подходит для |
| -------------- | ---------------------- | ---------------- | ------------------------------------ |
| **Низкий** | 80 | 200 DPI | Сохранения визуального качества |
| **Средний** | 50 | 150 DPI | Повседневных документов |
| **Высокий** | 20 | 72 DPI | Вложений в письма, загрузки на сайты |
| **Без потерь** | Изображения не тронуты | Без изменений | Архивных копий |
Уровень «Высокий» также убирает встраивание 14 стандартных шрифтов PDF и похожих на них, например Arial, если это безопасно.
## Целевой размер файла
Введите размер в КБ или МБ, и Hyper Compress подберет наилучшее качество изображений, при котором файл все еще укладывается в этот размер, начиная с выбранного уровня. Если документ невозможно сжать до такого размера, вы получите самую маленькую версию, которую удалось создать, и сообщение об этом. Специальные страницы, например [Сжать PDF до 1MB](https://www.bentopdf.com/compress-pdf-to-1mb), открываются с уже заполненным целевым размером.
## Пользовательские настройки
Раскройте панель «Пользовательские настройки», чтобы напрямую настроить Hyper Compress. Выбор уровня сжатия сбрасывает эти параметры к значениям этого уровня, а изменение любого из них переключает уровень на «Пользовательский».
- **Игнорировать защиту содержимого**: по умолчанию Hyper Compress не трогает подписанные PDF и не растеризует страницы с текстом. Включение отменяет оба ограничения. Параметр остается включенным при смене уровня.
- **Изображения**: качество изображений, максимальное разрешение, принудительная передискретизация, сокращение цветов, обрезка невидимых областей изображений, удаление альтернативных изображений, упрощение цветовых профилей, JPEG 2000 и режим без потерь
- **Шрифты**: создание подмножеств, объединение дубликатов и отмена встраивания стандартных шрифтов и похожих на них
- **Содержимое**: сведение аннотаций, полей форм или ссылок
- **Очистка**: удаление миниатюр, данных приложений, цепочек статей, информации о веб-захвате, дерева структуры или выходных намерений
- **Растеризовать**: замена страниц изображениями для сканов, состоящих только из изображений; пропускается, если в документе есть выделяемый текст
- **Вывод**: «Сохранить PDF/A» и сжатие Brotli для программ чтения PDF 2.0, которые его поддерживают
## Сценарии использования
- Уменьшение отчета в 50 МБ до лимита вложений электронной почты
- Уменьшение скана до строгого лимита загрузки на портале с помощью целевого размера файла
- Оптимизация маркетинговых PDF для более быстрой загрузки с сайта
- Архивирование больших наборов документов, когда важна стоимость хранения
- Снижение расхода мобильного трафика при отправке PDF через мессенджеры
## Советы
- Начните с уровня «Средний». Если результат все еще слишком большой, задайте целевой размер файла или перейдите на «Высокий».
- Для скана без текстового слоя включите «Растеризовать страницы в изображения» в разделе «Пользовательские настройки».
- Параметр «Конвертировать в оттенки серого» в разделе «Пользовательские настройки» может уменьшить размер документов с большим количеством цветных элементов.
## Связанные инструменты
- [Линеаризация документа](./linearize-pdf): оптимизируйте сжатый PDF для быстрого просмотра в вебе
- [Растеризация документа](./rasterize-pdf): преобразование страниц в изображения с заданным DPI, включая страницы с текстом
- [Восстановление документа](./repair-pdf): исправление PDF, поврежденного при сжатии в другом инструменте
- [Удаление метаданных](./remove-metadata): удаление скрытых данных для конфиденциальности
+44
View File
@@ -0,0 +1,44 @@
---
title: Обрезка PDF
description: Визуально обрезайте страницы PDF, рисуя область обрезки на каждой странице в редакторе на базе Cropper.js.
---
# Обрезка PDF
Обрезайте поля страниц PDF в визуальном интерфейсе. Нарисуйте прямоугольник обрезки прямо на странице, посмотрите результат и примените обрезку. Для разных страниц можно задать разные области обрезки или применить одну и ту же обрезку ко всему документу.
## Как это работает
1. Загрузите PDF-файл.
2. Откроется редактор обрезки с первой страницей и перетаскиваемой областью обрезки.
3. Меняйте прямоугольник обрезки, перетаскивая его края или углы.
4. Кнопками навигации переходите между страницами и задавайте область обрезки для каждой из них.
5. Нажмите **Обрезать и скачать**, чтобы применить обрезку и скачать результат.
## Возможности
- Визуальный редактор обрезки на базе Cropper.js с маркерами для точной настройки
- Постраничная навигация для задания отдельных областей обрезки
- Настройки обрезки хранятся для каждой страницы, поэтому для разных страниц можно задать разную обрезку
- Предпросмотр выбранной области обрезки в реальном времени
- Поддержка PDF с любым размером и ориентацией страниц
## Сценарии использования
- Удаление широких полей из отсканированных документов, чтобы сосредоточиться на содержимом
- Удаление печатных меток обреза и приводочных меток из PDF для допечатной подготовки
- Обрезка слайдов лекций, чтобы убрать область заметок докладчика
- Удаление верхних и нижних колонтитулов со всех страниц перед отправкой отрывка документа
- Изменение размера страниц под конкретный экран или макет печати
## Советы
- Область обрезки можно свободно менять по размеру и перемещать. Тяните за углы для пропорционального изменения или за края для изменения по одной оси.
- Если для всех страниц нужна одинаковая обрезка, задайте ее на первой странице: инструмент запоминает область обрезки при переходе между страницами.
- Если нужно привести страницы к единому размеру, а не обрезать визуально, лучше подойдет инструмент «Редактор размера страниц».
## Связанные инструменты
- [Редактор PDF](./edit-pdf)
- [Нумерация страниц](./page-numbers)
- [Удаление пустых страниц](./remove-blank-pages)
+51
View File
@@ -0,0 +1,51 @@
---
title: CSV в PDF
description: Преобразуйте файлы CSV в отформатированные таблицы PDF прямо в браузере.
---
# CSV в PDF
Превращайте файлы CSV в аккуратные отформатированные PDF-документы. Каждый CSV разбирается и отображается в выходном PDF в виде таблицы. Это удобно, когда нужно распечатать или передать табличные данные, не требуя от получателя программы для работы с электронными таблицами.
## Поддерживаемые форматы
| Формат | Расширения |
| :----- | :--------- |
| CSV | `.csv` |
## Как это работает
1. Щелкните по области загрузки или перетащите в нее один или несколько файлов CSV.
2. Проверьте список файлов. Добавьте еще файлы или удалите ненужные.
3. Нажмите **Конвертировать в PDF**. Индикатор выполнения показывает состояние преобразования.
4. Один файл скачивается сразу как PDF. Несколько файлов упаковываются в `csv-converted.zip`.
## Параметры
У этого инструмента нет дополнительных настроек. CSV автоматически разбирается и форматируется как таблица.
## Результат
| Количество файлов | Результат |
| :---------------- | :---------------------------------------------------------------- |
| 1 файл | Скачивание одного PDF (например, `data.pdf`) |
| 2 и более файлов | ZIP-архив (`csv-converted.zip`) с отдельным PDF для каждого файла |
## Сценарии использования
- Преобразование экспортированных отчетов из баз данных в печатные PDF-таблицы
- Передача финансовых данных или списков инвентаризации тем, у кого нет Excel
- Создание PDF-версий лог-файлов CSV для документации по соответствию требованиям
- Печать списков адресов, ведомостей оценок и любых других табличных данных в формате CSV
## Советы
- Для лучшего результата используйте в CSV стандартный разделитель-запятую. Инструмент следует общепринятым правилам разбора CSV.
- Если в CSV много столбцов, таблица может быть сжата по ширине страницы. Подумайте о разделении широких наборов данных на несколько файлов.
- Для файлов Excel (`.xls`, `.xlsx`) используйте инструмент [Excel в PDF](./excel-to-pdf), который сохраняет форматирование таблиц и несколько листов.
## Связанные инструменты
- [Excel в PDF](./excel-to-pdf)
- [Текст в PDF](./txt-to-pdf)
- [JSON в PDF](./json-to-pdf)
+42
View File
@@ -0,0 +1,42 @@
---
title: Удаление страниц
description: Удаляйте из PDF отдельные страницы по номеру, диапазону или визуальному выбору миниатюр.
---
# Удаление страниц
Удаляйте ненужные страницы из PDF-документа. Укажите страницы для удаления, введя номера или диапазоны, или щелкайте по миниатюрам страниц, чтобы отметить их.
## Как это работает
1. Загрузите PDF-файл. Инструмент отобразит миниатюры всех страниц.
2. Введите страницы для удаления в текстовое поле с синтаксисом диапазонов (например, `2, 5-8`) или щелкайте по миниатюрам, чтобы переключать выбор.
3. Отмеченные страницы выделяются, чтобы вы могли проверить выбор.
4. Нажмите кнопку обработки. Будет создан новый PDF без выбранных страниц.
## Возможности
- Выбор страниц текстом с синтаксисом диапазонов (`2, 5-8, 12`)
- Визуальная сетка миниатюр для удаления щелчком
- Подсветка страниц, отмеченных для удаления, в реальном времени
- Проверка ввода по фактическому числу страниц
- Все оставшиеся страницы сохраняют исходный порядок
## Сценарии использования
- Удаление пустых или заполняющих страниц из отсканированного документа
- Удаление титульных страниц или приложений перед передачей документа
- Очистка черновых страниц, случайно оставшихся в итоговом PDF
- Удаление страниц с конфиденциальной информацией перед распространением
## Советы
- Удаление страниц не влияет на содержимое и оформление остальных страниц. Результат является точной копией оригинала без удаленных страниц.
- Если вам нужно оставить только определенные страницы, а не удалить определенные, лучше подойдет [Извлечение страниц](./extract-pages).
- Миниатюры загружаются лениво, поэтому с большими документами интерфейс остается отзывчивым.
## Связанные инструменты
- [Извлечение страниц](./extract-pages)
- [Дублирование и организация](./organize-pdf)
- [Разделение PDF](./split-pdf)
+46
View File
@@ -0,0 +1,46 @@
---
title: Выпрямление PDF
description: Автоматически выравнивайте наклонные страницы в отсканированных PDF с помощью определения перекоса OpenCV. Настраиваемые порог и DPI.
---
# Выпрямление PDF
Отсканированные документы редко бывают идеально ровными. Даже небольшой наклон снижает точность OCR и портит вид печати. Этот инструмент использует алгоритмы обработки изображений OpenCV, чтобы определить угол перекоса каждой страницы и повернуть ее обратно в горизонтальное положение.
## Как это работает
1. Загрузите один или несколько отсканированных PDF.
2. Задайте **Порог наклона**: страницы, у которых обнаруженный перекос меньше этого значения, остаются без изменений.
3. Выберите **Качество обработки (DPI)**: более высокий DPI повышает точность определения, но занимает больше времени.
4. Нажмите **Выпрямление PDF**.
5. После обработки панель результатов покажет обнаруженный угол каждой страницы и то, была ли она исправлена.
## Параметры
| Параметр | Значения | По умолчанию |
| ---------------------------- | -------------------------- | ------------ |
| **Порог наклона** | 0.1, 0.5, 1.0, 2.0 градуса | 0.5 |
| **Качество обработки (DPI)** | 100, 150, 200, 300 | 150 |
## Как работает определение перекоса
Инструмент отображает каждую страницу в изображение с выбранным DPI, затем с помощью OpenCV находит преобладающие углы линий в содержимом. Если обнаруженный перекос превышает порог, страница поворачивается на обратный угол. Страницы ниже порога передаются без изменений.
## Сценарии использования
- Очистка пакетно отсканированных договоров и юридических документов
- Подготовка отсканированных чеков и счетов к распознаванию текста
- Выпрямление страниц с планшетного сканера при неровной укладке бумаги
- Улучшение внешнего вида оцифрованных архивных материалов
## Советы
- Уменьшите порог до 0.1 градуса, если для OCR нужно попиксельное выравнивание.
- 150 DPI быстро и точно подходит для большинства документов. Используйте 300 DPI для очень мелкого текста или страниц с тонкими деталями.
- Выпрямление лучше всего работает с документами, где есть четкие горизонтальные строки текста. Страницы, состоящие в основном из изображений или диагональных элементов оформления, могут вызывать трудности.
## Связанные инструменты
- [Растеризация документа](./rasterize-pdf): преобразуйте выпрямленный результат в плоский PDF на основе изображений
- [Сжатие PDF](./compress-pdf): уменьшите размер файла после выпрямления
- [Восстановление документа](./repair-pdf): исправление структурных проблем в отсканированных PDF
+65
View File
@@ -0,0 +1,65 @@
---
title: Цифровая подпись
description: Добавляйте в PDF криптографические цифровые подписи с помощью сертификатов X.509. Поддерживаются форматы PKCS#12 и PEM и видимые подписи.
---
# Цифровая подпись
Цифровая подпись является криптографическим доказательством того, что документ подписал конкретный человек и что документ не изменялся после подписания. В отличие от нарисованной подписи (которая является просто изображением), цифровая подпись использует сертификаты X.509 и стандарты PKCS#7, обеспечивая проверяемую подлинность и целостность.
BentoPDF применяет цифровые подписи полностью в вашем браузере. Ваш закрытый ключ никогда не покидает устройство.
## Как это работает
1. Загрузите PDF-файл.
2. Загрузите файл сертификата (.pfx, .p12 или .pem).
3. Введите пароль сертификата, чтобы разблокировать его. Инструмент покажет субъекта, издателя и срок действия сертификата.
4. При желании настройте метаданные подписи (причина, место, контактные данные).
5. При желании включите **видимую подпись** с настройкой положения, размера, изображения и текста.
6. Нажмите **Подписание PDF**.
## Поддерживаемые форматы сертификатов
| Формат | Расширения | Описание |
| ----------- | ---------- | -------------------------------------------------------------------------------------------------------------------------- |
| **PKCS#12** | .pfx, .p12 | Отраслевой стандартный контейнер с закрытым ключом и цепочкой сертификатов. Самый распространенный формат. |
| **PEM** | .pem | Текстовый формат. Сертификат и закрытый ключ должны находиться в одном файле. Поддерживаются зашифрованные закрытые ключи. |
## Параметры видимой подписи
Если включено, на странице PDF отображается блок видимой подписи:
- **Положение**: координаты X/Y, а также ширина и высота в пунктах
- **Страница**: первая страница, последняя страница, все страницы или конкретный номер страницы
- **Изображение**: загрузите изображение PNG, JPG или WebP (рукописная подпись, печать компании и т. д.)
- **Текст**: произвольный текст с настраиваемым цветом и размером шрифта. Если не заданы ни изображение, ни текст, инструмент автоматически создает текст из общего имени сертификата и текущей даты.
## Метаданные подписи
- **Причина**: зачем подписан документ (например, «Утверждено», «Проверено»)
- **Место**: где происходило подписание (например, «Нью-Йорк»)
- **Контактная информация**: как связаться с подписавшим (например, адрес электронной почты)
## Примечание об интернет-соединении
Для подписания может потребоваться подключение к интернету. Библиотека подписи загружает цепочку сертификатов по URL-адресам, указанным в расширении Authority Information Access (AIA) вашего сертификата. Если эти серверы недоступны, подписание не удастся для сертификатов, которым требуется проверка цепочки.
## Сценарии использования
- Подписание договоров, коммерческих предложений и соглашений юридически значимыми цифровыми подписями
- Заверение официальных документов в процессах, где требуется аутентификация на основе PKI
- Подписание PDF-счетов для соответствия требованиям регуляторов (во многих странах ЕС требуются электронные счета с цифровой подписью)
- Добавление организационного утверждения к инженерным чертежам и документам по качеству
## Советы
- Самоподписанные сертификаты подходят для тестирования, но в Adobe Reader будут показывать предупреждения. Для рабочих документов используйте сертификат доверенного центра сертификации.
- Видимая подпись является чисто визуальной. Криптографическая подпись встраивается независимо от того, включен ли видимый блок.
- Проверьте подписанный PDF инструментом «Проверка подписи в PDF», чтобы убедиться, что подпись не повреждена.
## Связанные инструменты
- [Проверка подписи в PDF](./validate-signature-pdf): проверка цифровых подписей в подписанных PDF
- [Сведение документа](./flatten-pdf): сведите формы перед подписанием, чтобы предотвратить изменения
- [Защита PDF](./protect-pdf): добавьте защиту паролем поверх цифровой подписи
- [Удаление метаданных](./remove-metadata): удалите метаданные перед подписанием
+42
View File
@@ -0,0 +1,42 @@
---
title: Разделение страниц
description: Делите страницы PDF по горизонтали или вертикали на более мелкие части.
---
# Разделение страниц
Разрезайте отдельные страницы PDF пополам по горизонтали или по вертикали. Это полезно, когда на одной странице находится содержимое, которое нужно разнести на отдельные страницы, например двухколоночная верстка, отсканированная как одна широкая страница.
## Как это работает
1. Загрузите PDF-файл.
2. Выберите направление разделения: **По вертикали** (левая и правая половины) или **По горизонтали** (верхняя и нижняя половины).
3. При желании укажите диапазон страниц, чтобы разделить только их. Оставьте поле пустым, чтобы разделить все страницы.
4. Нажмите кнопку обработки, чтобы создать разделенный PDF.
## Возможности
- Вертикальное разделение: каждая страница делится на левую и правую половины
- Горизонтальное разделение: каждая страница делится на верхнюю и нижнюю половины
- Фильтр по диапазону страниц для выборочного разделения
- Страницы вне диапазона остаются без изменений
- Качество содержимого сохраняется без повторной отрисовки
## Сценарии использования
- Разделение отсканированных разворотов (например, скан книги, где на одном листе левая и правая страницы)
- Разделение альбомного PDF с содержимым рядом на отдельные книжные страницы
- Разделение высоких инфографик и плакатов на верхнюю и нижнюю части
- Подготовка широкоформатных документов к печати на стандартной бумаге
## Советы
- Если содержимое на страницах распределено неравномерно, разделение все равно происходит ровно посередине. Для несимметричного разделения лучше использовать [Обрезка PDF](./crop-pdf).
- Если страницы нужно повернуть до или после разделения, сочетайте этот инструмент с [Поворот PDF](./rotate-pdf).
## Связанные инструменты
- [Разделение PDF](./split-pdf)
- [Обрезка PDF](./crop-pdf)
- [N-Up PDF](./n-up-pdf)
- [Постеризация документа](./posterize-pdf)
+55
View File
@@ -0,0 +1,55 @@
---
title: Сортировка двустороннего сканирования
description: Приводите PDF двустороннего сканирования, где лицевые и оборотные страницы идут отдельными блоками, к правильному порядку лицевых и оборотных страниц.
---
# Сортировка двустороннего сканирования
Этот инструмент предназначен для сценариев сканирования через автоподатчик (ADF), когда один PDF содержит два блока страниц:
- сначала все лицевые стороны
- затем все оборотные стороны
Вместо ручного разделения и пересборки инструмент чередует два блока в естественном порядке чтения: лицевая 1, оборотная 1, лицевая 2, оборотная 2 и так далее.
## Как это работает
1. Загрузите один PDF, созданный сканированием стопки с двух сторон.
2. Укажите точку разделения, где заканчивается блок лицевых сторон.
3. Выберите обработку блока оборотных сторон:
- **Обратить блок оборотов** (обычно нужно, когда стопку переворачивают перед сканированием оборотов)
- **Оставить блок оборотов без изменений**
4. Нажмите **Собрать PDF**, чтобы скачать результат с измененным порядком.
## Параметры
- **Определить разделение автоматически (половина)**: устанавливает точку разделения на `ceil(totalPages / 2)`.
- **Предупреждение о нечетном числе страниц**: предупреждает, если общее число страниц нечетное (часто это признак несоответствия при сканировании).
- **Подтверждение неравных блоков**: запрашивает подтверждение, если размеры блоков лицевых и оборотных сторон различаются.
- **Экспорт группами**: делит результат на отдельные PDF по числу страниц исходного документа и скачивает их в виде ZIP.
## Поведение результата
- **По умолчанию**: один выходной PDF (один входной PDF дает один выходной PDF).
- **Групповой режим**: результат делится на части по заданному числу страниц на документ; если получилось несколько частей, они скачиваются одним ZIP, иначе скачивается один PDF.
Если размеры блоков различаются, сначала сопоставляются парные страницы, а оставшиеся непарные страницы добавляются в конец.
## Типичные сценарии использования
- Восстановление порядка после сканирования стопки двусторонних форм за два прохода.
- Пересборка комплектов лицевых и оборотных страниц с офисных сканеров, которые выдают сначала все лицевые, затем все оборотные стороны.
- Постобработка архивных сканов перед разделением на файлы по документам.
## Советы
- В большинстве двусторонних пакетов общее число страниц должно быть четным.
- Если оборотные стороны оказались перевернутыми, переключитесь между **Обратить блок оборотов** и **Оставить блок оборотов без изменений**.
- Для оригиналов из 2 страниц (лицевая и оборотная) используйте групповой экспорт с `2` страницами на документ.
## Связанные инструменты
- [Объединение документов с чередованием страниц](./alternate-merge)
- [Разделение PDF](./split-pdf)
- [Объединение PDF](./merge-pdf)
- [Дублирование и организация](./organize-pdf)
+43
View File
@@ -0,0 +1,43 @@
---
title: Редактирование вложений
description: Просматривайте и выборочно удаляйте файлы, вложенные в PDF-документ.
---
# Редактирование вложений
Просматривайте вложенные файлы PDF и управляйте ими. Инструмент перечисляет каждый встроенный файл с его именем и уровнем вложения, а затем позволяет отметить отдельные вложения для удаления или удалить их все сразу.
## Как это работает
1. Загрузите PDF-файл.
2. Инструмент автоматически ищет вложения и показывает их в списке.
3. Для каждого вложения показаны имя файла и уровень: документа или страницы.
4. Щелкните значок корзины рядом с вложением, чтобы отметить его для удаления (повторный щелчок снимает отметку).
5. Кнопка **Удалить все вложения** выбирает все сразу, а **Снять выделение** снимает выбор.
6. Нажмите кнопку обработки, чтобы сохранить новый PDF без выбранных вложений.
## Возможности
- Список всех вложений уровня документа и уровня страницы
- Удаление отдельных вложений или всех сразу
- Выбор можно включать и отключать до применения изменений
- Отмеченные для удаления элементы зачеркиваются и становятся полупрозрачными
- Скачивание измененного PDF без выбранных вложений
## Сценарии использования
- Удаление устаревших или неверных файлов, встроенных в документ, перед повторным распространением
- Удаление конфиденциальных вложений (финансовые данные, личная информация) из PDF перед отправкой
- Уменьшение размера PDF за счет удаления больших встроенных файлов, которые больше не нужны
- Аудит встроенного содержимого и очистка документа перед архивацией
## Советы
- Вложения, отмеченные для удаления, показываются зачеркнутыми. Если вы передумали, можно снять отметку до обработки.
- Если вложения не найдены, инструмент показывает сообщение «В этом PDF вложений не найдено»: в PDF просто нет встроенных файлов.
## Связанные инструменты
- [Добавление вложений](./add-attachments)
- [Извлечение вложений](./extract-attachments)
- [Просмотр метаданных](./view-metadata)
+58
View File
@@ -0,0 +1,58 @@
---
title: Редактирование метаданных
description: Просматривайте и изменяйте поля метаданных PDF, включая заголовок, автора, ключевые слова, даты и пользовательские свойства.
---
# Редактирование метаданных
Редактируйте метаданные, встроенные в PDF-файл. Инструмент заполняет форму существующими метаданными документа, позволяет изменить любое поле и сохраняет изменения в новый PDF.
## Как это работает
1. Загрузите PDF-файл. Инструмент считает текущие метаданные и заполнит ими форму.
2. Измените любое из стандартных полей: Название, Автор, Тема, Ключевые слова, Создатель, Производитель.
3. Настройте поля «Дата создания» и «Дата изменения» с помощью выбора даты и времени.
4. Добавьте пользовательские поля метаданных, нажав кнопку добавления и введя пару «ключ-значение».
5. Нажмите кнопку обработки, чтобы сохранить измененный PDF.
## Возможности
- Автоматическое заполнение всех существующих метаданных из загруженного PDF
- Стандартные поля: Название, Автор, Тема, Ключевые слова, Создатель, Производитель
- Выбор даты и времени для полей «Дата создания» и «Дата изменения»
- Пользовательские поля «ключ-значение» для произвольных свойств
- Изменения сохраняются прямо в словарь информации о документе PDF
## Редактируемые поля
| Поле | Описание |
| ------------------------- | ------------------------------------------------------------- |
| **Название** | Заголовок документа, который показывают программы для PDF |
| **Автор** | Человек или организация, создавшие документ |
| **Тема** | Краткое описание темы документа |
| **Ключевые слова** | Термины через запятую для поиска и классификации |
| **Создатель** | Приложение, в котором было создано исходное содержимое |
| **Производитель** | Приложение, создавшее PDF |
| **Дата создания** | Когда документ был создан изначально |
| **Дата изменения** | Когда документ последний раз изменялся |
| **Пользовательские поля** | Любые дополнительные пары «ключ-значение», которые вы задаете |
## Сценарии использования
- Задание правильного заголовка и автора перед публикацией документа
- Добавление ключевых слов для лучшего поиска в системах управления документами
- Обновление даты изменения под текущую редакцию
- Добавление пользовательских полей метаданных, например Department, Project ID или Classification
- Очистка метаданных, оставленных исходной программой
## Советы
- Пользовательские поля записываются прямо в словарь информации PDF. Некоторые программы для PDF могут не показывать пользовательские поля, но в файле они сохраняются.
- Оставьте поле пустым, чтобы убрать его из метаданных. Кнопка обработки сохраняет все, что находится в форме.
- Чтобы просмотреть метаданные без редактирования, используйте [Просмотр метаданных](./view-metadata). Чтобы полностью удалить все метаданные, используйте «Удаление метаданных».
## Связанные инструменты
- [Просмотр метаданных](./view-metadata)
- [PDF OCG](./pdf-layers)
- [Сжатие PDF](./compress-pdf)
+48
View File
@@ -0,0 +1,48 @@
---
title: Редактор PDF
description: Аннотируйте, выделяйте, редактируйте (закрашивайте) содержимое, добавляйте фигуры и изображения, ищите и просматривайте PDF прямо в браузере.
---
# Редактор PDF
Редактор PDF в BentoPDF позволяет аннотировать, выделять, закрашивать конфиденциальные данные, комментировать, добавлять фигуры и изображения и искать по PDF. Полнофункциональный редактор загружается прямо в браузере, без отправки файлов на сервер.
## Как это работает
1. Загрузите PDF, щелкнув по области загрузки или перетащив файл на нее.
2. Встроенный редактор PDF автоматически откроется с вашим документом.
3. С помощью панели инструментов аннотируйте, выделяйте, закрашивайте, добавляйте текст, рисуйте фигуры или вставляйте изображения.
4. Нажмите **Скачать изменённый PDF**, чтобы сохранить изменения.
## Возможности
- Полная панель аннотаций: выделение, подчеркивание, зачеркивание и рисование от руки
- Вставка текста и комментирование
- Инструменты редактирования (redaction), которые безвозвратно удаляют отмеченное содержимое после применения. Если при нажатии **Скачать изменённый PDF** остались непримененные отметки, редактор предложит сначала применить их.
- Фигуры: прямоугольники, окружности, линии и стрелки
- Вставка изображений на страницы PDF
- Встроенный текстовый поиск по документу
- Поддержка нескольких документов во вкладках (до 10 документов одновременно)
- Загрузка файлов перетаскиванием
## Сценарии использования
- Проверка договоров и пометка изменений выделениями и комментариями
- Закрашивание конфиденциальной информации, например номеров социального страхования или финансовых данных, перед отправкой
- Добавление аннотаций на архитектурные планы и инженерные чертежи
- Вставка логотипов компании или штампов на страницы документа
- Поиск определенных терминов в объемных юридических документах
## Советы
- Можно открыть несколько PDF одновременно и переключаться между ними с помощью панели вкладок вверху редактора.
- Редактор сохраняет исходную структуру PDF, поэтому шрифты, макеты и поля форм остаются нетронутыми.
- Пометка текста или области для закрашивания ничего не удаляет, пока закрашивание не применено. Когда вы закрашиваете выделенный текст, его копии в свойствах файла, закладках, комментариях и вложениях также удаляются из скачиваемого файла, если файл не зашифрован.
- Для массового нанесения водяных знаков или нумерации страниц используйте специальные инструменты: у них больше возможностей форматирования.
## Связанные инструменты
- [Добавление водяных знаков](./add-watermark)
- [Подписание PDF](./sign-pdf)
- [Добавление штампов](./add-stamps)
- [Удаление аннотаций](./remove-annotations)
+50
View File
@@ -0,0 +1,50 @@
---
title: Email в PDF
description: Преобразуйте файлы электронной почты EML и MSG в PDF прямо в браузере. Сохраняются заголовки, текст письма и список вложений.
---
# Email в PDF
Превращайте сохраненные файлы электронной почты в аккуратные PDF для печати. Инструмент разбирает файлы EML и MSG, извлекает все письмо (заголовки, текст и сведения о вложениях) и отображает все это в структурированном PDF. Подходит для юридического раскрытия документов, ведения записей или просто печати важного письма.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :----- | :--------- | :------------------------------------------------------------------------------ |
| EML | `.eml` | Стандартный формат писем MIME (экспортируется из большинства почтовых клиентов) |
| MSG | `.msg` | Проприетарный формат Microsoft Outlook |
## Как это работает
1. Щелкните по области загрузки или перетащите в нее файлы EML или MSG. В одной партии можно смешивать оба формата.
2. Проверьте список файлов. Удаляйте ненужные записи значком корзины или нажмите **Добавить еще файлы**, чтобы добавить еще письма.
3. Настройте параметры преобразования (см. ниже).
4. Нажмите **Преобразовать в PDF**. Инструмент разбирает каждое письмо, отображает содержимое как стилизованный HTML и преобразует его в PDF через движок PyMuPDF.
5. Одно письмо скачивается сразу как PDF. Несколько писем упаковываются в `emails-converted.zip`.
## Параметры
| Параметр | По умолчанию | Описание |
| :---------------------------------------------------------- | :----------- | :---------------------------------------------------------------------------------------- |
| **Размер страницы** | A4 | Выберите размер страницы: A4, Letter или Legal. |
| **Указывать получателей копии и скрытой копии в заголовке** | Вкл. | Если включено, списки получателей CC и BCC отображаются в разделе заголовка письма в PDF. |
| **Добавить список вложений письма** | Вкл. | Если включено, в PDF появляется список вложенных файлов письма (с именами и размерами). |
## Сценарии использования
- Архивирование важной деловой переписки в PDF для соблюдения требований или аудита
- Печать цепочек писем для судебных разбирательств или запросов на раскрытие документов
- Создание постоянной записи подтверждений заказов, чеков и договоров, полученных по электронной почте
- Резервное копирование файлов Outlook MSG в формате, для чтения которого не нужен Outlook
- Документирование обращений в службу поддержки по экспортированным файлам EML
## Советы
- Поддерживаются и EML (используется в Thunderbird, Apple Mail и большинстве почтовых клиентов), и файлы Outlook MSG. Экспортируйте письма из почтового клиента и перетащите их прямо в инструмент.
- Письма в формате HTML сохраняют оформление в PDF. Письма в виде обычного текста отображаются с аккуратным читаемым форматированием.
- Список вложений показывает имена файлов и размеры, но не встраивает сами вложенные файлы в PDF.
## Связанные инструменты
- [XML в PDF](./xml-to-pdf)
- [XPS в PDF](./xps-to-pdf)
+44
View File
@@ -0,0 +1,44 @@
---
title: EPUB в PDF
description: Преобразуйте электронные книги EPUB в PDF прямо в браузере. Бесплатно, без загрузки на сервер, с упором на конфиденциальность.
---
# EPUB в PDF
Преобразуйте электронные книги EPUB в PDF-файлы, не выходя из браузера. EPUB является открытым стандартом цифровых книг, но иногда нужен PDF с фиксированной версткой: для печати, аннотирования или передачи тем, у кого нет программы для чтения электронных книг.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :----- | :--------- | :-------------------- |
| EPUB | `.epub` | Файлы EPUB 2 и EPUB 3 |
## Как это работает
1. Щелкните по области загрузки или перетащите в нее файлы EPUB. Можно выбрать сразу несколько файлов.
2. Проверьте загруженные файлы. Удаляйте ненужные записи значком корзины или нажмите **Добавить еще файлы**, чтобы расширить партию.
3. Нажмите **Преобразовать в PDF**. Движок PyMuPDF преобразует содержимое EPUB (текст, изображения и форматирование) в постраничный PDF.
4. Один EPUB скачивается сразу как PDF. Несколько файлов упаковываются в ZIP-архив `epub-converted.zip`.
## Параметры
Преобразование выполняется с разумными настройками по умолчанию, дополнительная конфигурация не нужна. Текст перетекает в страницы стандартного размера, а встроенные шрифты и изображения переносятся в PDF.
## Сценарии использования
- Печать электронной книги без DRM для чтения вдали от экранов
- Отправка рукописи в формате EPUB на рецензию в виде PDF с фиксированной версткой
- Архивирование цифровых книг в формате, который нативно открывает любая операционная система
- Передача главы коллеге, у которого нет программы для чтения EPUB
- Преобразование технической документации в формате EPUB в PDF с возможностью аннотирования
## Советы
- Возможности EPUB 3, такие как встроенное аудио и видео, в PDF не переносятся, но весь текст, изображения и таблицы преобразуются корректно.
- Для сильно стилизованных EPUB проверьте первые страницы результата, чтобы убедиться в точности верстки.
## Связанные инструменты
- [MOBI в PDF](./mobi-to-pdf)
- [FB2 в PDF](./fb2-to-pdf)
- [CBZ в PDF](./cbz-to-pdf)
+55
View File
@@ -0,0 +1,55 @@
---
title: Excel в PDF
description: Преобразуйте электронные таблицы Excel (XLS, XLSX), а также файлы ODS и CSV в PDF с сохранением форматирования.
---
# Excel в PDF
Преобразуйте файлы электронных таблиц в PDF. Инструмент работает с современными файлами Excel, устаревшим форматом XLS, таблицами OpenDocument и даже CSV. Все они обрабатываются браузерным движком LibreOffice, который сохраняет форматирование ячеек, формулы (как вычисленные значения), диаграммы и макеты с несколькими листами.
## Поддерживаемые форматы
| Формат | Расширения |
| :------------------- | :--------- |
| Excel (современный) | `.xlsx` |
| Excel (устаревший) | `.xls` |
| Таблица OpenDocument | `.ods` |
| CSV | `.csv` |
## Как это работает
1. Щелкните по области загрузки или перетащите в нее файлы электронных таблиц.
2. Проверьте список файлов. Добавьте еще файлы или удалите ненужные.
3. Нажмите **Преобразовать в PDF**. Движок LibreOffice инициализируется при первом использовании, затем обрабатывает каждый файл.
4. Один файл скачивается сразу как PDF. Несколько файлов передаются в виде `excel-converted.zip`.
## Параметры
У этого инструмента нет дополнительных настроек. Движок LibreOffice определяет макет страницы, масштаб и область печати по встроенным настройкам таблицы.
## Результат
| Количество файлов | Результат |
| :---------------- | :------------------------------------------------------------------ |
| 1 файл | Скачивание одного PDF (исходное имя файла с расширением `.pdf`) |
| 2 и более файлов | ZIP-архив (`excel-converted.zip`) с отдельным PDF для каждого файла |
## Сценарии использования
- Преобразование финансовых отчетов и бюджетов из Excel в PDF для рассылки
- Создание готовых к печати PDF из таблиц складских остатков и каталогов товаров
- Передача результатов анализа данных заинтересованным лицам, у которых не установлен Excel
- Архивирование квартальных отчетов в формате, не допускающем редактирования
- Преобразование файлов ODS из LibreOffice Calc в PDF
## Советы
- Диаграммы, встроенные в таблицу, отображаются в PDF. Перед преобразованием убедитесь, что в исходном файле они выглядят правильно.
- Если в таблице несколько листов, в итоговый PDF попадают все листы.
- Для простых данных CSV без форматирования инструмент [CSV в PDF](./csv-to-pdf) выполняет более легкое преобразование. Используйте Excel в PDF, когда нужно сохранить форматирование, диаграммы или несколько листов.
## Связанные инструменты
- [CSV в PDF](./csv-to-pdf)
- [Word в PDF](./word-to-pdf)
- [PowerPoint в PDF](./powerpoint-to-pdf)
+42
View File
@@ -0,0 +1,42 @@
---
title: Извлечение вложений
description: Извлекайте все встроенные файлы из одного или нескольких PDF и скачивайте их в виде ZIP-архива.
---
# Извлечение вложений
Извлеките все встроенные вложения из одного или нескольких PDF-файлов. Все извлеченные файлы собираются в один ZIP-архив для скачивания.
## Как это работает
1. Загрузите один или несколько PDF-файлов со встроенными вложениями.
2. Нажмите **Извлечение вложений**.
3. Инструмент просматривает каждый PDF в поисках вложений уровня документа и уровня страницы.
4. Все найденные файлы упаковываются в ZIP-архив, который скачивается автоматически.
5. Сообщение о статусе подтверждает, сколько вложений найдено и каков их общий размер.
## Возможности
- Пакетное извлечение из нескольких PDF одновременно
- Извлекаются вложения как уровня документа, так и уровня страницы
- Результат: один ZIP-файл со всеми извлеченными файлами
- Показывает общее число вложений и суммарный размер файлов
- Понятные сообщения о статусе, если вложения не найдены
## Сценарии использования
- Восстановление файлов данных, встроенных в PDF-отчет
- Извлечение графических материалов из портфолио или технической спецификации
- Извлечение дополнительных материалов из обучающих PDF и документов по соответствию требованиям
- Аудит файлов, встроенных в набор PDF
## Советы
- Если инструмент сообщает об отсутствии вложений, в PDF могут быть встроенные изображения или данные форм, а они не являются вложенными файлами. Для встроенных изображений используйте [Извлечение изображений](./extract-images).
- При обработке нескольких PDF все вложения из всех файлов попадают в один ZIP. Имена файлов сохраняются такими, какими они были при встраивании.
## Связанные инструменты
- [Добавление вложений](./add-attachments)
- [Редактирование вложений](./edit-attachments)
- [Извлечение изображений](./extract-images)
+45
View File
@@ -0,0 +1,45 @@
---
title: Извлечение изображений
description: Извлекайте все встроенные изображения из PDF-файлов. Просматривайте их в сетке и скачивайте по отдельности или ZIP-архивом.
---
# Извлечение изображений
Извлекает все встроенные изображения из одного или нескольких PDF-файлов. Извлеченные изображения показываются в сетке предпросмотра, где их можно скачать по одному или сразу все ZIP-архивом. Работает на PyMuPDF.
## Как это работает
1. Загрузите один или несколько PDF, щелкнув по области загрузки или перетащив на нее файлы. Добавляйте файлы или удаляйте отдельные при необходимости.
2. Нажмите **Извлечение изображений**, чтобы начать обработку.
3. Инструмент просматривает каждую страницу каждого загруженного PDF, находя и извлекая встроенные изображения.
4. Извлеченные изображения появляются в сетке с миниатюрами. У каждого изображения есть кнопка скачивания.
5. Нажмите **Скачать всё**, чтобы сохранить все в виде ZIP-архива.
## Параметры
У этого инструмента нет настраиваемых параметров. Все встроенные изображения извлекаются в исходном формате (обычно PNG, JPEG или тот формат, в котором изображение было встроено в PDF).
## Формат результата
- В сетке предпросмотра изображения называются `image_1.png`, `image_2.jpg` и так далее.
- **Скачать всё** создает `extracted-images.zip` со всеми изображениями.
- Отдельные изображения можно скачивать по одному из сетки.
## Сценарии использования
- Восстановление фотографий и графики из PDF для повторного использования в другом проекте.
- Извлечение изображений товаров из PDF-каталога для карточки в интернет-магазине.
- Извлечение схем из технической документации для презентаций.
- Аудит изображений, встроенных в документ, перед его отправкой.
## Советы
- Инструмент извлекает изображения ровно в том виде, в котором они хранятся в PDF. Он не преобразует страницы в изображения: для этого используйте [PDF в PNG](./pdf-to-png) или [PDF в JPG](./pdf-to-jpg).
- Если инструмент сообщает «Изображения не найдены», в PDF может быть векторная графика вместо встроенных растровых изображений, либо это отсканированный документ, где вся страница является одним большим изображением.
- Пакетная обработка работает с несколькими PDF. Все изображения из всех файлов объединяются в одну сетку и один ZIP.
## Связанные инструменты
- [PDF в PNG](./pdf-to-png)
- [PDF в JPG](./pdf-to-jpg)
- [Конструктор PDF-процессов](./pdf-workflow)
+41
View File
@@ -0,0 +1,41 @@
---
title: Извлечение страниц
description: Сохраняйте выбранный диапазон страниц PDF в виде нового документа.
---
# Извлечение страниц
Извлеките набор страниц из PDF и сохраните их как новый файл. Укажите нужные страницы с помощью синтаксиса диапазонов, и инструмент создаст чистый PDF, содержащий только эти страницы.
## Как это работает
1. Загрузите PDF-файл. Инструмент покажет имя файла, размер и общее число страниц.
2. Введите страницы для извлечения с помощью синтаксиса диапазонов (например, `1-5`, `3, 7, 10-12`).
3. При желании выберите скачивание каждого диапазона как отдельного PDF в ZIP-архиве.
4. Нажмите кнопку обработки. Извлеченные страницы скачиваются как новый PDF (или ZIP).
## Возможности
- Гибкий синтаксис диапазонов: отдельные страницы, диапазоны или комбинации через запятую
- После загрузки показывается общее число страниц для удобства
- Результат можно получить одним объединенным PDF или отдельными файлами в ZIP
- Содержимое и форматирование исходных страниц сохраняются
## Сценарии использования
- Извлечение краткого резюме (первых нескольких страниц) из объемного отчета
- Извлечение одной главы из PDF-учебника
- Сохранение отдельных страниц из пакета форм как самостоятельных документов
- Создание образца документа из выбранных страниц большого файла
## Советы
- Нумерация страниц начинается с 1. Для первой страницы используйте `1`, а не `0`.
- Чтобы удалить страницы, а не извлечь их, используйте [Удаление страниц](./delete-pages): это обратная операция.
- Если нужен визуальный выбор страниц по миниатюрам, используйте [Разделение PDF](./split-pdf) в режиме «Выбрать страницы визуально».
## Связанные инструменты
- [Разделение PDF](./split-pdf)
- [Удаление страниц](./delete-pages)
- [Объединение PDF](./merge-pdf)
+46
View File
@@ -0,0 +1,46 @@
---
title: Извлечение таблиц из PDF
description: Находите и извлекайте таблицы из PDF-документов. Экспорт в CSV, JSON или Markdown с разбивкой по таблицам.
---
# Извлечение таблиц из PDF
Находит все таблицы в PDF и позволяет экспортировать их в выбранном формате: CSV, JSON или Markdown. Каждая таблица извлекается отдельно с метаданными о странице и положении. Работает на движке обнаружения таблиц PyMuPDF.
## Как это работает
1. Загрузите PDF, щелкнув по области загрузки или перетащив на нее файл.
2. Выберите нужный **формат экспорта**: CSV, JSON или Markdown.
3. Нажмите **Извлечь таблицы**, чтобы начать обработку.
4. Если найдена одна таблица, она скачивается одним файлом. Если таблиц несколько, создается ZIP-архив с отдельным файлом для каждой таблицы.
## Параметры
- **Формат экспорта**: выберите один из вариантов:
- **CSV**: значения через запятую с корректным заключением в кавычки полей, содержащих запятые, кавычки или переводы строк. Подходит для электронных таблиц и баз данных.
- **JSON**: структура «массив массивов» с форматированием и отступом в 2 пробела. Подходит для программной обработки.
- **Markdown**: формат таблицы с разделителями-вертикальными чертами, создаваемый PyMuPDF. Подходит для документации и файлов README.
## Формат результата
- **Одна таблица**: `filename_table.csv` (или `.json` / `.md`)
- **Несколько таблиц**: `filename_tables.zip` с файлами `table_1_page3.csv`, `table_2_page5.csv` и так далее.
## Сценарии использования
- Извлечение отдельных таблиц из объемных PDF-отчетов без выгрузки данных всего документа.
- Получение таблиц в формате Markdown для вставки прямо в задачи GitHub, вики и документацию.
- Получение структурированных данных JSON из таблиц PDF для интеграций с API и скриптов.
- Сравнение таблиц из разных версий PDF: экспортируйте обе версии в CSV и сравните их.
## Советы
- Этот инструмент дает контроль над каждой таблицей. Если нужно выгрузить все таблицы в один CSV, используйте [PDF в CSV](./pdf-to-csv). Для полной книги Excel используйте [PDF в Excel](./pdf-to-excel).
- Таблицы, занимающие несколько страниц, могут быть определены как отдельные таблицы на каждой странице. Возможно, их придется объединить вручную.
- Если таблицы не обнаружены, возможно, PDF является отсканированным изображением. Сначала выполните распознавание текста, чтобы добавить текстовый слой.
## Связанные инструменты
- [PDF в CSV](./pdf-to-csv)
- [PDF в Excel](./pdf-to-excel)
- [PDF в текст](./pdf-to-text)
+43
View File
@@ -0,0 +1,43 @@
---
title: FB2 в PDF
description: Преобразуйте электронные книги FictionBook (FB2) в PDF прямо в браузере. Бесплатно, приватно, без загрузки на сервер.
---
# FB2 в PDF
Преобразуйте файлы FictionBook 2 (FB2) в документы PDF. FB2 - это формат электронных книг на основе XML, популярный в России и Восточной Европе. На одних платформах он поддерживается хорошо, а на других почти неизвестен, поэтому конвертация в PDF сделает ваши книги доступными везде.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :------------ | :--------- | :----------------------------- |
| FictionBook 2 | `.fb2` | Формат электронных книг на XML |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы FB2. Можно выбрать сразу несколько файлов.
2. Просмотрите список файлов. Значок корзины удаляет отдельные записи, а **Добавить ещё файлы** позволяет добавить другие.
3. Нажмите **Преобразовать в PDF**. Движок PyMuPDF разбирает XML-структуру FB2 и выводит её как постраничное содержимое PDF.
4. Один файл скачивается сразу как PDF. Несколько результатов упаковываются в `fb2-converted.zip`.
## Параметры
Настройка не требуется. Конвертер сам обрабатывает XML-структуру FB2 и сохраняет разделы, форматирование и встроенные изображения.
## Сценарии использования
- Чтение книг FB2 на устройствах и в приложениях, которые поддерживают только PDF
- Печать русскоязычной литературы, распространяемой в формате FB2
- Архивирование библиотеки FB2 в универсальном формате
- Передача книги тому, чья программа для чтения не поддерживает FictionBook
## Советы
- Файлы FB2 представляют собой обычный XML, поэтому они обычно небольшие и быстро конвертируются даже в браузере.
- Если ваши файлы FB2 сжаты как `.fb2.zip`, сначала распакуйте их, а затем загружайте.
## Связанные инструменты
- [EPUB в PDF](./epub-to-pdf)
- [MOBI в PDF](./mobi-to-pdf)
- [XML в PDF](./xml-to-pdf)
+44
View File
@@ -0,0 +1,44 @@
---
title: Редактор размера страниц
description: Приведите все страницы PDF к единому размеру. Выберите стандартный формат бумаги или задайте свои размеры.
---
# Редактор размера страниц
PDF, собранные из нескольких источников, часто содержат страницы разных размеров: одни Letter, другие A4, а третьи совсем нестандартные. Этот инструмент приводит каждую страницу к одному целевому размеру, масштабируя содержимое по размеру или с заполнением.
## Как это работает
1. Загрузите файл PDF.
2. Выберите **Целевой размер страницы** в выпадающем списке (A4, Letter, Legal, A3, A5, Tabloid или Свой).
3. Выберите **Ориентацию**: «Авто» сохраняет исходную ориентацию каждой страницы, а также можно принудительно задать книжную или альбомную.
4. Выберите режим **Масштабирования содержимого**: «Вписать» (сохраняет всё содержимое, могут появиться поля) или «Заполнить» (заполняет страницу, края могут быть обрезаны).
5. При желании задайте **Цвет фона** для добавленных полей.
6. Нажмите **Исправить размер страниц**.
## Параметры
- **Стандартные размеры**: A4, Letter, Legal, A3, A5, Tabloid
- **Свои размеры**: введите ширину и высоту в дюймах или миллиметрах
- **Ориентация**: авто, книжная, альбомная
- **Режим масштабирования**: вписать или заполнить (с обрезкой)
- **Цвет фона**: любой цвет для заполнения полей
## Сценарии использования
- Выравнивание объединённого PDF, страницы которого получены с разных сканеров
- Преобразование документа US Letter в A4 для международной рассылки
- Подготовка PDF к печати, где нужен единый размер обреза
- Исправление страниц, которые слегка отличаются от стандарта (например, 8,49 x 11,02 дюйма вместо 8,5 x 11)
## Советы
- Режим «Вписать» гарантирует, что содержимое не потеряется. Режим «Заполнить» выглядит аккуратнее, но может обрезать края.
- Проверьте результат инструментом «Размеры страниц», чтобы убедиться, что все страницы соответствуют целевому размеру.
- По умолчанию фон белый. Если у документа тёмные поля, выберите тёмный цвет.
## Связанные инструменты
- [Размеры страниц](./page-dimensions): проверьте размеры страниц до и после исправления
- [Сжатие PDF](./compress-pdf): уменьшите размер файла после приведения к единому размеру
- [Обрезка PDF](./crop-pdf): обрезайте страницы вручную вместо автоматического масштабирования
+51
View File
@@ -0,0 +1,51 @@
---
title: Сведение документа
description: Преобразуйте интерактивные формы и аннотации в статичное содержимое. Поля форм перестают быть редактируемыми, а аннотации встраиваются в страницу.
---
# Сведение документа
Сведение встраивает интерактивные элементы (поля форм, выпадающие списки, флажки, аннотации, выделения, стикеры) прямо в содержимое страницы. Внешний вид остаётся прежним, но редактировать и извлекать эти элементы уже нельзя. Это аналог распечатки заполненной формы и повторного сканирования, только качество остаётся идеальным.
## Как это работает
1. Загрузите один или несколько файлов PDF.
2. Нажмите **Свести PDF**.
3. Один файл скачивается напрямую. Несколько файлов упаковываются в ZIP-архив.
Инструмент использует pdf-lib для сведения полей форм (через `form.flatten()`) и отдельный механизм сведения аннотаций, который встраивает их в поток страницы. Обе операции выполняются за один проход.
## Что сводится
- **Поля форм**: текстовые поля, флажки, переключатели, выпадающие списки, поля подписи
- **Аннотации**: комментарии, выделение, зачёркивание, подчёркивание, стикеры, штампы, рукописные аннотации
- **Интерактивные элементы**: кнопки, триггеры действий
## Что остаётся без изменений
- Текст (его по-прежнему можно выделять и искать)
- Изображения и графика
- Макет и размеры страниц
- Закладки и оглавление
- Гиперссылки (если они не реализованы как аннотации)
## Сценарии использования
- Блокировка заполненной формы, чтобы получатели не могли изменить отправленные ответы
- Подготовка PDF к архивированию, когда интерактивные элементы не нужны
- Исправление проблем отображения, когда аннотации по-разному выглядят в разных программах просмотра
- Защита подписанного документа от изменений после наложения подписи
- Уменьшение размера файла за счёт удаления описаний полей форм и объектов аннотаций
## Советы
- Сводите документ после завершения всех правок. Отменить сведение PDF невозможно.
- Если нужно не только свести документ, но и удалить метаданные, JavaScript и вложения, используйте инструмент «Санирование документа»: сведение есть среди его параметров.
- Некоторые PDF сообщают «форма не найдена». Это нормально, если в документе есть только аннотации и нет полей форм.
## Связанные инструменты
- [Санирование документа](./sanitize-pdf): сведение форм, а также удаление метаданных, скриптов и многого другого
- [Растеризация документа](./rasterize-pdf): преобразование в PDF на основе изображений для максимального сведения
- [Шрифты в кривые](./font-to-outline): преобразование шрифтов в векторные контуры
- [Защита PDF](./protect-pdf): защитите сведённый PDF паролем
+52
View File
@@ -0,0 +1,52 @@
---
title: Шрифты в кривые
description: Преобразуйте все шрифты PDF в векторные контуры для одинакового отображения на любых устройствах. Устраняет зависимость от шрифтов.
---
# Шрифты в кривые
При преобразовании шрифтов в кривые каждый символ текста из глифа шрифта превращается в векторный контур. PDF перестаёт зависеть от установленных шрифтов и выглядит одинаково на любом устройстве, в любой операционной системе и на любом принтере. Это стандартный шаг в допечатной подготовке.
## Как это работает
1. Загрузите один или несколько файлов PDF.
2. Нажмите **Преобразовать в кривые**.
3. Ghostscript преобразует весь текст в векторные контуры.
4. Скачайте результат. Несколько файлов упаковываются в ZIP-архив.
Настраивать ничего не нужно. Инструмент использует Ghostscript (WebAssembly), чтобы за один проход превратить все ссылки на шрифты в контуры.
## Что меняется
- Символы текста становятся векторными кривыми (кривыми Безье)
- Встраивать шрифты больше не нужно: PDF самодостаточен на уровне глифов
- Размер файла может вырасти, так как векторные контуры обычно занимают больше места, чем ссылки на шрифты
- Внешний вид сохраняется точно
## Что вы теряете
- Выделение и копирование текста
- Поиск по тексту (Ctrl+F перестаёт работать)
- Возможность редактировать текст
- Доступность для программ чтения с экрана
## Сценарии использования
- Отправка PDF в типографию, которая требует шрифты в кривых
- Передача документов с нестандартными или лицензионными шрифтами людям, у которых этих шрифтов нет
- Защита от подмены шрифтов, из-за которой документ выглядит иначе на других системах
- Подготовка PDF для лазерной гравировки или резки на станках с ЧПУ, где нужен векторный ввод
- Корректное отображение PDF с большим количеством логотипов на всех платформах
## Советы
- Сохраните исходный PDF. Преобразование в кривые необратимо: контуры нельзя превратить обратно в редактируемый текст.
- Если текст должен остаться доступным для поиска, лучше воспользуйтесь инструментом «Растеризация документа», а затем распознаванием текста.
- PDF с кривыми обычно больше по размеру. Если размер важен, потом запустите «Сжатие PDF».
## Связанные инструменты
- [Сведение документа](./flatten-pdf): сведение форм и аннотаций без изменения шрифтов
- [Растеризация документа](./rasterize-pdf): преобразование в PDF на основе изображений вместо векторных контуров
- [Сжатие PDF](./compress-pdf): уменьшение размера файла после преобразования в кривые
- [PDF в PDF/A](./pdf-to-pdfa): преобразование для архивирования после устранения зависимости от шрифтов
+76
View File
@@ -0,0 +1,76 @@
---
title: Создание PDF-форм
description: Создавайте заполняемые PDF-формы с текстовыми полями, флажками, выпадающими списками, переключателями и другими элементами перетаскиванием.
---
# Создание PDF-форм
Создавайте профессиональные заполняемые PDF-формы с нуля или добавляйте поля в существующий PDF. Визуальный редактор позволяет перетаскивать элементы формы (текстовые поля, флажки, выпадающие списки, переключатели, поля подписи и другие) прямо на предварительный просмотр страницы. Настраивайте свойства полей, задавайте правила условной видимости и экспортируйте полностью интерактивную PDF-форму.
## Как это работает
1. Загрузите существующий PDF **или** нажмите **Создать пустой PDF**, чтобы начать с нуля.
2. При создании пустого PDF выберите размер страницы (Letter, A4, A5, Legal, Tabloid, A3 или свои размеры).
3. Откроется редактор форм с панелью типов полей и областью предварительного просмотра страницы.
4. Выберите тип поля на панели, затем щёлкните на странице, чтобы разместить его.
5. Перетаскивайте поля, чтобы изменить их положение. Маркеры изменения размера помогут подогнать размеры.
6. Щёлкните поле, чтобы открыть панель свойств, где можно задать имя поля, значение по умолчанию, размер шрифта, выравнивание и многое другое.
7. Переключайтесь между страницами с помощью элементов управления страницами.
8. Нажмите **Сохранить**, чтобы скачать готовый заполняемый PDF.
## Возможности
- Размещение полей перетаскиванием с визуальными маркерами изменения размера
- Типы полей: текстовое поле, многострочный текст, флажок, выпадающий список, переключатель, подпись, дата, число и штрихкод
- Панель свойств для настройки имени, подписи, значения по умолчанию, размера шрифта, цвета, выравнивания и проверки каждого поля
- Действия полей и правила условной видимости (показ и скрытие полей в зависимости от значений других полей)
- Навигация по страницам для многостраничных форм
- Извлечение существующих полей: поля формы из загруженных PDF определяются и импортируются автоматически
- Поддержка как загруженных PDF, так и пустых страниц в качестве основы формы
- Несколько готовых размеров страниц и возможность задать свои
- Генерация штрихкодов на основе bwip-js
- Управление группами переключателей
## Параметры
**Готовые размеры страниц (для пустых PDF):**
- Letter (8,5" x 11")
- A4 (210 мм x 297 мм)
- A5 (148 мм x 210 мм)
- Legal (8,5" x 14")
- Tabloid (11" x 17")
- A3 (297 мм x 420 мм)
- Свой (укажите ширину и высоту)
**Свойства полей (зависят от типа поля):**
- Имя, подпись и текст подсказки
- Значение по умолчанию
- Шрифт, размер и цвет
- Выравнивание текста (по левому краю, по центру, по правому краю)
- Переключатель обязательного поля
- Переключатель «только чтение»
- Максимальная длина текстовых полей
- Список вариантов для выпадающих списков и переключателей
- Действия условной видимости
## Сценарии использования
- Создание форм для приёма сотрудников с текстовыми полями для личных данных и флажками для подтверждения ознакомления с политикой
- Создание анкет для клиентов с выпадающими списками для выбора услуги
- Разработка бланков заказов с вычисляемыми полями и штрихкодами-идентификаторами
- Создание контрольных листов для осмотра с переключателями для оценки «пройдено/не пройдено»
- Создание опросов с условными уточняющими вопросами, которые появляются в зависимости от ответов
## Советы
- Если вы загрузите существующий PDF, инструмент попытается извлечь уже имеющиеся поля формы, и вы сможете их редактировать или дополнять.
- Используйте группы переключателей, чтобы создавать взаимоисключающие варианты. Поля в одной группе переключателей имеют общее имя группы.
- Проверьте форму: скачайте её и откройте в инструменте [Заполнение PDF-форм](./form-filler), чтобы убедиться, что поля работают правильно.
## Связанные инструменты
- [Заполнение PDF-форм](./form-filler)
- [Подписание PDF](./sign-pdf)
- [Редактор PDF](./edit-pdf)
+47
View File
@@ -0,0 +1,47 @@
---
title: Заполнение PDF-форм
description: Заполняйте PDF-формы, включая формы XFA, прямо в браузере во встроенном просмотрщике.
---
# Заполнение PDF-форм
Откройте PDF с полями формы и заполните его прямо во встроенном просмотрщике. Инструмент поддерживает как обычные поля AcroForm, так и устаревшие формы XFA (XML Forms Architecture). Когда форма заполнена, скачайте готовую версию одним нажатием.
## Как это работает
1. Загрузите PDF с полями формы.
2. Документ откроется во встроенном просмотрщике PDF, где поля формы отображаются как интерактивные элементы ввода.
3. Щёлкайте текстовые поля, флажки, выпадающие списки и переключатели, чтобы заполнить их.
4. Нажмите **Сохранить и скачать заполненную форму**, чтобы получить готовый PDF.
## Возможности
- Встроенный просмотрщик PDF.js с полной поддержкой работы с полями формы
- Поддержка стандартных полей AcroForm (текстовые поля, флажки, выпадающие списки, переключатели)
- Поддержка форм XFA, устаревших форм на основе XML
- Автоматический подбор размера просмотрщика по размерам страницы
- Отображение имени и размера файла
## Параметры
Дополнительных параметров нет. Загрузите форму, заполните её и скачайте.
## Сценарии использования
- Заполнение налоговых деклараций, страховых заявлений или государственных бумаг
- Заполнение анкет для приёма на работу, полученных в виде вложений PDF
- Заполнение форм регистрации поставщиков и анкет для поставщиков
- Подтверждение контрольных списков соответствия с помощью флажков
- Заполнение медицинских анкет перед приёмом
## Советы
- XFA - устаревший формат, который поддерживают только некоторые программы просмотра PDF. Если вы открываете PDF с XFA в Chrome или в большинстве других программ и видите пустые страницы, значит, в них нет поддержки XFA. Заполнение PDF-форм в BentoPDF и Firefox корректно работают с XFA.
- Если в PDF нет полей формы, сначала добавьте их инструментом [Создание PDF-форм](./form-creator), а затем заполните форму здесь.
- Просмотрщик автоматически подстраивает свой размер под размеры страницы PDF.
## Связанные инструменты
- [Создание PDF-форм](./form-creator)
- [Подписание PDF](./sign-pdf)
- [Редактор PDF](./edit-pdf)
+53
View File
@@ -0,0 +1,53 @@
---
title: Колонтитулы
description: Добавляйте настраиваемый текст верхних и нижних колонтитулов на страницы PDF с динамическими переменными номера страницы.
---
# Колонтитулы
Добавляйте текст в шесть позиций на страницах PDF: верхний левый, верхний по центру, верхний правый, нижний левый, нижний по центру и нижний правый. Инструмент поддерживает динамические переменные номера страницы и общего числа страниц, поэтому можно создавать шаблоны вроде «Страница 3 из 10», которые автоматически обновляются на каждой странице.
## Как это работает
1. Загрузите файл PDF.
2. Появится панель параметров с элементами форматирования и шестью полями ввода текста.
3. Введите нужный текст в любую из позиций колонтитулов.
4. Используйте заполнители `{page}` и `{total}` для динамической нумерации страниц.
5. Настройте размер и цвет шрифта и при желании ограничьте диапазон страниц.
6. Нажмите **Добавить колонтитулы**, чтобы обработать файл и скачать результат.
## Параметры
- **Диапазон страниц**: при желании ограничьте, на каких страницах будут колонтитулы. Оставьте поле пустым, чтобы применить ко всем страницам. Формат: «1-3, 5» (диапазоны через запятую).
- **Размер шрифта**: от 6 до 24 пунктов. По умолчанию 10.
- **Цвет шрифта**: выберите любой цвет с помощью палитры.
- **Верхний левый / по центру / правый**: текстовые поля для верхней части каждой страницы.
- **Нижний левый / по центру / правый**: текстовые поля для нижней части каждой страницы.
## Возможности
- Шесть независимых позиций текста на странице
- Динамическая переменная `{page}`, которая вставляет номер текущей страницы
- Динамическая переменная `{total}`, которая вставляет общее число страниц
- Фильтрация по диапазону страниц для выбора нужных страниц
- Настраиваемые размер и цвет шрифта
- Шрифт Helvetica для аккуратного, профессионального результата
## Сценарии использования
- Добавление «Страница {page} из {total}» в нижний колонтитул по центру отчёта
- Размещение названия компании в верхнем левом колонтитуле и даты документа в верхнем правом
- Добавление уведомлений о конфиденциальности в нижний колонтитул юридических документов
- Проставление номеров редакций документа на определённых диапазонах страниц
## Советы
- Объединяйте `{page}` и `{total}` в одном поле для форматов вроде «Страница {page} из {total}» или «{page}/{total}».
- Большинство полей можно оставить пустыми и заполнить только нужные позиции. Пустые поля просто пропускаются.
- Для более сложных колонтитулов с изображениями или логотипами попробуйте инструмент [Добавление водяных знаков](./add-watermark), разместив знак в верхней части страницы.
## Связанные инструменты
- [Нумерация страниц](./page-numbers)
- [Добавление водяных знаков](./add-watermark)
- [Bates-нумерация](./bates-numbering)
+46
View File
@@ -0,0 +1,46 @@
---
title: HEIC в PDF
description: Преобразуйте изображения HEIC и HEIF с iPhone и iPad в PDF прямо в браузере.
---
# HEIC в PDF
Преобразуйте изображения HEIC/HEIF в PDF. HEIC - формат фотографий по умолчанию на iPhone и iPad начиная с iOS 11. Этот инструмент превращает такие фотографии в PDF без установки программ на компьютер и без загрузки файлов на сервер.
## Поддерживаемые форматы
| Формат | Расширения |
| :----- | :--------- |
| HEIC | `.heic` |
| HEIF | `.heif` |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы HEIC/HEIF.
2. Просмотрите список файлов и удалите ненужные.
3. Нажмите **Преобразовать в PDF**. Результат скачивается как `from_heic.pdf`.
Каждый файл HEIC декодируется библиотекой heic2any и преобразуется в PNG с качеством 92%. Затем PNG встраивается в PDF с помощью pdf-lib, и каждое изображение занимает отдельную страницу в полном разрешении.
## Параметры
У этого инструмента нет дополнительных настроек. Изображения HEIC перед встраиванием преобразуются в PNG с высоким качеством (0,92).
## Сценарии использования
- Создание PDF из фотографий с iPhone для страховой заявки или отчёта
- Преобразование фотографий HEIC для объявления о недвижимости в один документ для печати
- Превращение снимков экрана iPad (формат HEIF) в PDF, которым удобно делиться
- Пакетное преобразование фотографий из отпуска для дневника путешествий
## Советы
- Декодирование HEIC целиком выполняется в браузере с помощью WebAssembly. Первое преобразование может занять некоторое время, пока загружается декодер.
- Если нужно объединить HEIC с другими форматами изображений (JPG, PNG и др.), используйте инструмент [Изображения в PDF](./image-to-pdf), который работает с HEIC наравне со всеми остальными форматами.
- Файлы HEIC с iPhone часто содержат данные EXIF, включая координаты GPS. В итоговый PDF эти метаданные не переносятся.
## Связанные инструменты
- [Изображения в PDF](./image-to-pdf)
- [JPG в PDF](./jpg-to-pdf)
- [PNG в PDF](./png-to-pdf)
+65
View File
@@ -0,0 +1,65 @@
---
title: Изображения в PDF
description: Преобразуйте JPG, PNG, BMP, GIF, TIFF, SVG, HEIC, WebP, PSD и более 10 других форматов изображений в один файл PDF.
---
# Изображения в PDF
Универсальный конвертер изображений в PDF. Загружайте изображения практически в любом формате и объединяйте их в один документ PDF. Каждое изображение получает отдельную страницу, размер которой соответствует оригиналу.
## Поддерживаемые форматы
| Формат | Расширения |
| :-------------- | :------------------------------------- |
| JPEG | `.jpg`, `.jpeg` |
| JPEG 2000 | `.jp2`, `.jpx` |
| PNG | `.png` |
| BMP | `.bmp` |
| GIF | `.gif` |
| TIFF | `.tiff`, `.tif` |
| SVG | `.svg` |
| HEIC/HEIF | `.heic`, `.heif` |
| WebP | `.webp` |
| PSD | `.psd` |
| Portable Anymap | `.pnm`, `.pgm`, `.pbm`, `.ppm`, `.pam` |
| JPEG XR | `.jxr` |
Это самая широкая поддержка форматов среди всех конвертеров изображений BentoPDF. Если вам нужен только один формат, используйте соответствующий специализированный инструмент.
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы изображений. Можно выбрать сразу несколько файлов.
2. Просмотрите список файлов. Удалите ненужные значком корзины или нажмите **Добавить ещё файлы**, чтобы добавить другие изображения.
3. Выберите уровень **Качества PDF** в выпадающем списке.
4. Нажмите **Преобразовать в PDF**. Инструмент обрабатывает изображения движком PyMuPDF и скачивает результат как `images_to_pdf.pdf`.
## Параметры
**Качество PDF** определяет сжатие, применяемое к изображениям при встраивании в PDF:
- **Высокое качество**: минимальное сжатие, больший размер файла. Лучше всего для печати и архивирования.
- **Среднее качество** (по умолчанию): сбалансированное сжатие. Подходит для большинства задач.
- **Низкое качество**: сильное сжатие, наименьший размер файла. Подходит для отправки по почте и быстрого обмена.
Файлы HEIC и WebP автоматически преобразуются в PNG перед встраиванием. Это происходит незаметно и не требует дополнительных действий.
## Сценарии использования
- Объединение отсканированных чеков или документов, снятых на камеру телефона, в один PDF
- Создание портфолио или лукбука из изображений в разных форматах
- Преобразование фотографий с iPhone (HEIC) в PDF, которым удобно делиться, без установки программ на компьютер
- Сборка макетов из экспорта PSD и снимков экрана в один документ для клиента
- Архивирование папки с устаревшими форматами изображений (PNM, JXR, JP2) в один PDF
## Советы
- Порядок изображений в PDF совпадает с их порядком в списке файлов. Загружайте их в нужной последовательности.
- Для минимального размера файла выберите низкое качество. Для сканов с большим количеством текста разница на глаз часто незаметна.
- Если у вас только один формат изображений, специализированные конвертеры (JPG в PDF, PNG в PDF и другие) дают тот же результат с более простым интерфейсом.
## Связанные инструменты
- [JPG в PDF](./jpg-to-pdf)
- [PNG в PDF](./png-to-pdf)
- [HEIC в PDF](./heic-to-pdf)
- [WebP в PDF](./webp-to-pdf)
+183
View File
@@ -0,0 +1,183 @@
# Справочник инструментов
BentoPDF предлагает **более 130 инструментов** для работы с PDF. Все инструменты работают целиком в вашем браузере: ваши файлы никогда не покидают устройство.
---
## Редактирование и аннотации
Изменяйте, размечайте и улучшайте документы PDF с помощью полного набора инструментов редактирования.
<div class="tool-grid">
- [**Редактор PDF**](./edit-pdf): аннотации, выделение, редактирование (редакция), комментарии, фигуры и изображения, поиск и просмотр PDF.
- [**Редактирование закладок**](./bookmark): добавление, изменение, импорт, удаление и извлечение закладок PDF.
- [**Оглавление**](./table-of-contents): создание страницы оглавления из закладок PDF.
- [**Нумерация страниц**](./page-numbers): вставка номеров страниц в документ.
- [**Добавить метки страниц**](./add-page-labels): метки страниц PDF с римскими цифрами, префиксами и произвольным началом.
- [**Bates-нумерация**](./bates-numbering): последовательные номера Bates в одном или нескольких файлах PDF.
- [**Добавление водяных знаков**](./add-watermark): наложение текста или изображения на страницы PDF.
- [**Колонтитулы**](./header-footer): добавление текста в верхнюю и нижнюю части страниц.
- [**Инверсия цвета**](./invert-colors): создание тёмной версии PDF.
- [**Эффект сканера**](./scanner-effect): придайте PDF вид отсканированного документа.
- [**Настройка цвета**](./adjust-colors): точная настройка яркости, контраста, насыщенности и других параметров.
- [**Цвет фона**](./background-color): изменение цвета фона PDF.
- [**Изменение цвета текста**](./text-color): изменение цвета текста в PDF.
- [**Подписание PDF**](./sign-pdf): нарисуйте, введите или загрузите свою подпись.
- [**Добавление штампов**](./add-stamps): добавление штампов-изображений в PDF с помощью панели аннотаций.
- [**Удаление аннотаций**](./remove-annotations): удаление комментариев, выделений и ссылок.
- [**Обрезка PDF**](./crop-pdf): обрезка полей на каждой странице PDF.
- [**Заполнение PDF-форм**](./form-filler): заполнение форм прямо в браузере. Поддерживаются и формы XFA.
- [**Создание PDF-форм**](./form-creator): создание заполняемых PDF-форм с текстовыми полями перетаскиванием.
- [**Удаление пустых страниц**](./remove-blank-pages): автоматический поиск и удаление пустых страниц.
</div>
---
## Преобразование в PDF
Превращайте изображения, документы, электронные книги и файлы других форматов в PDF.
<div class="tool-grid">
- [**Изображения в PDF**](./image-to-pdf): преобразование JPG, PNG, BMP, GIF, TIFF, SVG, HEIC, WebP и других форматов в PDF.
- [**JPG в PDF**](./jpg-to-pdf): создание PDF из одного или нескольких изображений JPG.
- [**PNG в PDF**](./png-to-pdf): создание PDF из одного или нескольких изображений PNG.
- [**WebP в PDF**](./webp-to-pdf): создание PDF из одного или нескольких изображений WebP.
- [**SVG в PDF**](./svg-to-pdf): создание PDF из одного или нескольких изображений SVG.
- [**BMP в PDF**](./bmp-to-pdf): создание PDF из одного или нескольких изображений BMP.
- [**HEIC в PDF**](./heic-to-pdf): создание PDF из одного или нескольких изображений HEIC.
- [**TIFF в PDF**](./tiff-to-pdf): создание PDF из одного или нескольких изображений TIFF.
- [**Текст в PDF**](./txt-to-pdf): преобразование обычного текстового файла в PDF.
- [**Markdown в PDF**](./markdown-to-pdf): преобразование Markdown в PDF с живым предпросмотром и подсветкой синтаксиса.
- [**JSON в PDF**](./json-to-pdf): преобразование файлов JSON в формат PDF.
- [**ODT в PDF**](./odt-to-pdf): преобразование файлов ODT (OpenDocument Text) в PDF.
- [**CSV в PDF**](./csv-to-pdf): преобразование таблиц CSV в PDF.
- [**RTF в PDF**](./rtf-to-pdf): преобразование документов RTF (Rich Text Format) в PDF.
- [**Word в PDF**](./word-to-pdf): преобразование документов Word (DOCX, DOC, ODT) в PDF.
- [**Excel в PDF**](./excel-to-pdf): преобразование таблиц Excel (XLSX, XLS, ODS) в PDF.
- [**PowerPoint в PDF**](./powerpoint-to-pdf): преобразование презентаций PowerPoint (PPTX, PPT, ODP) в PDF.
- [**XPS в PDF**](./xps-to-pdf): преобразование документов XPS/OXPS в PDF.
- [**MOBI в PDF**](./mobi-to-pdf): преобразование электронных книг MOBI в PDF.
- [**EPUB в PDF**](./epub-to-pdf): преобразование электронных книг EPUB в PDF.
- [**FB2 в PDF**](./fb2-to-pdf): преобразование электронных книг FictionBook (FB2) в PDF.
- [**CBZ в PDF**](./cbz-to-pdf): преобразование архивов комиксов (CBZ/CBR) в PDF.
- [**WPD в PDF**](./wpd-to-pdf): преобразование документов WordPerfect (WPD) в PDF.
- [**WPS в PDF**](./wps-to-pdf): преобразование документов WPS Office в PDF.
- [**XML в PDF**](./xml-to-pdf): преобразование документов XML в PDF.
- [**ODG в PDF**](./odg-to-pdf): преобразование OpenDocument Graphics (ODG) в PDF.
- [**ODS в PDF**](./ods-to-pdf): преобразование OpenDocument Spreadsheet (ODS) в PDF.
- [**ODP в PDF**](./odp-to-pdf): преобразование OpenDocument Presentation (ODP) в PDF.
- [**PUB в PDF**](./pub-to-pdf): преобразование Microsoft Publisher (PUB) в PDF.
- [**VSD в PDF**](./vsd-to-pdf): преобразование Microsoft Visio (VSD, VSDX) в PDF.
- [**PSD в PDF**](./psd-to-pdf): преобразование файлов Adobe Photoshop (PSD) в PDF.
- [**Email в PDF**](./email-to-pdf): преобразование файлов электронной почты (EML, MSG) в формат PDF.
</div>
---
## Преобразование из PDF
Извлекайте содержимое PDF в изображения, документы и форматы данных.
<div class="tool-grid">
- [**PDF в JPG**](./pdf-to-jpg): преобразование каждой страницы PDF в изображение JPG.
- [**PDF в PNG**](./pdf-to-png): преобразование каждой страницы PDF в изображение PNG.
- [**PDF в WebP**](./pdf-to-webp): преобразование каждой страницы PDF в изображение WebP.
- [**PDF в BMP**](./pdf-to-bmp): преобразование каждой страницы PDF в изображение BMP.
- [**PDF в TIFF**](./pdf-to-tiff): преобразование каждой страницы PDF в изображение TIFF.
- [**PDF в CBZ**](./pdf-to-cbz): преобразование PDF в CBZ (архив комиксов) для программ чтения комиксов и Calibre.
- [**PDF в SVG**](./pdf-to-svg): преобразование каждой страницы PDF в масштабируемую векторную графику.
- [**PDF в CSV**](./pdf-to-csv): извлечение таблиц из PDF и преобразование в формат CSV.
- [**PDF в Excel**](./pdf-to-excel): извлечение таблиц из PDF и преобразование в Excel (XLSX).
- [**PDF в оттенки серого**](./pdf-to-greyscale): преобразование всех цветов в чёрно-белые.
- [**PDF в JSON**](./pdf-to-json): преобразование файлов PDF в формат JSON.
- [**PDF в Word**](./pdf-to-word): преобразование файлов PDF в редактируемые документы Word.
- [**Извлечение изображений**](./extract-images): извлечение всех встроенных изображений из файлов PDF.
- [**PDF в Markdown**](./pdf-to-markdown): преобразование текста и таблиц PDF в формат Markdown.
- [**Подготовка PDF для ИИ**](./prepare-pdf-for-ai): извлечение содержимого PDF как JSON LlamaIndex для конвейеров RAG/LLM.
- [**PDF в текст**](./pdf-to-text): извлечение текста из файлов PDF и сохранение в виде обычного текста.
- [**Извлечение таблиц из PDF**](./extract-tables): извлечение таблиц из PDF в виде CSV, JSON или Markdown.
</div>
---
## Организация и управление
Переставляйте, объединяйте, разделяйте страницы и файлы PDF и управляйте ими.
<div class="tool-grid">
- [**Конструктор PDF-процессов**](./pdf-workflow): создание собственных конвейеров обработки PDF в визуальном редакторе узлов.
- [**PDF мультиинструмент**](./pdf-multi-tool): полнофункциональный редактор PDF с управлением страницами.
- [**Распознавание текста в PDF**](./ocr-pdf): сделайте PDF доступным для поиска и копирования.
- [**Объединение PDF**](./merge-pdf): объединение нескольких PDF в один файл.
- [**Объединение документов с чередованием страниц**](./alternate-merge): объединение PDF с чередованием страниц из каждого файла.
- [**Сортировка двустороннего сканирования**](./duplex-collate): перестановка блоков лицевых и оборотных сканов в правильный порядок страниц.
- [**Дублирование и организация**](./organize-pdf): дублирование, перестановка и удаление страниц.
- [**Добавление вложений**](./add-attachments): встраивание одного или нескольких файлов в PDF.
- [**Извлечение вложений**](./extract-attachments): извлечение всех встроенных файлов из PDF в ZIP-архив.
- [**Редактирование вложений**](./edit-attachments): просмотр или удаление вложений в PDF.
- [**PDF OCG**](./pdf-layers): просмотр, переключение, добавление и удаление слоёв OCG в PDF.
- [**Разделение PDF**](./split-pdf): извлечение диапазона страниц в новый PDF.
- [**Разделение страниц**](./divide-pages): разделение страниц по горизонтали или вертикали.
- [**Извлечение страниц**](./extract-pages): сохранение выбранных страниц в новые файлы.
- [**Удаление страниц**](./delete-pages): удаление определённых страниц из документа.
- [**Добавление пустой страницы**](./add-blank-page): вставка пустой страницы в любое место PDF.
- [**Обращение порядка страниц**](./reverse-pages): переворот порядка всех страниц документа.
- [**Поворот PDF**](./rotate-pdf): поворот страниц с шагом 90 градусов.
- [**Поворот на заданное количество градусов**](./rotate-custom): поворот страниц на любой произвольный угол.
- [**N-Up PDF**](./n-up-pdf): размещение нескольких страниц на одном листе.
- [**PDF-буклет**](./pdf-booklet): перестановка страниц для двусторонней печати буклета.
- [**Объединение в одну страницу**](./combine-single-page): склейка всех страниц в одну непрерывную ленту.
- [**Просмотр метаданных**](./view-metadata): просмотр скрытых свойств PDF.
- [**Редактирование метаданных**](./edit-metadata): изменение автора, заголовка и других свойств.
- [**PDF в ZIP**](./pdf-to-zip): упаковка нескольких файлов PDF в ZIP-архив.
- [**Сравнение документов**](./compare-pdfs): сравнение двух PDF рядом.
- [**Постеризация документа**](./posterize-pdf): разделение большой страницы на несколько меньших.
</div>
---
## Оптимизация и восстановление
Сжимайте, исправляйте и оптимизируйте PDF для лучшей производительности и совместимости.
<div class="tool-grid">
- [**Сжатие PDF**](./compress-pdf): уменьшение размера файла PDF.
- [**PDF в PDF/A**](./pdf-to-pdfa): преобразование PDF в PDF/A для долгосрочного архивирования.
- [**Редактор размера страниц**](./fix-page-size): приведение всех страниц к единому размеру.
- [**Линеаризация документа**](./linearize-pdf): оптимизация PDF для быстрого просмотра в вебе.
- [**Размеры страниц**](./page-dimensions): анализ размера, ориентации и единиц измерения страниц.
- [**Снятие ограничений**](./remove-restrictions): снятие защиты паролем и ограничений безопасности.
- [**Восстановление документа**](./repair-pdf): восстановление данных из повреждённых файлов PDF.
- [**Растеризация документа**](./rasterize-pdf): преобразование PDF в PDF на основе изображений. Сведение слоёв и удаление выделяемого текста.
- [**Выпрямление PDF**](./deskew-pdf): автоматическое выравнивание наклонённых отсканированных страниц с помощью OpenCV.
- [**Шрифты в кривые**](./font-to-outline): преобразование всех шрифтов в векторные контуры для одинакового отображения.
</div>
---
## Защита PDF
Защищайте, шифруйте PDF и управляйте доступом к документам.
<div class="tool-grid">
- [**Защита PDF**](./protect-pdf): защита PDF паролем.
- [**Санирование документа**](./sanitize-pdf): удаление метаданных, аннотаций, скриптов и многого другого.
- [**Разблокировка PDF**](./unlock-pdf): снятие защиты паролем с PDF.
- [**Сведение документа**](./flatten-pdf): превращение полей форм и аннотаций в нередактируемые.
- [**Удаление метаданных**](./remove-metadata): удаление скрытых данных из PDF.
- [**Изменение разрешений**](./change-permissions): установка или изменение прав пользователей для PDF.
- [**Цифровая подпись PDF**](./digital-sign-pdf): добавление криптографической цифровой подписи с сертификатами X.509.
- [**Проверка подписи в PDF**](./validate-signature-pdf): проверка цифровых подписей и просмотр сведений о сертификате.
</div>
+42
View File
@@ -0,0 +1,42 @@
---
title: Инверсия цвета
description: Инвертируйте все цвета PDF, чтобы получить тёмную версию любого документа.
---
# Инверсия цвета
Замените каждый цвет в PDF на противоположный. Белый фон становится чёрным, чёрный текст белым, а все остальные цвета переходят в дополнительные. Это самый быстрый способ получить «тёмную тему» для любого PDF.
## Как это работает
1. Загрузите файл PDF.
2. Нажмите **Инвертировать цвета** для обработки.
3. Инвертированный PDF скачивается автоматически.
Дополнительных настроек нет. Инструмент отображает каждую страницу как изображение, инвертирует цвета всех пикселей и собирает результат в новый PDF.
## Возможности
- Инверсия цвета всех страниц в одно нажатие
- Обработка каждой страницы документа
- Сохранение исходных размеров и макета страниц
- Работает с любым PDF независимо от содержимого (текст, изображения, смешанное содержимое)
## Сценарии использования
- Создание тёмных версий учебников и руководств для комфортного чтения ночью
- Подготовка высококонтрастных версий документов для доступности
- Инверсия отсканированных документов, снятых с неправильной экспозицией
- Создание негативов PDF с большим количеством изображений для визуального анализа
## Советы
- Чтобы применить эффект, инструмент растеризует страницы, поэтому результат состоит из изображений. Текст больше нельзя выделять и искать. Если после инверсии нужен текст с возможностью поиска, пропустите результат через инструмент распознавания текста.
- Для более точной настройки цвета (яркость, контраст, насыщенность) используйте инструмент [Настройка цвета](./adjust-colors).
- Большие PDF с множеством страниц могут обрабатываться дольше, так как каждая страница отображается и инвертируется отдельно.
## Связанные инструменты
- [Настройка цвета](./adjust-colors)
- [Цвет фона](./background-color)
- [Эффект сканера](./scanner-effect)
+48
View File
@@ -0,0 +1,48 @@
---
title: JPG в PDF
description: Преобразуйте одно или несколько изображений JPG, JPEG и JPEG 2000 в один файл PDF прямо в браузере.
---
# JPG в PDF
Превратите изображения JPG в аккуратный PDF. Загрузите один файл или сразу несколько JPG: каждое изображение станет полноразмерной страницей итогового документа.
## Поддерживаемые форматы
| Формат | Расширения |
| :-------- | :-------------- |
| JPEG | `.jpg`, `.jpeg` |
| JPEG 2000 | `.jp2`, `.jpx` |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы JPG. Можно выбрать несколько файлов.
2. Просмотрите загруженные файлы. Значок корзины удаляет отдельные файлы, а **Добавить ещё файлы** дополняет список.
3. Выберите уровень **Качества PDF**.
4. Нажмите **Преобразовать в PDF**. Инструмент сжимает изображения согласно выбранному качеству, преобразует их движком PyMuPDF и скачивает `from_jpgs.pdf`.
## Параметры
**Качество PDF** определяет сжатие, применяемое к каждому изображению перед встраиванием в PDF:
- **Высокое качество**: сохраняет максимум деталей. Подходит для фотографий и печати.
- **Среднее качество** (по умолчанию): хороший баланс между чёткостью и размером файла.
- **Низкое качество**: сильное сжатие для наименьшего размера результата.
## Сценарии использования
- Преобразование отсканированных документов, сохранённых как JPG, в один PDF для отправки
- Упаковка фотографий товаров в каталог для клиентов
- Превращение медицинских или спутниковых изображений JPEG 2000 в переносимый PDF
- Создание фотоальбома для печати из файлов с камеры
## Советы
- Файлы JPEG 2000 (`.jp2`, `.jpx`) поддерживаются полностью, а не только обычный JPEG. Это удобно для медицинских изображений и геоданных.
- Если ваши JPG сняты на камеру телефона, среднее качество обычно даёт файл на 40-60% меньше, чем высокое, без заметной на экране разницы.
## Связанные инструменты
- [Изображения в PDF](./image-to-pdf)
- [PNG в PDF](./png-to-pdf)
- [WebP в PDF](./webp-to-pdf)
+53
View File
@@ -0,0 +1,53 @@
---
title: JSON в PDF
description: Восстанавливайте файлы PDF из формата JSON BentoPDF. Преобразуйте экспорт JSON обратно в исходные документы PDF.
---
# JSON в PDF
Восстанавливайте документы PDF из файлов JSON, ранее созданных инструментом **PDF в JSON** от BentoPDF. Это инструмент обратного преобразования: он берёт структурированное JSON-представление PDF и собирает исходный документ заново.
::: warning
Этот инструмент принимает только файлы JSON, созданные конвертером PDF в JSON от BentoPDF. Обычные файлы JSON из API, баз данных и других инструментов не поддерживаются.
:::
## Поддерживаемые форматы
| Вход | Описание |
| :------ | :--------------------------------------------------------------- |
| `.json` | Файлы JSON, экспортированные инструментом PDF в JSON от BentoPDF |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё один или несколько файлов JSON.
2. В списке файлов показан каждый выбранный файл с его размером.
3. Нажмите **Преобразовать в PDF**. Инструмент обрабатывает все файлы с помощью Web Worker и движка CPDF.
4. Результат скачивается как `jsons-to-pdf.zip` и содержит по одному PDF на каждый входной файл JSON.
Преобразование выполняется в фоновом Web Worker, поэтому интерфейс остаётся отзывчивым даже с большими файлами.
## Параметры
У этого инструмента нет настраиваемых параметров. Итоговый PDF полностью определяется структурой JSON.
## Результат
При преобразовании нескольких файлов JSON результаты поставляются в ZIP-архиве. Каждый PDF называется по исходному файлу JSON (например, `report.json` превращается в `report.pdf`).
## Сценарии использования
- Восстановление PDF из резервной копии или архивного конвейера на основе JSON
- Прогон PDF через JSON для проверки и обратно в PDF
- Пересборка документов после программных изменений структуры JSON
- Проверка того, что экспорт PDF в JSON сохранил всё содержимое документа, путём обратного преобразования
## Советы
- Если нужно преобразовать произвольные данные JSON (например, ответы API или файлы конфигурации) в отформатированный PDF, лучше подходит инструмент [Текст в PDF](./txt-to-pdf). Вставьте JSON как текст, и он будет отображён с правильным форматированием.
- Для работы этого инструмента должен быть доступен движок CPDF WebAssembly. На самостоятельно размещённых экземплярах нужно настроить файлы CPDF WASM.
## Связанные инструменты
- [Текст в PDF](./txt-to-pdf)
- [Markdown в PDF](./markdown-to-pdf)
- [CSV в PDF](./csv-to-pdf)
+49
View File
@@ -0,0 +1,49 @@
---
title: Линеаризация документа
description: Оптимизируйте файлы PDF для быстрого просмотра в вебе с постепенной загрузкой. Также известно как оптимизация «Быстрый просмотр в Интернете».
---
# Линеаризация документа
Линеаризация перестраивает PDF так, чтобы первую страницу можно было показать до полной загрузки файла. В Adobe это называется «Быстрый просмотр в Интернете». Если вы размещаете PDF на сайте или отдаёте их через портал документов, линеаризация заметно ускоряет их открытие.
## Как это работает
1. Загрузите один или несколько файлов PDF.
2. Нажмите **Линеаризовать PDF**.
3. Скачайте результат в виде ZIP-архива со всеми линеаризованными файлами.
Настраивать ничего не нужно. Инструмент использует флаг `--linearize` из QPDF, который перестраивает внутреннюю структуру PDF, не меняя его внешний вид.
## Что делает линеаризация
- Переупорядочивает объекты PDF так, чтобы данные первой страницы находились в начале файла
- Добавляет словарь линеаризации и таблицы подсказок, чтобы программы просмотра знали, где найти каждую страницу
- Включает запросы по диапазонам байтов: браузер может загрузить только первую страницу, не скачивая весь файл
- Приводит в порядок таблицу перекрёстных ссылок для эффективного произвольного доступа
## Возможности
- Пакетная обработка нескольких PDF за одну операцию
- Результат сохраняет все содержимое, шрифты, изображения и интерактивные элементы
- Использует QPDF (WebAssembly) для надёжной линеаризации по стандартам
- Результаты упаковываются в ZIP для удобной загрузки
## Сценарии использования
- Размещение отчётов в PDF на сайте, где пользователи ожидают мгновенного отображения страницы
- Встраивание PDF в веб-приложения со встроенными просмотрщиками
- Публикация каталогов и руководств в PDF, которые открывают при медленном мобильном соединении
- Подготовка документов для сетей доставки контента (CDN), поддерживающих выдачу по диапазонам байтов
## Советы
- Линеаризуйте документ после завершения всех остальных правок. Любое последующее изменение (объединение, добавление страниц) нарушит линеаризацию.
- Сочетайте с инструментом «Сжатие PDF», чтобы получить самые компактные и быстро загружаемые PDF.
- Линеаризация немного увеличивает размер файла (обычно менее чем на 1%).
## Связанные инструменты
- [Сжатие PDF](./compress-pdf): уменьшите размер файла перед линеаризацией
- [Восстановление документа](./repair-pdf): исправьте структурные проблемы, мешающие линеаризации
- [Удаление метаданных](./remove-metadata): удалите метаданные перед публикацией в интернете
+59
View File
@@ -0,0 +1,59 @@
---
title: Markdown в PDF
description: Пишите или вставляйте Markdown и экспортируйте его в профессионально оформленный PDF с живым предпросмотром и подсветкой синтаксиса.
---
# Markdown в PDF
Полнофункциональный редактор Markdown с живым предпросмотром и экспортом в PDF одним нажатием. Пишите с нуля, загрузите готовый файл `.md` или вставьте содержимое из буфера обмена. Редактор отображает Markdown в реальном времени и экспортирует оформленный PDF с помощью встроенного механизма печати браузера.
## Поддерживаемые форматы
| Вход | Описание |
| :---------- | :------------------------------ |
| Файлы `.md` | Загрузка кнопкой «Загрузить» |
| Прямой ввод | Введите или вставьте в редактор |
## Как это работает
1. Откройте инструмент Markdown в PDF. Редактор загрузится в режиме разделённого экрана: исходный Markdown слева, готовый предпросмотр справа.
2. Напишите Markdown, вставьте его или нажмите **Загрузить**, чтобы открыть файл `.md`.
3. Переключайтесь между светлой и тёмной темой ползунком темы на панели инструментов.
4. Нажмите **Экспорт в PDF** (или `Ctrl/Cmd + S`), чтобы создать PDF через диалог печати браузера.
## Возможности
Редактор поддерживает широкий набор возможностей Markdown помимо базовых:
- **Стандартный Markdown**: заголовки, полужирный, курсив, ссылки, изображения, списки, цитаты, горизонтальные линии
- **Блоки кода** с подсветкой синтаксиса для более чем 15 языков (JavaScript, TypeScript, Python, Go, Rust, SQL, Java, C#, C++, YAML, Bash и другие)
- **Диаграммы Mermaid**: блок-схемы, диаграммы последовательности, ER-диаграммы и другие типы диаграмм Mermaid отображаются прямо в предпросмотре
- **Таблицы** со стандартным синтаксисом таблиц Markdown
- **Списки задач** с флажками
- **Сноски**, **подстрочные** и **надстрочные** символы
- **Списки определений**, **аббревиатуры**
- Поддержка **эмодзи** (`:smile:` отображается как эмодзи)
- **Выделение** (`==marked text==`) и **вставки** (`++inserted text++`)
- **Автоматические ссылки**: обычные URL превращаются в кликабельные ссылки
- Создание **оглавления**
- **Якорные ссылки** в заголовках
## Сценарии использования
- Написание документации проекта и экспорт аккуратного PDF для заинтересованных сторон
- Создание технических отчётов с примерами кода и архитектурными диаграммами Mermaid
- Преобразование README с GitHub в PDF для автономного чтения или печати
- Подготовка предложения или спецификации со списками задач и таблицами
- Создание оформленного раздаточного материала из конспектов лекций, написанных в Markdown
## Советы
- Для создания PDF используется функция печати в PDF в браузере. В Chrome перед сохранением можно настроить поля и масштаб в диалоге печати.
- Диаграммы Mermaid отображаются в предпросмотре, но при первом использовании им может потребоваться немного времени на инициализацию.
- Используйте сочетание `Ctrl/Cmd + S`, чтобы экспортировать, не тянясь к кнопке.
## Связанные инструменты
- [Текст в PDF](./txt-to-pdf)
- [Word в PDF](./word-to-pdf)
- [JSON в PDF](./json-to-pdf)
+54
View File
@@ -0,0 +1,54 @@
---
title: Объединение PDF
description: Объединяйте несколько файлов PDF в один документ с изменением порядка перетаскиванием и управлением на уровне страниц.
---
# Объединение PDF
Объединяйте несколько файлов PDF в один документ. Можно объединять файлы целиком в нужном порядке или переключиться в режим страниц для точного управления отдельными страницами из каждого загруженного PDF.
## Как это работает
1. Загрузите два или более файла PDF: нажмите на область загрузки или перетащите их.
2. Выберите **Режим файлов** или **Режим страниц** переключателем вверху.
3. В режиме файлов перетаскивайте файлы, чтобы изменить порядок, и при желании укажите для каждого файла диапазоны страниц (например, `1-3, 5`). Оставьте диапазон пустым, чтобы включить все страницы.
4. В режиме страниц перетаскивайте миниатюры отдельных страниц, чтобы составить точную последовательность.
5. Нажмите **Объединить PDF**, чтобы собрать всё в один файл. Объединённый PDF скачивается автоматически.
## Возможности
- Два режима объединения: режим файлов для быстрого объединения целых файлов и режим страниц для управления каждой страницей
- Изменение порядка перетаскиванием в обоих режимах с плавной анимацией
- Синтаксис диапазонов страниц (например, `1-3, 5, 8-10`) позволяет выбирать страницы без перехода в режим страниц
- Миниатюры страниц загружаются по мере необходимости, поэтому интерфейс остаётся отзывчивым даже с большими документами
- Нет ограничений на число файлов и общее количество страниц
- Сохраняет исходное качество PDF без повторного кодирования
## Параметры
| Параметр | Описание |
| ----------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Режим файлов** | Объединение файлов целиком в произвольном порядке с необязательными фильтрами диапазонов страниц |
| **Режим страниц** | Визуальная сетка всех страниц из всех файлов: перетаскивайте миниатюры, чтобы составить точную последовательность |
| **Поле страниц** | Текстовое поле для каждого файла, принимающее диапазоны вроде `1-3, 5`, чтобы включить только нужные страницы |
## Сценарии использования
- Объединение отдельных PDF с главами в одну книгу или отчёт
- Объединение сопроводительного письма и резюме в один документ для заявки
- Сбор нужных страниц из нескольких исходных документов в один файл
- Сборка отсканированных чеков или счетов в один архивный PDF
- Создание раздаточного материала для презентации из слайдов нескольких наборов
## Советы
- Используйте режим страниц, когда нужно чередовать страницы из разных файлов, а не добавлять один файл после другого.
- После первоначальной загрузки можно добавить ещё файлы кнопкой **Добавить ещё файлы**, не теряя текущего порядка.
- Нумерация страниц в диапазонах начинается с 1, поэтому `1` означает первую страницу файла.
## Связанные инструменты
- [Разделение PDF](./split-pdf)
- [Дублирование и организация](./organize-pdf)
- [Объединение документов с чередованием страниц](./alternate-merge)
- [Удаление страниц](./delete-pages)
+43
View File
@@ -0,0 +1,43 @@
---
title: MOBI в PDF
description: Преобразуйте файлы электронных книг MOBI в PDF прямо в браузере. Бесплатно, приватно, без загрузки файлов.
---
# MOBI в PDF
Преобразуйте электронные книги Amazon Kindle в формате MOBI в документы PDF. Файлы MOBI привязаны к устройствам и приложениям Kindle, поэтому их сложно читать в других местах. PDF даёт переносимую версию, которую можно открыть на любом устройстве или распечатать.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :----- | :--------- | :------------------------------ |
| MOBI | `.mobi` | Формат книг Kindle (Mobipocket) |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё один или несколько файлов MOBI.
2. Просмотрите список файлов. Удалите ненужные значком корзины или нажмите **Добавить ещё файлы**, чтобы добавить другие книги.
3. Нажмите **Преобразовать в PDF**. Движок PyMuPDF разбирает структуру MOBI и отображает каждую страницу как содержимое PDF.
4. Один файл скачивается как PDF. При конвертации нескольких файлов вы получите ZIP-архив `mobi-converted.zip`.
## Параметры
Дополнительные настройки не нужны. При преобразовании сохраняются текст, форматирование и встроенные изображения исходного файла MOBI.
## Сценарии использования
- Чтение содержимого, купленного в Kindle, на устройстве для чтения без Kindle, которое поддерживает только PDF
- Печать глав книги для автономного изучения или заметок
- Архивирование личной библиотеки книг в универсальном формате
- Отправка фрагментов тому, у кого не установлено приложение Kindle
## Советы
- Файлы MOBI с защитой DRM преобразовать нельзя. Инструмент работает только с файлами MOBI без DRM.
- Большие книги с множеством встроенных изображений могут обрабатываться на несколько секунд дольше, так как всё выполняется в браузере.
## Связанные инструменты
- [EPUB в PDF](./epub-to-pdf)
- [FB2 в PDF](./fb2-to-pdf)
- [CBZ в PDF](./cbz-to-pdf)
+54
View File
@@ -0,0 +1,54 @@
---
title: N-Up PDF
description: Расположите несколько страниц PDF на одном листе в виде сетки для экономной печати.
---
# N-Up PDF
Размещайте несколько страниц на одном листе в виде сетки. Это сокращает число печатаемых листов: на каждый лист помещается 2, 4, 6, 8, 9 или 16 страниц. Инструмент сам масштабирует и размещает страницы, а размер страницы можно настроить.
## Как это работает
1. Загрузите файл PDF.
2. Выберите число страниц на листе (значение «N»): 2, 4, 6, 8, 9 или 16.
3. Выберите размер страницы результата (по умолчанию A4) и ориентацию.
4. При желании настройте интервал, цвет границ и цвет фона.
5. Нажмите кнопку обработки. Инструмент масштабирует каждую страницу и размещает их плиткой на новых листах.
## Возможности
- Макеты сетки: 2, 4, 6, 8, 9 и 16 страниц на листе
- Настраиваемые размер и ориентация страницы результата
- Необязательный интервал между страницами
- Настройки цвета фона и границ
- Сохраняет пропорции исходных страниц при масштабировании
## Параметры
| Параметр | Описание |
| -------------------- | ------------------------------------------------------------------------ |
| **Страниц на листе** | Число исходных страниц на каждой странице результата (2, 4, 6, 8, 9, 16) |
| **Размер страницы** | Размер выходного листа (A4, Letter, Legal и другие) |
| **Ориентация** | Книжная или альбомная для выходного листа |
| **Интервал** | Промежуток между страницами в пунктах |
| **Цвет фона** | Цвет заливки фона выходного листа |
| **Цвет границы** | Цвет границ вокруг каждой страницы |
## Сценарии использования
- Печать раздаточных материалов по 4 слайда на странице для экономии бумаги
- Создание шпаргалок с несколькими справочными страницами на одном листе
- Подготовка компактных архивов документов для подшивки
- Создание листов-обзоров с миниатюрами длинного документа
## Советы
- Альбомная ориентация часто лучше подходит для макета по 2 страницы, а книжная обычно лучше для 4 и более.
- Увеличение интервала улучшает читаемость, но уменьшает область для каждой страницы.
- Для обратной операции (разделения одной страницы на несколько) см. [Постеризация документа](./posterize-pdf).
## Связанные инструменты
- [Постеризация документа](./posterize-pdf)
- [PDF-буклет](./pdf-booklet)
- [Объединение в одну страницу](./combine-single-page)
+54
View File
@@ -0,0 +1,54 @@
---
title: Распознавание текста в PDF
description: Сделайте отсканированные PDF доступными для поиска и копирования с помощью Tesseract OCR с поддержкой нескольких языков и фильтрацией символов.
---
# Распознавание текста в PDF
Превращайте отсканированные документы в PDF с поиском и копированием текста. Инструмент использует Tesseract OCR, чтобы распознавать текст на изображениях, и накладывает поверх исходных страниц невидимый текстовый слой. Внешний вид страниц сохраняется, а содержимое становится полностью доступным для поиска.
## Как это работает
1. Загрузите отсканированный PDF или PDF на основе изображений.
2. Выберите один или несколько языков документа в списке языков с поиском.
3. При желании настройте расширенные параметры (разрешение, бинаризация, белый список).
4. Нажмите **Начать распознавание** и следите за ходом выполнения на индикаторе прогресса.
5. По завершении просмотрите извлечённый текст, затем скачайте PDF с поиском или обычный файл `.txt`.
## Возможности
- Распознавание на нескольких языках с выбором языка через поиск
- Невидимый текстовый слой сохраняет исходный вид документа
- Индикатор прогресса и журнал в реальном времени во время обработки
- Скачивание результата как PDF с поиском или обычного текстового файла
- Копирование извлечённого текста в буфер обмена
- Три уровня разрешения для баланса между скоростью и точностью
## Параметры
| Настройка | Значения | По умолчанию | Назначение |
| -------------------------------- | --------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------- |
| **Разрешение** | Стандартное (192 DPI), Высокое (288 DPI), Максимальное (384 DPI) | Высокое | Более высокое разрешение повышает точность для мелкого текста, но работает дольше |
| **Бинаризация изображения** | Вкл. / Выкл. | Выкл. | Повышает контраст чистых сканов, преобразуя их в чёрно-белые |
| **Набор символов белого списка** | Нет, Буквы и цифры, Числа и валюта, Только буквы, Только цифры, Счёт, Формы, Свой | Нет | Ограничивает распознаваемые символы, чтобы повысить точность для определённых типов документов |
| **Белый список символов** | Произвольный текст | Пусто | Ручной набор символов, если выбран набор «Свой» |
## Сценарии использования
- Превращение отсканированных договоров и счетов в документы с поиском, чтобы искать по ним через Ctrl+F
- Извлечение текста из сфотографированных документов или старых бумажных записей
- Обработка чеков с набором «Счёт» для точного распознавания сумм и дат
- Создание доступных PDF из сканов, состоящих только из изображений, для соответствия требованиям
- Пакетное извлечение текста из отсканированных книг или руководств
## Советы
- Выбирайте несколько языков, если документ содержит текст на разных языках (например, английские заголовки и основной текст на японском).
- Используйте бинаризацию для документов с выцветшим или малоконтрастным текстом: она может заметно повысить точность распознавания.
- Наборы белого списка «Счёт» и «Формы» значительно снижают число ложных срабатываний в структурированных документах, игнорируя лишние формы символов.
## Связанные инструменты
- [Извлечение таблиц из PDF](./extract-tables)
- [Объединение PDF](./merge-pdf)
- [Сжатие PDF](./compress-pdf)
+43
View File
@@ -0,0 +1,43 @@
---
title: ODG в PDF
description: Преобразуйте файлы LibreOffice Draw (ODG) в PDF в браузере. Бесплатно, без загрузки, полностью приватно.
---
# ODG в PDF
Преобразуйте файлы OpenDocument Graphics в PDF. ODG - родной формат LibreOffice Draw, который используется для диаграмм, блок-схем и векторных иллюстраций. PDF упрощает обмен такими рисунками, их печать и встраивание в другие документы.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :-------------------- | :--------- | :--------------------------------------- |
| OpenDocument Graphics | `.odg` | Файлы LibreOffice Draw / OpenOffice Draw |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы ODG. Можно добавить сразу несколько файлов.
2. Просмотрите список файлов. Значок корзины удаляет отдельные записи, а **Добавить ещё файлы** добавляет другие рисунки.
3. Нажмите **Преобразовать в PDF**. В браузере загружается движок на основе LibreOffice и преобразует каждый файл ODG, сохраняя векторную графику, фигуры и текст.
4. Один файл скачивается сразу как PDF. Несколько файлов создают ZIP-архив `odg-to-pdf.zip`.
## Параметры
Дополнительные настройки не нужны. При преобразовании сохраняются исходные размеры страницы, фигуры, соединители и текстовые блоки из файла ODG.
## Сценарии использования
- Передача диаграмм LibreOffice Draw клиентам, у которых не установлен LibreOffice
- Печать блок-схем и сетевых диаграмм, созданных в Draw
- Включение иллюстраций ODG в отчёт или презентацию в виде встроенных PDF
- Архивирование технических чертежей в формате, который останется читаемым десятилетиями
## Советы
- Векторные элементы остаются векторными в итоговом PDF, поэтому результат чётко масштабируется для печати любого размера.
- При первом использовании движку LibreOffice нужно время на запуск. Последующие преобразования в том же сеансе выполняются быстрее.
## Связанные инструменты
- [ODS в PDF](./ods-to-pdf)
- [ODP в PDF](./odp-to-pdf)
- [VSD в PDF](./vsd-to-pdf)
+44
View File
@@ -0,0 +1,44 @@
---
title: ODP в PDF
description: Преобразуйте презентации LibreOffice Impress (ODP) в PDF в браузере. Бесплатно, приватно, без загрузки.
---
# ODP в PDF
Преобразуйте файлы OpenDocument Presentation в PDF. ODP - родной формат LibreOffice Impress и стандартный вариант экспорта из Google Slides. Если превратить презентации в PDF, их сможет открыть любой человек без программ для презентаций, а слайды аккуратно печатаются.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :------------------------ | :--------- | :--------------------------------------------- |
| OpenDocument Presentation | `.odp` | LibreOffice Impress / экспорт из Google Slides |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы ODP. Можно выбрать сразу несколько презентаций.
2. Просмотрите список файлов. Значок корзины удаляет записи, а **Добавить ещё файлы** добавляет другие презентации.
3. Нажмите **Преобразовать в PDF**. Движок на основе LibreOffice обрабатывает каждую презентацию и создаёт PDF, где каждый слайд становится страницей.
4. Один файл скачивается как PDF. Несколько файлов поставляются в ZIP-архиве `odp-to-pdf.zip`.
## Параметры
Настраивать ничего не нужно. Каждый слайд отображается в исходных размерах, а текст, изображения, фигуры и фоны слайдов сохраняются.
## Сценарии использования
- Рассылка презентации аудитории в виде раздаточного PDF
- Передача экспорта из Google Slides тем, кто предпочитает PDF вместо ODP
- Архивирование докладов и лекций на конференциях в формате только для чтения
- Печать наборов слайдов для очных семинаров
## Советы
- Переходы и анимация слайдов относятся только к визуальным эффектам и в PDF не переносятся, но всё статичное содержимое отображается правильно.
- Заметки докладчика в итоговый PDF не включаются. Если они нужны, экспортируйте их отдельно из программы для презентаций.
- Как и другие инструменты на основе LibreOffice, движок загружается при первом использовании и остаётся в кэше на время сеанса.
## Связанные инструменты
- [ODG в PDF](./odg-to-pdf)
- [ODS в PDF](./ods-to-pdf)
- [PUB в PDF](./pub-to-pdf)
+44
View File
@@ -0,0 +1,44 @@
---
title: ODS в PDF
description: Конвертируйте таблицы LibreOffice Calc (ODS) в PDF прямо в браузере. Бесплатно, приватно, без регистрации.
---
# ODS в PDF
Преобразуйте файлы OpenDocument Spreadsheet в PDF. ODS - родной формат LibreOffice Calc и частый вариант экспорта из Google Sheets. Инструмент выводит данные, форматирование и диаграммы таблицы в постраничный PDF, который можно распечатать или отправить.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :----------------------- | :--------- | :------------------------------------------ |
| OpenDocument Spreadsheet | `.ods` | Экспорт из LibreOffice Calc / Google Sheets |
## Как это работает
1. Нажмите на область загрузки или перетащите ODS-файлы. Можно выбрать сразу несколько файлов.
2. Проверьте список файлов. Значком корзины удалите лишнее или нажмите **Добавить еще файлы**, чтобы добавить ещё.
3. Нажмите **Преобразовать в PDF**. Движок на основе LibreOffice загрузится в браузере и преобразует каждую таблицу в страницы PDF.
4. Одна таблица скачивается как PDF. Несколько файлов упаковываются в `ods-to-pdf.zip`.
## Параметры
Настройка не требуется. Конвертер применяет к PDF существующую разметку печати таблицы, форматирование ячеек и ширину столбцов.
## Сценарии использования
- Отправить бюджет или отчёт из LibreOffice Calc тому, кто принимает только PDF
- Распечатать экспорт из Google Sheets, скачанный в формате ODS
- Архивировать финансовые документы в формате, который нельзя редактировать
- Сдавать формы и табели в формате ODS как документы с фиксированной разметкой
## Советы
- Если в таблице несколько листов, в PDF попадут все листы.
- Очень широкие таблицы могут разбиваться по горизонтали на несколько страниц PDF. Если разметка важна, подберите ширину столбцов в исходном файле перед конвертацией.
- Движок LibreOffice инициализируется при первом использовании. Последующие конвертации в той же сессии выполняются быстрее.
## Связанные инструменты
- [ODG в PDF](./odg-to-pdf)
- [ODP в PDF](./odp-to-pdf)
- [XML в PDF](./xml-to-pdf)
+51
View File
@@ -0,0 +1,51 @@
---
title: ODT в PDF
description: Конвертируйте файлы OpenDocument Text (ODT) в PDF в браузере с помощью движка на основе LibreOffice.
---
# ODT в PDF
Преобразуйте файлы OpenDocument Text в PDF. ODT - родной формат LibreOffice Writer, Apache OpenOffice и других открытых текстовых редакторов. Инструмент использует браузерный движок LibreOffice и точно сохраняет форматирование, таблицы, изображения и стили.
## Поддерживаемые форматы
| Формат | Расширения |
| :---------------- | :--------- |
| OpenDocument Text | `.odt` |
## Как это работает
1. Нажмите на область загрузки или перетащите один или несколько ODT-файлов.
2. Проверьте список файлов. Добавьте ещё или удалите лишние.
3. Нажмите **Конвертировать в PDF**. Движок LibreOffice инициализируется (индикатор показывает ход загрузки), затем конвертируется каждый файл.
4. Один файл скачивается сразу как PDF. Несколько файлов упаковываются в `odt-converted.zip`.
## Параметры
Дополнительных настроек нет. При конвертации форматирование исходного документа сохраняется максимально близко к оригиналу.
## Результат
| Количество файлов | Результат |
| :---------------- | :--------------------------------------------------------- |
| 1 файл | Скачивается один PDF (например, `document.pdf`) |
| 2 и более | ZIP-архив (`odt-converted.zip`) с одним PDF на каждый файл |
## Сценарии использования
- Конвертация документов LibreOffice Writer в PDF для пользователей Microsoft Office
- Подготовка PDF для печати из научных работ в формате OpenDocument
- Пакетная конвертация папки шаблонов ODT в PDF для рассылки
- Получение PDF из ODT-файлов, созданных системами автоматической генерации документов
## Советы
- Движок LibreOffice загружается при первом использовании и кэшируется для следующих конвертаций. Первая загрузка занимает несколько секунд, потом конвертация проходит быстро.
- Сложные документы со встроенными OLE-объектами или необычными шрифтами могут выглядеть немного иначе, чем в настольном LibreOffice. Перед пакетной конвертацией проверьте на образце.
- Для документов Word (`.doc`, `.docx`) используйте инструмент [Word в PDF](./word-to-pdf): он тоже работает на движке LibreOffice, но напрямую принимает форматы Microsoft.
## Связанные инструменты
- [Word в PDF](./word-to-pdf)
- [RTF в PDF](./rtf-to-pdf)
- [Текст в PDF](./txt-to-pdf)
+45
View File
@@ -0,0 +1,45 @@
---
title: Дублирование и организация
description: Меняйте порядок страниц PDF, дублируйте и удаляйте их перетаскиванием миниатюр или вводом нужного порядка.
---
# Дублирование и организация
Переставляйте, дублируйте и удаляйте страницы PDF в наглядном интерфейсе с перетаскиванием. Каждая страница отображается миниатюрой, которую можно переместить, клонировать или удалить перед сохранением результата в новый файл.
## Как это работает
1. Загрузите один PDF-файл.
2. Инструмент отобразит сетку миниатюр всех страниц.
3. Перетаскивайте миниатюры, чтобы изменить порядок, нажимайте зелёную кнопку дублирования, чтобы клонировать страницу, или красную кнопку удаления, чтобы убрать её.
4. Либо введите свой порядок страниц в текстовое поле (например, `3, 1, 2, 4`) и нажмите **Применить порядок**, чтобы переставить все страницы сразу.
5. Нажмите кнопку обработки, чтобы собрать и скачать PDF с новым порядком.
## Возможности
- Перестановка страниц перетаскиванием с плавной анимацией
- Кнопки дублирования и удаления для каждой страницы
- Ввод порядка страниц для точной перестановки
- Номера страниц автоматически обновляются после каждого изменения
- Защита от удаления последней оставшейся страницы
## Сценарии использования
- Перенести неправильно поставленную страницу отчёта на нужное место
- Продублировать страницу формы, чтобы в одном файле было несколько пустых копий
- Убрать черновые и служебные страницы перед рассылкой документа
- Развернуть или перемешать порядок страниц при подготовке к печати
- Собрать свою последовательность страниц без повторного объединения файлов
## Советы
- В поле порядка страниц указываются исходные номера страниц через запятую. Каждая страница должна встретиться ровно один раз, без пропусков и повторов.
- После дублирования страницы обе копии ссылаются на один и тот же исходный индекс страницы. Перемещать каждую копию можно независимо.
- Для массовых операций с несколькими файлами или более сложных сценариев воспользуйтесь инструментом [PDF мультиинструмент](./pdf-multi-tool).
## Связанные инструменты
- [Объединение PDF](./merge-pdf)
- [Удаление страниц](./delete-pages)
- [PDF мультиинструмент](./pdf-multi-tool)
- [Обращение порядка страниц](./reverse-pages)
+53
View File
@@ -0,0 +1,53 @@
---
title: Размеры страниц
description: Анализ размеров, ориентации, пропорций и поворота страниц PDF. Находит документы со страницами разного размера и экспортирует данные в CSV.
---
# Размеры страниц
Диагностический инструмент, который читает каждую страницу PDF и показывает её точные размеры, ориентацию, название стандартного формата, пропорции, площадь и поворот. Полезен, чтобы найти страницы разного размера перед печатью или чтобы описать свойства полученного PDF.
## Как это работает
1. Загрузите PDF-файл. Анализ запускается автоматически, нажимать кнопку не нужно.
2. В сводной панели показаны общее число страниц, число уникальных размеров и наличие страниц разного размера.
3. Просмотрите полную таблицу с данными по каждой странице.
4. Переключайте единицы измерения: пункты, дюймы, миллиметры или пиксели.
5. Нажмите **Экспорт в CSV**, чтобы сохранить данные.
## Поля отчёта
| Столбец | Описание |
| ------------------ | --------------------------------------------------- |
| Страница № | Порядковый номер страницы |
| Размеры | Ширина x высота в выбранных единицах |
| Стандартный формат | Подходящее название (A4, Letter и т. д.) или "Свой" |
| Ориентация | Книжная или альбомная |
| Соотношение сторон | Отношение ширины к высоте в десятичном виде |
| Площадь | Площадь страницы в квадратных выбранных единицах |
| Rotation | Поворот страницы в градусах |
## Возможности
- Автоматическое определение стандартных форматов бумаги (A3, A4, A5, Letter, Legal, Tabloid и других)
- Предупреждение о страницах разного размера с разбивкой по размерам и числу страниц каждого размера
- Перевод между пунктами, дюймами, миллиметрами и пикселями (при 96 PPI)
- Экспорт в CSV для электронных таблиц и систем документации
## Сценарии использования
- Убедиться, что все страницы имеют формат A4, перед отправкой документа в типографию
- Выяснить, почему объединённый PDF печатается с неожиданными полями на некоторых страницах
- Описать структуру страниц большого PDF-архива для записей метаданных
- Найти повёрнутые страницы, которые нужно исправить
## Советы
- Если в сводке указано "Разные размеры", перед печатью приведите страницы к единому размеру с помощью инструмента "Редактор размера страниц".
- Поле поворота помогает найти страницы, которые отображаются правильно, но имеют ненулевой атрибут поворота. В некоторых процессах это вызывает проблемы.
## Связанные инструменты
- [Редактор размера страниц](./fix-page-size): приведите страницы к единому размеру после обнаружения разных
- [Сжатие PDF](./compress-pdf): оптимизируйте PDF после исправления страниц
- [Поворот PDF](./rotate-pdf): исправьте повёрнутые страницы
+48
View File
@@ -0,0 +1,48 @@
---
title: Нумерация страниц
description: Добавляйте номера страниц в любое место страниц PDF с настройкой шрифта, размера и цвета.
---
# Нумерация страниц
Добавьте видимые номера на каждую страницу PDF. Вы выбираете положение, формат, размер шрифта и цвет, остальное инструмент сделает сам.
## Как это работает
1. Загрузите PDF-файл.
2. Настройте параметры нумерации в появившейся панели.
3. Нажмите **Добавить номера страниц**, чтобы начать обработку.
4. PDF с номерами скачается автоматически.
## Параметры
- **Положение**: где будут номера страниц. Внизу по центру, внизу слева, внизу справа, вверху по центру, вверху слева или вверху справа.
- **Формат**: простая нумерация (1, 2, 3...) или формат "страница X из Y" (1 / 5, 2 / 5...).
- **Размер шрифта**: размер текста номера. По умолчанию 12.
- **Цвет**: любой цвет текста номера, выбирается в палитре.
## Возможности
- Шесть вариантов положения: все углы и центр сверху и снизу
- Два формата нумерации: простая последовательная или "страница X из Y"
- Размер шрифта от 6 до 72 пунктов
- Полноценная палитра для цвета текста
- Автоматический подбор полей, чтобы номера оставались в безопасной зоне при любом размере страницы
## Сценарии использования
- Подготовка документов к печати, где нужны видимые номера страниц
- Нумерация объединённого PDF, собранного из нескольких файлов
- Нумерация раздаточных материалов к презентациям перед рассылкой
- Последовательная нумерация юридических документов и договоров
## Советы
- Формат "страница X из Y" удобен для документов, где читателю важно знать общий объём, например для коммерческих предложений и отчётов.
- Если для разных разделов нужны разные стили нумерации (например, римские цифры для вводной части), воспользуйтесь инструментом [Добавить метки страниц](./add-page-labels).
## Связанные инструменты
- [Добавить метки страниц](./add-page-labels)
- [Bates-нумерация](./bates-numbering)
- [Колонтитулы](./header-footer)
+43
View File
@@ -0,0 +1,43 @@
---
title: PDF-буклет
description: Расположите страницы PDF в порядке буклета (скрепка по сгибу) для фальцовки и скрепления в печатную брошюру.
---
# PDF-буклет
Переставьте страницы PDF в порядке буклетной импозиции. При двусторонней печати и сложении пополам страницы окажутся в правильной последовательности. Такая раскладка используется для брошюр на скрепке и зинов.
## Как это работает
1. Загрузите PDF-файл.
2. Задайте параметры буклета: размер страницы результата и ориентацию.
3. Нажмите **Создать предпросмотр**, чтобы увидеть, как страницы расположатся на каждом листе.
4. Просмотрите превью: для каждого физического листа показано, какие страницы окажутся на лицевой и оборотной стороне.
5. Нажмите **Скачать**, чтобы сохранить PDF с буклетной импозицией.
## Возможности
- Автоматическая перестановка страниц для сшивания скрепкой по сгибу
- Настраиваемый размер страницы результата
- Наглядное превью раскладки буклета перед скачиванием
- При нечётном числе страниц автоматически добавляются пустые
- Исходные страницы масштабируются под размер листа буклета
## Сценарии использования
- Создание печатных буклетов и зинов из обычного PDF
- Подготовка программ конференций и путеводителей мероприятий к печати своими силами
- Изготовление сложенных открыток и небольших каталогов
- Выпуск небольших сборников стихов и прозы для ручной брошюровки
## Советы
- Для аккуратного буклета число страниц исходного PDF желательно кратно 4. Если это не так, недостающие пустые страницы добавятся автоматически, чтобы заполнить последний лист.
- Печатайте двусторонне с настройкой принтера "переворот по короткому краю", затем сложите все листы вместе и скрепите по сгибу.
- Если нужно просто разместить несколько страниц на одном листе без буклетного порядка, используйте [N-Up PDF](./n-up-pdf).
## Связанные инструменты
- [N-Up PDF](./n-up-pdf)
- [Поворот PDF](./rotate-pdf)
- [Добавление пустой страницы](./add-blank-page)
+46
View File
@@ -0,0 +1,46 @@
---
title: Слои PDF OCG
description: Просматривайте, переключайте, добавляйте и удаляйте слои Optional Content Group (OCG) в PDF-документе.
---
# Слои PDF OCG
Управляйте группами необязательного содержимого (Optional Content Groups, OCG), которые обычно называют "слоями", внутри PDF. Можно включать и выключать слои, добавлять новые (в том числе вложенные дочерние), удалять слои и сохранять изменённый PDF.
## Как это работает
1. Загрузите PDF-файл.
2. Нажмите кнопку обработки, чтобы загрузить документ в движке PyMuPDF.
3. Инструмент покажет все существующие слои с их видимостью, состоянием блокировки и иерархией вложенности.
4. Флажками показывайте и скрывайте слои. Заблокированные слои переключать нельзя.
5. Добавляйте новые слои верхнего уровня, вводя название и нажимая кнопку добавления, либо добавляйте дочерние слои к существующему родительскому.
6. Удаляйте ненужные слои.
7. Нажмите **Скачать изменённый PDF**, чтобы скачать изменённый PDF с применёнными изменениями слоёв.
## Возможности
- Показывает иерархию слоёв с отступами для вложенных
- Включение и выключение видимости слоя
- Индикатор блокировки защищает от случайных изменений
- Добавление слоёв верхнего уровня и дочерних слоёв с любыми названиями
- Удаление отдельных слоёв
- Все изменения сохраняются в новый PDF-файл
## Сценарии использования
- Включение и выключение слоёв разметки в архитектурных и инженерных чертежах
- Добавление новых слоёв аннотаций в многослойный проектный документ
- Удаление устаревших слоёв из шаблона перед рассылкой
- Проверка, какие слои есть в сложном PDF, полученном от третьей стороны
## Советы
- Если в PDF нет слоёв, инструмент покажет пустое состояние с предложением добавить слой. Не все PDF используют слои OCG: чаще всего они встречаются в экспорте из CAD и в дизайнерских файлах.
- Дочерние слои отображаются с отступом под родительским. Вложенность может быть любой глубины.
- Заблокированные слои отмечены значком замка, а их флажки отключены. Блокировку задаёт автор PDF.
## Связанные инструменты
- [Просмотр метаданных](./view-metadata)
- [Редактирование метаданных](./edit-metadata)
- [Дублирование и организация](./organize-pdf)
+52
View File
@@ -0,0 +1,52 @@
---
title: PDF мультиинструмент
description: Универсальный менеджер страниц для объединения, разделения, поворота, дублирования, удаления и перестановки страниц PDF.
---
# PDF мультиинструмент
Единое рабочее пространство для всех операций со страницами PDF. Загрузите один или несколько PDF и работайте со всеми страницами в одной визуальной сетке. Поворачивайте, переставляйте, дублируйте, удаляйте, вставляйте другие PDF, добавляйте пустые страницы и разделяйте результат, не выходя из инструмента.
## Как это работает
1. Нажмите **Загрузить PDF** или перетащите файлы в область загрузки. Можно выбрать несколько файлов.
2. Все страницы всех загруженных файлов появятся в прокручиваемой сетке с миниатюрами.
3. Для работы со страницами используйте панель инструментов или кнопки на каждой странице.
4. Отмечайте страницы флажком на карточке, затем применяйте массовые операции.
5. Отмечайте точки разделения значком ножниц, чтобы разбить результат на отдельные файлы.
6. Нажмите **Экспортировать PDF**, чтобы скачать итог. Если есть метки разделения, результатом будет ZIP с несколькими PDF.
## Возможности
- **Объединить**: загруженные PDF автоматически объединяются в одном рабочем пространстве
- **Изменить порядок**: перетаскивайте карточки страниц, чтобы изменить порядок
- **Повернуть**: поворот отдельных страниц или группы с шагом 90 градусов (влево или вправо)
- **Дублировать**: клонирование любой страницы одним щелчком
- **Удалить**: удаление отдельных страниц или выбранной группы
- **Вставить PDF**: вставка нового PDF после любой страницы
- **Добавить пустую страницу**: добавление пустой страницы A4 в конец
- **Разделить**: расставьте метки разделения между страницами, затем экспортируйте ZIP с отдельными PDF
- **Выбрать все / Снять выбор**: быстрое выделение для массовых операций
- **Отменить / Вернуть**: полная история отмены и повтора для каждой операции
- **Скачать выбранное**: экспорт только выбранных страниц в отдельный PDF
- Автоматическое восстановление повреждённых PDF перед загрузкой
## Сценарии использования
- Сборка своего документа из страниц нескольких исходных PDF
- Очистка отсканированного документа: удаление пустых страниц, поворот боковых сканов, перестановка разделов
- Разделение большого PDF по границам глав с помощью визуальных меток
- Быстрое редактирование страниц без полноценного PDF-редактора
## Советы
- Система отмены и повтора учитывает каждую операцию. Пользуйтесь ей свободно: случайно потерять работу нельзя.
- Метки разделения отображаются пунктирными синими линиями между страницами. Поставьте их там, где нужно разделить документ, затем экспортируйте ZIP.
- Для простого объединения или разделения быстрее могут оказаться отдельные инструменты [Объединение PDF](./merge-pdf) и [Разделение PDF](./split-pdf). Мультиинструмент выручает, когда за один сеанс нужно несколько операций.
## Связанные инструменты
- [Объединение PDF](./merge-pdf)
- [Разделение PDF](./split-pdf)
- [Дублирование и организация](./organize-pdf)
- [Поворот PDF](./rotate-pdf)
+40
View File
@@ -0,0 +1,40 @@
---
title: PDF в BMP
description: Конвертируйте страницы PDF в несжатые изображения BMP. Подходит для устаревших систем и печатных процессов, которым нужен растровый вход.
---
# PDF в BMP
Преобразует каждую страницу PDF в изображение BMP (Bitmap). BMP - несжатый формат, поэтому результат точен до пикселя и без потери качества, но файлы получаются большими.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Нажмите **Конвертировать**, чтобы обработать файл.
3. Автоматически скачается один файл `.bmp` или ZIP-архив.
## Параметры
Настраиваемых параметров нет. Страницы рендерятся в фиксированном масштабе 2x, поэтому размер изображений примерно вдвое больше исходных размеров страницы PDF.
## Формат результата
- **Одна страница**: `filename.bmp`
- **Несколько страниц**: `filename_bmps.zip` с файлами `page_1.bmp`, `page_2.bmp` и так далее.
## Сценарии использования
- Передача страниц PDF в устаревшие системы и оборудование, принимающее только BMP.
- Подготовка несжатых изображений для определённых печатных процессов.
- Использование растрового результата как входных данных для программ обработки изображений, которым нужны необработанные пиксели.
## Советы
- Файлы BMP очень большие, потому что хранят необработанные пиксели без сжатия. В большинстве случаев [PDF в PNG](./pdf-to-png) даёт то же качество без потерь при гораздо меньшем размере.
- Если ваша система принимает PNG или TIFF, выбирайте эти форматы, чтобы экономить место на диске.
## Связанные инструменты
- [PDF в PNG](./pdf-to-png)
- [PDF в TIFF](./pdf-to-tiff)
- [PDF в JPG](./pdf-to-jpg)
+77
View File
@@ -0,0 +1,77 @@
---
title: PDF в CBZ
description: Преобразуйте PDF в файл CBZ (Comic Book Archive) для программ чтения комиксов, таких как Komga, Kavita, CDisplayEx и Calibre.
---
# PDF в CBZ
Преобразует PDF в файл CBZ (Comic Book ZIP), стандартный формат цифровых комиксов и манги. Каждая страница PDF становится изображением внутри архива. Для максимальной совместимости инструмент создаёт метаданные в трёх форматах: ComicInfo.xml, metadata.opf и ComicBookInfo JSON.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Выберите формат изображений, качество, масштаб и при желании метаданные.
3. Нажмите **Конвертировать**, чтобы создать файл CBZ.
4. Файл `.cbz` скачается автоматически.
## Параметры
| Параметр | Значения | По умолчанию | Описание |
| -------------------- | --------------- | ------------ | ------------------------------------------------------------------------------------------- |
| Формат изображения | JPEG, PNG, WebP | JPEG | JPEG для цветных комиксов, PNG для чёрно-белой манги без потерь, WebP для лучшего сжатия. |
| Качество изображения | 50–100% | 85% | Степень сжатия JPEG/WebP. Для PNG скрыт (всегда без потерь). |
| Масштаб | 1.0x–4.0x | 2.0x | Больший масштаб даёт более чёткие изображения для экранов с высоким разрешением. |
| Оттенки серого | Вкл/Выкл | Выкл | Преобразует страницы в оттенки серого. Уменьшает размер файла для чёрно-белого содержимого. |
| Режим манги | Вкл/Выкл | Выкл | Задаёт в метаданных направление чтения справа налево. |
| Включить метаданные | Вкл/Выкл | Вкл | Встраивает ComicInfo.xml, metadata.opf и ComicBookInfo JSON. |
## Поля метаданных
Когда метаданные включены, можно заполнить:
- **Название**: определяется автоматически по имени PDF-файла.
- **Серия**: название серии (например, "Naruto").
- **Номер (#)**: номер выпуска в серии.
- **Том**: номер тома.
- **Автор(ы)**: имя автора или создателя.
- **Издатель**: издательство.
- **Теги / Жанр**: теги через запятую (например, "Action, Adventure").
- **Год издания**: год публикации (1900–2100).
- **Рейтинг**: оценка сообщества от 0 до 5.
## Совместимость метаданных
Инструмент записывает метаданные в трёх форматах, чтобы любая программа чтения могла их найти:
| Формат | Расположение | Поддерживается в |
| ------------------ | -------------------- | ------------------------------------------- |
| ComicInfo.xml | Файл внутри ZIP | Komga, Kavita, CDisplayEx, Mylar, ComicRack |
| metadata.opf | Файл внутри ZIP | Calibre |
| ComicBookInfo JSON | Поле комментария ZIP | Calibre (запасной вариант) |
## Формат результата
- `filename.cbz`: ZIP-архив с пронумерованными изображениями страниц и файлами метаданных.
Изображения страниц называются с числами с ведущими нулями (`01.jpg`, `02.jpg` и так далее), чтобы программы чтения показывали их в правильном порядке.
## Сценарии использования
- Конвертация PDF с мангой и комиксами для программ чтения комиксов.
- Создание цифровой библиотеки комиксов в Komga, Kavita или Calibre.
- Преобразование отсканированных комиксов в удобный для чтения формат.
- Обмен комиксами в формате, который сохраняет направление чтения и метаданные.
## Советы
- Используйте **JPEG** для цветных комиксов и **PNG** для чёрно-белой манги: PNG очень эффективно сжимает чёрно-белое содержимое.
- Включите **Конвертировать в оттенки серого** для манги, чтобы заметно уменьшить размер файла.
- Заполните поля **Серия** и **Номер (#)**, чтобы менеджеры библиотек (Komga, Calibre) могли автоматически упорядочить вашу коллекцию.
- **WebP** даёт лучшее сжатие, но старые программы чтения комиксов могут его не поддерживать.
## Связанные инструменты
- [PDF в JPG](./pdf-to-jpg)
- [PDF в PNG](./pdf-to-png)
- [PDF в TIFF](./pdf-to-tiff)
- [Извлечение изображений](./extract-images)
+44
View File
@@ -0,0 +1,44 @@
---
title: PDF в CSV
description: Извлекайте таблицы из PDF-документов и экспортируйте их в один файл CSV. Работает с многостраничными PDF и автоматически находит таблицы.
---
# PDF в CSV
Извлекает таблицы из PDF и экспортирует их в файл CSV. Инструмент просматривает каждую страницу с помощью механизма поиска таблиц PyMuPDF и записывает все найденные строки в один файл с разделителями-запятыми.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Нажмите **Конвертировать в CSV**, чтобы начать извлечение таблиц.
3. Инструмент просматривает каждую страницу и автоматически находит таблицы.
4. Скачивается файл `.csv` со всеми извлечёнными данными таблиц.
Таблицы с разных страниц разделяются в результате пустыми строками. Ячейки с запятыми, кавычками или переводами строк корректно экранируются по RFC 4180.
## Параметры
Настраиваемых параметров нет. Все найденные в документе таблицы извлекаются и объединяются в один CSV.
## Формат результата
- Один файл `filename.csv` со всеми найденными таблицами.
## Сценарии использования
- Перенос финансовых данных из банковских выписок и счетов в PDF в электронную таблицу.
- Извлечение таблиц цен из предложений поставщиков для сравнения.
- Преобразование табличных данных исследований из PDF в формат, удобный для анализа.
- Перенос данных из старых PDF-отчётов в базы данных.
## Советы
- Если таблицы не найдены, инструмент покажет сообщение "Таблицы не найдены". Обычно это значит, что в PDF текст выглядит как таблица, но не является настоящей таблицей.
- Для более тонкого контроля над отдельными таблицами используйте [Извлечение таблиц из PDF](./extract-tables), где можно выбрать формат CSV, JSON или Markdown.
- Если данные нужны в Excel с отдельным листом для каждой таблицы, используйте [PDF в Excel](./pdf-to-excel).
## Связанные инструменты
- [PDF в Excel](./pdf-to-excel)
- [Извлечение таблиц из PDF](./extract-tables)
- [PDF в текст](./pdf-to-text)
+44
View File
@@ -0,0 +1,44 @@
---
title: PDF в Excel
description: Извлекайте таблицы из PDF-документов в электронную таблицу Excel. Каждая таблица попадает на отдельный лист с указанием страницы.
---
# PDF в Excel
Извлекает таблицы из PDF и сохраняет их в электронную таблицу Excel (`.xlsx`). Каждая найденная таблица размещается на отдельном листе с номером таблицы и исходной страницей в названии. Для поиска таблиц используется PyMuPDF, для создания файла Excel библиотека SheetJS.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Нажмите **Конвертировать в Excel**, чтобы начать извлечение таблиц.
3. Инструмент просматривает каждую страницу в поисках таблиц и собирает книгу Excel.
4. Скачивается файл `.xlsx`, где каждой таблице соответствует свой лист.
## Параметры
Настраиваемых параметров нет. Все найденные таблицы извлекаются автоматически.
## Формат результата
- Один файл `filename.xlsx`.
- **Одна таблица**: один лист с названием "Table".
- **Несколько таблиц**: листы с названиями "Table 1 (Page 3)", "Table 2 (Page 5)" и так далее. Названия листов обрезаются до 31 символа (ограничение Excel).
## Сценарии использования
- Преобразование финансовых отчётов из PDF в редактируемые таблицы для дальнейшего анализа.
- Извлечение таблиц складских остатков и заказов из PDF поставщиков.
- Перенос структурированных данных из PDF-форм и каталогов в Excel для сортировки и фильтрации.
- Архивирование табличных данных из PDF в формате, с которым могут работать коллеги без технической подготовки.
## Советы
- Если инструмент сообщает "Таблицы не найдены", скорее всего, в PDF свободная вёрстка текста, а не структурированные таблицы. Попробуйте [PDF в текст](./pdf-to-text), чтобы получить исходное содержимое.
- Для более простого плоского формата используйте [PDF в CSV](./pdf-to-csv). Для скачивания отдельных таблиц в разных форматах используйте [Извлечение таблиц из PDF](./extract-tables).
- По названиям листов можно понять, с какой страницы взята каждая таблица.
## Связанные инструменты
- [PDF в CSV](./pdf-to-csv)
- [Извлечение таблиц из PDF](./extract-tables)
- [PDF в текст](./pdf-to-text)
+42
View File
@@ -0,0 +1,42 @@
---
title: PDF в оттенки серого
description: Преобразуйте цветной PDF в версию в градациях серого (чёрно-белую). Создаёт новый PDF, в котором со всех страниц убран цвет.
---
# PDF в оттенки серого
Преобразует цветной PDF в версию в градациях серого. Каждая страница рендерится, обесцвечивается и встраивается как изображение JPEG в новый PDF. Размеры страниц остаются прежними.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Нажмите **Конвертировать в оттенки серого**, чтобы обработать файл.
3. Скачивается новый `greyscale.pdf`, в котором все страницы стали чёрно-белыми.
Внутри каждая страница рендерится в масштабе 2x, данные пикселей проходят через фильтр градаций серого, затем кодируются в JPEG с качеством 90% и помещаются в новый PDF-документ.
## Параметры
Настраиваемых параметров нет. Преобразование использует стандартную формулу яркости, а качество JPEG зафиксировано на 90%.
## Формат результата
- Один файл `greyscale.pdf`, в котором все страницы представлены изображениями JPEG в градациях серого.
## Сценарии использования
- Подготовка документов к чёрно-белой печати, чтобы сэкономить на цветных чернилах.
- Соблюдение требований к подаче юридических и государственных документов, где нужны градации серого.
- Уменьшение размера PDF с большим количеством цвета (изображения JPEG в градациях серого меньше цветных).
- Единый визуальный стиль для документов, где смешаны цветные и чёрно-белые страницы.
## Советы
- Поскольку каждая страница растеризуется и встраивается как JPEG, результат состоит из изображений. Текст исходного PDF перестанет выделяться и находиться поиском. Если после этого нужен текстовый слой, пропустите результат через инструмент OCR.
- Для более тонкой настройки цвета (яркость, контраст, насыщенность) используйте инструмент "Настройка цвета" или узел Greyscale в [Конструктор PDF-процессов](./pdf-workflow).
## Связанные инструменты
- [PDF в JPG](./pdf-to-jpg)
- [PDF в PNG](./pdf-to-png)
- [Конструктор PDF-процессов](./pdf-workflow)
+46
View File
@@ -0,0 +1,46 @@
---
title: PDF в JPG
description: Конвертируйте страницы PDF в изображения JPG с настройкой качества. Одностраничные PDF скачиваются сразу, многостраничные экспортируются в ZIP.
---
# PDF в JPG
Преобразует каждую страницу PDF в изображение JPG. Одностраничные документы скачиваются как отдельный файл `.jpg`. Многостраничные PDF дают ZIP-архив с одним JPG на страницу.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл. Инструмент покажет имя файла, размер и число страниц.
2. Ползунком **Качество изображения** настройте степень сжатия JPG.
3. Нажмите **Конвертировать**, чтобы начать обработку.
4. Результат скачается автоматически: один JPG для одностраничного PDF или ZIP-файл для многостраничного.
## Параметры
- **Качество изображения**: ползунок от 0% до 100% (по умолчанию 90%). Большие значения дают более чёткие изображения и большие файлы. Меньшие значения сжимают сильнее.
Внутри страницы рендерятся в масштабе 2x, поэтому разрешение результата вдвое больше размеров страницы PDF. Стандартная страница формата Letter даёт изображение примерно 1 224 x 1 584 пикселей.
## Формат результата
- **Одна страница**: `filename.jpg`
- **Несколько страниц**: `filename_jpgs.zip` с файлами `page_1.jpg`, `page_2.jpg` и так далее.
## Сценарии использования
- Создание миниатюр для системы управления документами.
- Отправка страницы отчёта в чат или письмо, где PDF не поддерживается.
- Получение изображений из PDF-схем и иллюстраций.
- Архивирование отсканированных документов в виде отдельных изображений.
## Советы
- Для вывода без потерь используйте [PDF в PNG](./pdf-to-png).
- Качество 80-90% даёт хороший баланс между размером файла и качеством изображения.
- Если для каждой страницы нужен определённый формат, посмотрите [Конструктор PDF-процессов](./pdf-workflow) с узлом вывода «PDF в изображения».
## Связанные инструменты
- [PDF в PNG](./pdf-to-png)
- [PDF в WebP](./pdf-to-webp)
- [PDF в BMP](./pdf-to-bmp)
- [PDF в TIFF](./pdf-to-tiff)
+45
View File
@@ -0,0 +1,45 @@
---
title: PDF в JSON
description: Конвертируйте PDF-файлы в структурированный JSON с помощью CPDF. Экспортирует внутреннюю структуру PDF как машиночитаемые данные JSON.
---
# PDF в JSON
Преобразует один или несколько PDF-файлов в формат JSON. Инструмент использует CPDF (Coherent PDF), чтобы сериализовать внутреннюю структуру каждого PDF в машиночитаемое представление JSON. Результат всегда выдаётся в виде ZIP-архива.
## Как это работает
1. Выберите один или несколько PDF-файлов через окно выбора файлов.
2. Нажмите **Конвертировать в JSON**, чтобы начать обработку. Конвертация выполняется в фоновом веб-воркере.
3. Скачивается ZIP-архив с одним файлом JSON на каждый исходный PDF.
Строка состояния показывает ход конвертации и создания ZIP.
## Параметры
Настраиваемых параметров нет. Каждый PDF преобразуется в полное представление JSON.
## Формат результата
- Файл `pdfs-to-json.zip` с файлом `filename.json` для каждого исходного PDF.
JSON отражает внутреннюю структуру объектов PDF, включая деревья страниц, ссылки на шрифты, метаданные и потоки содержимого.
## Сценарии использования
- Изучение внутренней структуры PDF для отладки или проверки.
- Программное извлечение структурированных метаданных и свойств страниц.
- Передача данных о структуре PDF в собственные конвейеры обработки.
- Аудит PDF-документов на соответствие требованиям через анализ деревьев объектов.
## Советы
- Инструмент выводит необработанную структуру объектов PDF, а не извлечённый текст. Если нужен текст страниц в JSON, используйте [Подготовка PDF для ИИ](./prepare-pdf-for-ai).
- Для простого извлечения текста удобнее [PDF в текст](./pdf-to-text).
- Большие PDF со сложной структурой дают очень большие файлы JSON.
## Связанные инструменты
- [PDF в текст](./pdf-to-text)
- [Подготовка PDF для ИИ](./prepare-pdf-for-ai)
- [Извлечение таблиц из PDF](./extract-tables)
+43
View File
@@ -0,0 +1,43 @@
---
title: PDF в Markdown
description: Конвертируйте PDF-документы в формат Markdown с возможным извлечением изображений. Поддерживает пакетную конвертацию нескольких файлов.
---
# PDF в Markdown
Преобразует PDF-файлы в формат Markdown (`.md`), сохраняя заголовки, абзацы, списки и базовое форматирование. При желании извлекает и включает встроенные изображения. Поддерживает одиночную и пакетную конвертацию. Работает на PyMuPDF.
## Как это работает
1. Загрузите один или несколько PDF, нажав на область загрузки или перетащив файлы.
2. При желании включите **Включить изображения как base64**, чтобы встроить извлечённые изображения в Markdown.
3. Нажмите **Конвертировать в Markdown**, чтобы начать обработку.
4. Один файл скачивается как `filename.md`. Несколько файлов дают `markdown-files.zip`.
## Параметры
- **Включить изображения как base64**: если включено, встроенные изображения из PDF извлекаются и подключаются в Markdown. Если выключено, конвертируется только текст.
## Формат результата
- **Один файл**: `filename.md`
- **Несколько файлов**: `markdown-files.zip` с одним `.md` на каждый исходный PDF.
## Сценарии использования
- Преобразование PDF-документации в Markdown для генераторов статических сайтов, таких как VitePress, Hugo или Jekyll.
- Превращение научных статей из PDF в редактируемый Markdown для приложений заметок вроде Obsidian.
- Перенос старых баз знаний из PDF в текстовый формат, удобный для Git.
- Извлечение структурированного содержимого из PDF-книг для переверстки.
## Советы
- Параметр «Включить изображения как base64» полезен, когда в PDF есть схемы и рисунки, важные для содержания. Для текстовых документов отключите его, чтобы результат оставался чистым.
- Сложная вёрстка с боковыми колонками, сносками или многоколоночным текстом может дать неидеальный Markdown. Проверьте и поправьте результат при необходимости.
- Для чистого текста без форматирования используйте [PDF в текст](./pdf-to-text).
## Связанные инструменты
- [PDF в текст](./pdf-to-text)
- [PDF в Word](./pdf-to-word)
- [Подготовка PDF для ИИ](./prepare-pdf-for-ai)
+50
View File
@@ -0,0 +1,50 @@
---
title: PDF в PDF/A
description: Преобразуйте обычные PDF в формат PDF/A для долгосрочного архивирования. Поддерживает уровни соответствия PDF/A-1b, PDF/A-2b и PDF/A-3b.
---
# PDF в PDF/A
PDF/A - стандартизированное ISO подмножество PDF, созданное для долговременного хранения цифровых документов. Инструмент преобразует обычные PDF в документы, соответствующие PDF/A, с помощью Ghostscript, который работает прямо в вашем браузере.
## Как это работает
1. Загрузите один или несколько PDF-файлов.
2. Выберите **Версия PDF/A** в выпадающем списке.
3. При необходимости включите **Предварительно свести PDF** для сложных файлов, которые не конвертируются обычным способом.
4. Нажмите **Конвертировать в PDF/A**. Несколько файлов дают ZIP-архив.
## Версии PDF/A
| Версия | Ограничения | Лучше всего подходит для |
| ------------ | --------------------------------------------- | --------------------------------------------------------- |
| **PDF/A-1b** | Самая строгая. Без прозрачности и слоёв. | Максимальная совместимость со старыми архивными системами |
| **PDF/A-2b** | Допускает прозрачность и JPEG2000. | Универсальное архивирование (рекомендуется) |
| **PDF/A-3b** | Допускает встроенные вложения любого формата. | Архивирование документов с исходными файлами данных |
PDF/A-2b выбран по умолчанию и подходит для подавляющего большинства задач архивирования.
## Параметр Pre-flatten
Некоторые PDF содержат особенности, мешающие корректному преобразованию в PDF/A: необычные кодировки шрифтов, сложные стеки прозрачности или повреждённую внутреннюю структуру. Параметр **Предварительно свести PDF** растеризует PDF с разрешением 300 DPI перед конвертацией. Это гарантирует соответствие стандарту, но делает текст невыделяемым. Используйте его как запасной вариант, если обычная конвертация завершается ошибками.
Для Pre-flatten нужен движок PyMuPDF WASM.
## Сценарии использования
- Выполнение требований государственных и юридических архивов (во многих юрисдикциях PDF/A обязателен для судебных документов)
- Подача документов в институциональные репозитории и электронные библиотеки
- Сохранение деловых документов, когда исходной программы через десять лет может не существовать
- Подготовка счетов для стандартов электронного инвойсинга, требующих PDF/A-3b с XML-вложениями
## Советы
- Сначала попробуйте конвертацию без Pre-flatten. Включайте его, только если получили ошибку.
- PDF/A встраивает все шрифты, поэтому итоговые файлы часто больше исходных.
- Если в вашем процессе нужно строгое соответствие, проверьте результат в специальном валидаторе PDF/A.
## Связанные инструменты
- [Сжатие PDF](./compress-pdf): уменьшите размер файла после конвертации
- [Сведение документа](./flatten-pdf): сведите формы перед преобразованием в PDF/A
- [Удаление метаданных](./remove-metadata): удалите метаданные перед архивированием
+42
View File
@@ -0,0 +1,42 @@
---
title: PDF в PNG
description: Конвертируйте страницы PDF в изображения PNG без потерь с настройкой масштаба. Подходит для качественных скриншотов и прозрачных фонов.
---
# PDF в PNG
Преобразует каждую страницу PDF в изображение PNG. PNG использует сжатие без потерь, поэтому результат сохраняет все детали исходной страницы. Одностраничные PDF скачиваются как файл `.png`, многостраничные дают ZIP.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Ползунком **Масштаб изображения** задайте разрешение результата.
3. Нажмите **Конвертировать**, чтобы начать обработку.
4. Автоматически скачается один PNG или ZIP-архив.
## Параметры
- **Масштаб изображения**: от 1.0x до 3.0x (по умолчанию 2.0x). При 2.0x стандартная страница формата Letter рендерится примерно в 1 224 x 1 584 пикселей. Большие значения дают более крупные и чёткие изображения ценой размера файла и времени обработки.
## Формат результата
- **Одна страница**: `filename.png`
- **Несколько страниц**: `filename_pngs.zip` с файлами `page_1.png`, `page_2.png` и так далее.
## Сценарии использования
- Получение точных скриншотов страниц PDF для презентаций.
- Извлечение графиков и схем, которым нужны чёткие края без артефактов сжатия.
- Подготовка ресурсов для веб-дизайна из PDF-макетов.
- Создание изображений страниц без потерь для предварительной обработки перед OCR.
## Советы
- Файлы PNG заметно больше JPG. Если размер важнее идеального качества, используйте [PDF в JPG](./pdf-to-jpg) или [PDF в WebP](./pdf-to-webp).
- При масштабе 1.0x результат соответствует исходному разрешению PDF. Для экспорта в качестве, пригодном для печати, поставьте 3.0x.
## Связанные инструменты
- [PDF в JPG](./pdf-to-jpg)
- [PDF в WebP](./pdf-to-webp)
- [PDF в SVG](./pdf-to-svg)
+43
View File
@@ -0,0 +1,43 @@
---
title: PDF в SVG
description: Конвертируйте страницы PDF в масштабируемую векторную графику SVG. Сохраняет текст и фигуры как векторные контуры для неограниченного масштабирования.
---
# PDF в SVG
Преобразует каждую страницу PDF в файл SVG (Scalable Vector Graphics). В отличие от растровых форматов, SVG сохраняет векторные контуры, текст и фигуры, поэтому результат масштабируется до любого размера без пикселизации. Работает на PyMuPDF.
## Как это работает
1. Загрузите один или несколько PDF, нажав на область загрузки или перетащив файлы. Можно добавить несколько файлов и управлять ими по отдельности.
2. Нажмите **Конвертировать в SVG**, чтобы обработать все загруженные файлы.
3. Конвертация одного файла с одной страницей скачивается как отдельный `.svg`. Во всех остальных случаях скачивается ZIP-архив.
## Параметры
Настраиваемых параметров нет. Каждая страница преобразуется в SVG встроенным векторным экспортом PyMuPDF.
## Формат результата
- **Один файл, одна страница**: `filename.svg`
- **Один файл, несколько страниц**: `filename_svg.zip` с файлами `page_1.svg`, `page_2.svg` и так далее.
- **Несколько файлов**: `pdf_to_svg.zip` с файлами, разложенными по именам исходных документов.
## Сценарии использования
- Извлечение векторных схем, графиков и иллюстраций из PDF-отчётов для веб-страниц.
- Редактирование содержимого страниц PDF в векторном редакторе, таком как Inkscape или Illustrator.
- Встраивание масштабируемых превью страниц в адаптивные веб-приложения.
- Извлечение логотипов и графики из PDF-брошюр с сохранением чётких краёв.
## Советы
- SVG лучше всего работает с PDF, содержащими векторное содержимое. Отсканированные документы и PDF с множеством изображений дают крупные файлы SVG со встроенными растровыми данными.
- Для растрового результата из PDF с большим количеством изображений используйте [PDF в PNG](./pdf-to-png) или [PDF в JPG](./pdf-to-jpg).
- Инструмент поддерживает пакетную конвертацию: загрузите несколько PDF сразу, чтобы преобразовать их за один запуск.
## Связанные инструменты
- [PDF в PNG](./pdf-to-png)
- [PDF в JPG](./pdf-to-jpg)
- [PDF в Markdown](./pdf-to-markdown)
+43
View File
@@ -0,0 +1,43 @@
---
title: PDF в текст
description: Извлекайте простой текст из PDF-файлов. Поддерживает пакетное извлечение из нескольких PDF с результатом в файлах TXT.
---
# PDF в текст
Извлекает весь текст из PDF-файлов и сохраняет его в обычные файлы `.txt`. Поддерживает пакетную обработку: загрузите несколько PDF и получите текст каждого за одну операцию. Работает на PyMuPDF.
## Как это работает
1. Загрузите один или несколько PDF, нажав на область загрузки или перетащив файлы. Управляйте списком кнопками «Добавить еще файлы» и «Очистить файлы».
2. Нажмите **Извлечь текст**, чтобы начать обработку.
3. Один файл скачивается как `filename.txt`. Несколько файлов дают архив `pdf-to-text.zip`.
## Параметры
Настраиваемых параметров нет. Весь текст извлекается со всех страниц в порядке чтения.
## Формат результата
- **Один файл**: `filename.txt`
- **Несколько файлов**: `pdf-to-text.zip` с одним `.txt` на каждый исходный PDF.
## Сценарии использования
- Извлечение основного текста из PDF-отчётов для индексации полнотекстового поиска.
- Преобразование PDF-книг и статей в простой текст для чтения на устройствах с электронными чернилами.
- Получение текста из договоров и юридических документов для анализа по ключевым словам.
- Удаление форматирования из PDF, чтобы получить чистый текст для скриптов обработки данных.
- Подготовка текстового корпуса из PDF-архивов для обработки естественного языка.
## Советы
- Отсканированные PDF (только изображения) дадут пустые текстовые файлы, потому что текстового слоя для извлечения нет. Сначала пропустите отсканированные документы через OCR.
- Результат сохраняет порядок чтения, определённый PyMuPDF: как правило, слева направо и сверху вниз. При многоколоночной вёрстке строки могут перемешиваться.
- Для структурированного результата с заголовками и форматированием попробуйте [PDF в Markdown](./pdf-to-markdown). Для структурированного JSON, готового для ИИ, используйте [Подготовка PDF для ИИ](./prepare-pdf-for-ai).
## Связанные инструменты
- [PDF в Markdown](./pdf-to-markdown)
- [Подготовка PDF для ИИ](./prepare-pdf-for-ai)
- [PDF в Word](./pdf-to-word)
+43
View File
@@ -0,0 +1,43 @@
---
title: PDF в TIFF
description: Конвертируйте страницы PDF в изображения TIFF, которые широко используются в печати, факсах и архивах. При ошибке кодирования сохраняет PNG.
---
# PDF в TIFF
Преобразует каждую страницу PDF в изображение TIFF. TIFF - стандартный формат для полиграфии, факсимильных систем и архивного хранения документов. Для кодирования TIFF инструмент использует сжатие PackBits, а при ошибке кодирования страницы сохраняет её как PNG.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Нажмите **Конвертировать**, чтобы обработать файл.
3. Автоматически скачается один файл TIFF или ZIP-архив.
## Параметры
Настраиваемых параметров нет. Страницы рендерятся в фиксированном масштабе 2x.
## Формат результата
- **Одна страница**: `filename.tiff`
- **Несколько страниц**: `filename_tiffs.zip` с файлами `page_1.tiff`, `page_2.tiff` и так далее.
Если кодирование TIFF для конкретной страницы не удалось (из-за проблем со сжатием), эта страница сохраняется как файл `.png`. В таком случае в ZIP будет смесь файлов TIFF и PNG.
## Сценарии использования
- Подача документов в государственные органы и юридические системы, требующие формат TIFF.
- Подготовка страниц для отправки по факсу через цифровые факс-сервисы.
- Архивирование отсканированных документов в широко поддерживаемом формате без потерь.
- Передача страниц в корпоративные системы управления документами.
## Советы
- Файлы TIFF большие. Если качество без потерь нужно только для веба или экрана, лучше подойдёт [PDF в PNG](./pdf-to-png).
- Проверьте содержимое ZIP, если для некоторых страниц понадобился запасной PNG: возможно, их стоит сконвертировать отдельно.
## Связанные инструменты
- [PDF в PNG](./pdf-to-png)
- [PDF в BMP](./pdf-to-bmp)
- [PDF в JPG](./pdf-to-jpg)
+43
View File
@@ -0,0 +1,43 @@
---
title: PDF в WebP
description: Конвертируйте страницы PDF в изображения WebP с настройкой качества. Файлы меньше, чем у JPG, при сопоставимом визуальном качестве.
---
# PDF в WebP
Преобразует каждую страницу PDF в изображение WebP. WebP обычно даёт файлы на 25-35% меньше, чем JPG, при том же воспринимаемом качестве, что делает его хорошим выбором для веба.
## Как это работает
1. Загрузите PDF, нажав на область загрузки или перетащив файл.
2. Настройте ползунок **Качество изображения**.
3. Нажмите **Конвертировать**, чтобы обработать файл.
4. Автоматически скачается один файл `.webp` или ZIP-архив.
## Параметры
- **Качество изображения**: ползунок от 0% до 100% (по умолчанию 85%). Управляет уровнем сжатия с потерями. Большие значения сохраняют больше деталей.
Внутри страницы рендерятся в масштабе 2x, поэтому размер изображений примерно вдвое больше исходных размеров PDF.
## Формат результата
- **Одна страница**: `filename.webp`
- **Несколько страниц**: `filename_webps.zip` с файлами `page_1.webp`, `page_2.webp` и так далее.
## Сценарии использования
- Подготовка превью страниц для сайтов, где важен трафик.
- Создание лёгких изображений листовок и брошюр для соцсетей.
- Пакетная конвертация многостраничных документов в набор изображений, оптимизированных для веба.
## Советы
- WebP поддерживается во всех современных браузерах. Для совместимости со старыми используйте [PDF в JPG](./pdf-to-jpg).
- Качество 80-85% обычно неотличимо от оригинала на экране, а размер файлов остаётся небольшим.
## Связанные инструменты
- [PDF в JPG](./pdf-to-jpg)
- [PDF в PNG](./pdf-to-png)
- [PDF в BMP](./pdf-to-bmp)
+42
View File
@@ -0,0 +1,42 @@
---
title: PDF в Word
description: Конвертируйте PDF-файлы в редактируемые документы Word (DOCX). Поддерживает пакетную конвертацию нескольких PDF сразу.
---
# PDF в Word
Преобразует PDF-файлы в редактируемые документы Word (`.docx`). Инструмент использует PyMuPDF, чтобы восстановить содержимое документа, сохраняя текст, базовое форматирование и разметку. Поддерживает одиночную и пакетную конвертацию.
## Как это работает
1. Загрузите один или несколько PDF, нажав на область загрузки или перетащив файлы. Можно добавить ещё файлы или удалить отдельные из списка.
2. Нажмите **Конвертировать в DOCX**, чтобы начать обработку.
3. Один файл скачивается как `filename.docx`. Несколько файлов упаковываются в `converted-documents.zip`.
## Параметры
Настраиваемых параметров нет. Каждый PDF преобразуется в DOCX встроенным движком конвертации PyMuPDF.
## Формат результата
- **Один файл**: `filename.docx`
- **Несколько файлов**: `converted-documents.zip` с одним `.docx` на каждый исходный PDF.
## Сценарии использования
- Редактирование текста в полученном PDF, который нужно изменить.
- Преобразование архивных PDF-отчётов в формат, который коллеги могут править в Microsoft Word или Google Docs.
- Перенос содержимого PDF-договоров и предложений в Word для правок.
- Перенос старой PDF-документации в редактируемый формат.
## Советы
- Сложная вёрстка с многоколоночным текстом, встроенными формами или большим количеством графики может конвертироваться неидеально. Проверьте результат и поправьте форматирование в текстовом редакторе.
- Отсканированные PDF (только изображения) дадут пустые или почти пустые файлы DOCX. Сначала пропустите их через OCR, чтобы добавить текстовый слой.
- Пакетный режим удобен для конвертации целых папок с PDF: загрузите всё сразу.
## Связанные инструменты
- [PDF в текст](./pdf-to-text)
- [PDF в Markdown](./pdf-to-markdown)
- [Конструктор PDF-процессов](./pdf-workflow)
+41
View File
@@ -0,0 +1,41 @@
---
title: PDF в ZIP
description: Упакуйте несколько PDF-файлов в один ZIP-архив для удобной отправки и хранения.
---
# PDF в ZIP
Соберите несколько PDF-файлов в один ZIP-архив. Это простой инструмент для упаковки: сами PDF не конвертируются, не сжимаются и не изменяются.
## Как это работает
1. Загрузите несколько PDF-файлов в область загрузки.
2. Проверьте список файлов. Удалите те, которые не нужны.
3. Нажмите кнопку обработки.
4. Сразу скачается ZIP-архив со всеми загруженными PDF.
## Возможности
- Принимает любое количество PDF-файлов
- Удаление отдельных файлов до создания архива
- Сохраняет исходные имена файлов внутри ZIP
- Содержимое PDF не изменяется: файлы упаковываются как есть
- Показывает имя и размер каждого загруженного PDF
## Сценарии использования
- Упаковка набора счетов или чеков для отправки по почте
- Упаковка результатов проекта (нескольких PDF-отчётов) для передачи
- Создание одной ссылки для скачивания набора форм или шаблонов
- Архивирование пакета документов в один сжатый файл
## Советы
- В ZIP используются исходные имена PDF-файлов. Если у файлов одинаковые имена, переименуйте их перед загрузкой, чтобы избежать конфликтов.
- Инструмент не сжимает сами PDF. Чтобы уменьшить размер, сначала пропустите их через "Сжатие PDF", затем упакуйте этим инструментом.
## Связанные инструменты
- [Объединение PDF](./merge-pdf)
- [Разделение PDF](./split-pdf)
- [Сжатие PDF](./compress-pdf)
+95
View File
@@ -0,0 +1,95 @@
---
title: Конструктор PDF-процессов
description: 'Визуально создавайте собственные конвейеры обработки PDF, соединяя узлы на холсте. Объединяйте в цепочку операции: объединение, сжатие, водяные знаки и экспорт.'
---
# Конструктор PDF-процессов
Конструктор процессов позволяет объединить несколько операций с PDF в один автоматизированный конвейер. Вместо запуска инструментов по одному вы собираете визуальный граф из узлов (ввод, обработка, вывод) и выполняете всё одним нажатием. Ваши файлы не покидают браузер.
## Как это работает
Интерфейс состоит из трёх панелей: **набор узлов** слева, **холст** в центре и **панель настроек** справа, которая появляется при выборе узла.
1. **Добавляйте узлы**, нажимая на них в левой боковой панели или перетаскивая прямо на холст. Для фильтрации по названию используйте строку поиска вверху набора узлов.
2. **Соединяйте узлы**, перетаскивая от выходного разъёма (внизу узла) к входному разъёму (вверху другого узла). Соединения идут сверху вниз.
3. **Настраивайте параметры**: нажмите на узел, чтобы открыть его панель настроек справа. У каждого типа узла свои параметры (диапазоны страниц, ползунки качества, пароли и так далее).
4. **Запустите процесс** кнопкой **Запустить** на панели инструментов. Движок выполняет узлы в топологическом порядке, обрабатывая каждый по очереди. Строка состояния внизу показывает ход выполнения.
5. **Скачайте результат**: конечный узел Скачать сохраняет итоговый PDF (или ZIP, если создано несколько файлов).
## Категории узлов
Узлы разделены на шесть категорий, каждая обозначена своим цветом на холсте:
- **Ввод** (синий): PDF-вход, Ввод изображений, Word/Excel/PowerPoint в PDF и более 15 других конвертеров форматов, которые подают файлы в конвейер.
- **Редактирование и добавление примечаний** (индиго): Обрезка PDF, PDF в оттенки серого, Инверсия цвета, Добавление водяных знаков, Нумерация страниц, Колонтитулы, Эффект сканера, Настройка цвета, Цвет фона, Удаление пустых страниц, Удаление аннотаций.
- **Организация и управление** (фиолетовый): Объединение PDF, Разделение PDF, Извлечение страниц, Поворот PDF, Удаление страниц, Обращение порядка страниц, Добавление пустой страницы, Разделение страниц, N-Up PDF, Редактор размера страниц, Объединить на одну страницу, PDF-буклет, Постеризация документа, Редактирование метаданных, Оглавление, Распознавание текста в PDF.
- **Оптимизация и восстановление** (янтарный): Сжатие PDF, Растеризация документа, Линеаризация документа, Выпрямление PDF, PDF в PDF/A, Шрифты в кривые, Восстановление документа.
- **Защита PDF** (розовый): Зашифровать, Расшифровать, Санирование документа, Сведение документа, Цифровая подпись, Вымарать.
- **Вывод** (бирюзовый): Скачать (автоматически определяет один PDF или ZIP), PDF в изображения, PDF в текст, PDF в DOCX, PDF в XLSX, PDF в CSV, PDF в SVG, PDF в Markdown, Извлечение изображений.
## Сохранение и загрузка процессов
На панели инструментов доступны четыре варианта сохранения:
- **Сохранить**: сохраняет текущий процесс как именованный шаблон в локальном хранилище браузера. Можно сохранить несколько шаблонов.
- **Загрузить**: открывает окно со списком всех сохранённых шаблонов. Нажмите «Загрузить», чтобы восстановить шаблон, или удалите ненужные.
- **Экспорт**: скачивает процесс в виде файла `.json`, которым можно поделиться или сохранить резервную копию.
- **Импорт**: загружает файл процесса `.json` с диска, восстанавливая все узлы, их положение и соединения.
Шаблоны сохраняются между сеансами в локальном хранилище. Экспортированные файлы JSON переносимы между браузерами и компьютерами.
## Модель выполнения
Движок строит граф зависимостей по вашим соединениям и выполняет узлы в топологическом порядке. Если какой-либо узел завершается ошибкой, выполнение останавливается, а узел с ошибкой отмечается красным. Несколько правил, которые нужно учитывать:
- В каждом процессе должен быть минимум один узел **Ввод** и один узел **Вывод**.
- Движок обнаруживает циклические зависимости и блокирует выполнение с ошибкой.
- Узел **Зашифровать** должен быть последним шагом обработки перед узлом вывода. Если поставить его раньше, появится предупреждение при проверке, потому что следующие узлы не могут работать с зашифрованными данными.
- Для PDF, защищённых паролем, во время выполнения запрашивается пароль.
- Поддерживаются входы с несколькими PDF: узел Объединение PDF может их объединить, а узлы пакетной обработки обработают каждый PDF отдельно.
## Типы разъёмов
Соединения используют типизированные разъёмы, чтобы не допустить неверных связей:
- **PDF** (индиго): один PDF-документ.
- **MultiPDF** (янтарный): несколько PDF-документов, собранных вместе.
- **Image** (зелёный): изображение (blob).
## Параметры
У каждого узла есть собственная конфигурация, доступная через правую панель настроек. Типичные примеры:
- **Диапазоны страниц** в узлах Разделение PDF, Извлечение страниц, Удаление страниц
- **Ползунки качества** в узлах вывода с преобразованием в изображения
- **Поля пароля** в узлах Зашифровать и Расшифровать
- **Текстовые поля** в узлах Добавление водяных знаков, Колонтитулы, Редактирование метаданных
- **Углы поворота** в узле Поворот PDF
- **Уровень сжатия** в узле Сжатие PDF
- **Выбор языка OCR** в узле Распознавание текста в PDF
## Сценарии использования
- **Конвейер обработки счетов**: PDF-вход -> Распознавание текста в PDF -> Извлечение таблиц из PDF -> Скачать в формате CSV.
- **Стандартизация отчётов**: Word в PDF -> Редактор размера страниц -> Нумерация страниц -> Добавление водяных знаков -> Сжатие PDF -> Скачать.
- **Подготовка к архивированию**: PDF-вход -> Восстановление документа -> Сведение документа -> Санирование документа -> PDF в PDF/A -> Скачать.
- **Пакетное извлечение изображений**: PDF-вход (несколько файлов) -> Извлечение изображений -> Скачать ZIP.
- **Буклеты, готовые к печати**: PDF-вход -> PDF-буклет -> Обрезка PDF -> Сжатие PDF -> Скачать.
- **Защищённая рассылка**: PDF-вход -> Вымарать -> Удаление аннотаций -> Зашифровать -> Скачать.
## Советы
- Клавиши **Delete** или **Backspace** удаляют выбранный узел с холста.
- Нажмите кнопку **X** в строке состояния узла, чтобы удалить его напрямую.
- Перемещайте холст, нажимая и перетаскивая пустое место. Во время перемещения курсор меняется на значок руки.
- На мобильных устройствах кнопкой **+** на панели инструментов можно показать или скрыть набор узлов.
- Если процесс создаёт несколько выходных файлов, узел Скачать автоматически упаковывает их в ZIP.
- Начните с простого: соберите и проверьте конвейер из двух узлов, прежде чем усложнять.
## Связанные инструменты
- [PDF в текст](./pdf-to-text)
- [PDF в Excel](./pdf-to-excel)
- [Извлечение изображений](./extract-images)
- [PDF в Markdown](./pdf-to-markdown)
+49
View File
@@ -0,0 +1,49 @@
---
title: PNG в PDF
description: Преобразуйте одно или несколько изображений PNG в PDF-документ с настройкой качества прямо в браузере.
---
# PNG в PDF
Преобразуйте изображения PNG в PDF с сохранением полного разрешения. Каждый PNG становится отдельной страницей, размер которой совпадает с размером исходного изображения. Прозрачность обрабатывается автоматически.
## Поддерживаемые форматы
| Формат | Расширения |
| :----- | :--------- |
| PNG | `.png` |
## Как это работает
1. Нажмите на область загрузки или перетащите файлы PNG. Можно выбрать сразу несколько.
2. Управляйте списком файлов: удаляйте лишние или добавляйте новые.
3. Выберите уровень **Качество PDF** в выпадающем списке.
4. Нажмите **Конвертировать в PDF**. Результат скачается как `from_jpgs.pdf`.
Инструмент использует pdf-lib, чтобы встроить каждое изображение напрямую. Если PNG нельзя встроить как есть (например, из-за необычного цветового профиля), он перерисовывается через canvas и сохраняется как JPEG.
## Параметры
**Качество PDF** определяет сжатие, применяемое перед встраиванием:
- **Высокое качество**: минимальное сжатие, самый большой размер файла.
- **Среднее качество** (по умолчанию): хороший баланс размера и чёткости.
- **Низкое качество**: максимальное сжатие, самый маленький результат.
## Сценарии использования
- Преобразование скриншотов в многостраничный PDF для отчётов об ошибках и документации
- Упаковка экспортированных макетов интерфейса в один файл для согласования
- Превращение экспорта диаграмм (draw.io, Excalidraw) в PDF, которым удобно делиться
- Сборка набора изображений графиков в отчёт
## Советы
- У PNG с прозрачностью в PDF будет белый фон. Если нужен другой фон, отредактируйте изображения заранее.
- Для скриншотов и схем с чёткими краями и текстом вариант «Высокое качество» позволяет избежать артефактов сжатия JPEG. При среднем или низком качестве изображение может внутри преобразоваться в JPEG.
## Связанные инструменты
- [Изображения в PDF](./image-to-pdf)
- [JPG в PDF](./jpg-to-pdf)
- [SVG в PDF](./svg-to-pdf)
+53
View File
@@ -0,0 +1,53 @@
---
title: Постеризация документа
description: Разделение страниц PDF на сетку из более мелких страниц для печати крупного формата на нескольких листах.
---
# Постеризация документа
Разделите каждую страницу PDF на сетку из более мелких страниц. Этот инструмент нужен, чтобы напечатать одну страницу на нескольких листах бумаги, а затем склеить их в большой плакат или баннер.
## Как это работает
1. Загрузите PDF-файл.
2. Задайте количество **строк** и **столбцов**, определяющих сетку (например, 2 строки x 2 столбца делят каждую страницу на 4 части).
3. При желании укажите диапазон страниц, чтобы постеризировать только их.
4. На холсте предпросмотра поверх текущей страницы показана сетка, так что линии разреза видны заранее.
5. Переключайтесь между страницами, чтобы проверить сетку на разных страницах.
6. Нажмите кнопку обработки. Каждая ячейка сетки станет отдельной страницей итогового PDF.
## Возможности
- Настраиваемое число строк и столбцов для сетки любого размера
- Живой предпросмотр с сеткой, показывающей, где именно страницы будут разделены
- Фильтр по диапазону страниц, чтобы постеризировать только нужные
- Постраничная навигация в предпросмотре
- Кэширование снимков страниц для быстрой навигации
- Красные пунктирные линии сетки отчётливо обозначают границы разреза
## Параметры
| Параметр | Описание |
| -------------------- | ----------------------------------------------------- |
| **Строки** | Число горизонтальных делений (по умолчанию: 1) |
| **Столбцы** | Число вертикальных делений (по умолчанию: 1) |
| **Диапазон страниц** | Какие страницы постеризировать (пусто = все страницы) |
## Сценарии использования
- Печать PDF размером с плакат на стандартных листах A4 или Letter для сборки на стене
- Создание больших баннеров из одностраничного PDF-макета
- Разделение крупных технических чертежей на печатаемые фрагменты
- Печать в большом формате без доступа к широкоформатному принтеру
## Советы
- Сетка 2x2 превращает одну страницу в 4, а сетка 3x3 в 9. Выбирайте сетку исходя из того, насколько большим должен получиться собранный результат.
- Предпросмотр помогает убедиться, что важное содержимое не попадает на линию разреза. При необходимости измените число строк и столбцов.
- Для обратной операции (размещение нескольких страниц на одном листе) используйте [N-Up PDF](./n-up-pdf).
## Связанные инструменты
- [N-Up PDF](./n-up-pdf)
- [Разделение страниц](./divide-pages)
- [Разделение PDF](./split-pdf)
+55
View File
@@ -0,0 +1,55 @@
---
title: PowerPoint в PDF
description: Преобразуйте презентации PowerPoint (PPT, PPTX) и файлы ODP в PDF с сохранением оформления слайдов.
---
# PowerPoint в PDF
Преобразуйте файлы презентаций в PDF. Каждый слайд становится страницей итогового документа, а текст, изображения и фигуры отображаются через LibreOffice, работающий прямо в браузере. Поддерживаются современный и устаревший форматы PowerPoint, а также формат OpenDocument Presentation.
## Поддерживаемые форматы
| Формат | Расширения |
| :------------------------ | :--------- |
| PowerPoint (современный) | `.pptx` |
| PowerPoint (устаревший) | `.ppt` |
| OpenDocument Presentation | `.odp` |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё файлы презентаций.
2. Просмотрите список файлов. Добавьте ещё или удалите лишние.
3. Нажмите **Преобразовать в PDF**. При первом использовании загружается движок LibreOffice, затем каждый файл преобразуется.
4. Один файл скачивается сразу как PDF. Несколько файлов упаковываются в `powerpoint-converted.zip`.
## Параметры
У этого инструмента нет дополнительных настроек. Слайды отображаются в исходных размерах.
## Результат
| Количество файлов | Результат |
| :---------------- | :----------------------------------------------------------------------- |
| 1 файл | Один PDF (исходное имя файла с расширением `.pdf`) |
| 2 и более | ZIP-архив (`powerpoint-converted.zip`) с отдельным PDF для каждого файла |
## Сценарии использования
- Преобразование презентации в PDF перед отправкой аудитории, у которой может не быть PowerPoint
- Создание печатной версии слайдов для конференции или семинара
- Архивирование презентаций в формате, который одинаково выглядит на любом устройстве
- Пакетное преобразование коллекции презентаций ODP из LibreOffice Impress в PDF
- Подготовка PDF-версии презентации для отправки по электронной почте
## Советы
- Анимация и переходы между слайдами в PDF не сохраняются. Каждый слайд фиксируется как статичная страница.
- Встроенные видео в результате не отображаются. При необходимости замените их снимком экрана или изображением-заглушкой.
- Заметки докладчика не попадают в PDF при экспорте по умолчанию. Если они нужны, сначала экспортируйте их из режима печати заметок в PowerPoint.
- Движок LibreOffice кэшируется после первой загрузки, поэтому вторая презентация в той же сессии преобразуется намного быстрее.
## Связанные инструменты
- [Word в PDF](./word-to-pdf)
- [Excel в PDF](./excel-to-pdf)
- [Изображения в PDF](./image-to-pdf)
+47
View File
@@ -0,0 +1,47 @@
---
title: Подготовка PDF для ИИ
description: Извлечение содержимого PDF в структурированный JSON, оптимизированный для LLM и ИИ-конвейеров вроде LlamaIndex. Поддерживает пакетную обработку.
---
# Подготовка PDF для ИИ
Извлекает содержимое PDF-файлов и структурирует его в JSON, оптимизированный для загрузки в большие языковые модели (LLM) и ИИ-фреймворки вроде LlamaIndex. Содержимое каждой страницы извлекается и организуется в структурированный формат, готовый для RAG-конвейеров, чат-ботов и систем семантического поиска.
## Как это работает
1. Загрузите один или несколько PDF, нажав на область загрузки или перетащив файлы.
2. Нажмите **Извлечь для ИИ**, чтобы начать обработку.
3. Один файл скачивается как `filename_llm.json`. Несколько файлов дают архив `pdf-for-ai.zip`.
Инструмент использует интеграцию PyMuPDF с LlamaIndex, чтобы извлекать содержимое постранично вместе с метаданными. Результат можно напрямую загружать в ИИ-фреймворки.
## Параметры
У этого инструмента нет настраиваемых параметров. Все страницы извлекаются с полным текстом и метаданными.
## Формат результата
- **Один файл**: `filename_llm.json`
- **Несколько файлов**: `pdf-for-ai.zip` с одним `_llm.json` на каждый исходный PDF.
JSON соответствует схеме документов LlamaIndex: текст каждой страницы и поля метаданных.
## Сценарии использования
- Подготовка PDF-документов для конвейеров RAG (генерация с дополнением выборкой).
- Создание базы знаний с поиском по архивам PDF для ИИ-чат-бота.
- Передача PDF-отчётов в процессы анализа на основе LLM.
- Предварительная обработка научных статей для семантического поиска и систем вопросов и ответов.
- Создание структурированных обучающих данных из коллекций PDF-документов.
## Советы
- Для извлечения простого текста без ИИ-форматирования используйте [PDF в текст](./pdf-to-text).
- Для вывода в Markdown с сохранением заголовков и структуры используйте [PDF в Markdown](./pdf-to-markdown).
- Для отсканированных PDF результат будет пустым или минимальным. Сначала пропустите их через распознавание текста, чтобы добавить текстовый слой.
## Связанные инструменты
- [PDF в текст](./pdf-to-text)
- [PDF в Markdown](./pdf-to-markdown)
- [PDF в JSON](./pdf-to-json)
+64
View File
@@ -0,0 +1,64 @@
---
title: Защита PDF
description: Защитите PDF-файлы паролем с 256-битным шифрованием AES. Задайте пароли пользователя и владельца с настраиваемыми ограничениями.
---
# Защита PDF
Закройте PDF паролем, чтобы открыть его могли только нужные люди. BentoPDF использует 256-битное шифрование AES, тот же стандарт, что применяют банки и госструктуры, и выполняет его целиком в вашем браузере через QPDF.
## Как это работает
1. Загрузите PDF-файл.
2. Введите **Пароль пользователя** (обязательно). Этот пароль потребуется, чтобы открыть файл.
3. При желании введите **Пароль владельца**. Если он задан, на PDF накладываются ограничения: нельзя печатать, редактировать, копировать и аннотировать.
4. Нажмите **Шифрование документа**.
5. Скачайте зашифрованный файл.
## Типы паролей
### Пароль пользователя (обязательный)
Пароль пользователя вводят получатели, чтобы открыть PDF. Без него документ полностью недоступен. У каждого зашифрованного PDF он должен быть.
### Пароль владельца (необязательный)
Пароль владельца определяет, что может делать авторизованный пользователь после открытия файла. Если вы задаёте отдельный пароль владельца, BentoPDF автоматически применяет самый строгий набор ограничений:
- Изменение запрещено
- Извлечение и копирование запрещены
- Печать запрещена
- Аннотирование запрещено
- Заполнение форм запрещено
- Сборка документа запрещена
Если оставить пароль владельца пустым, PDF будет зашифрован (для открытия по-прежнему нужен пароль пользователя), но после открытия никаких ограничений не будет.
## Подробности шифрования
- **Алгоритм**: AES-256 (256-битный Advanced Encryption Standard)
- **Длина ключа**: 256 бит
- **Стандарт**: шифрование PDF 2.0 (реализация QPDF)
Подобрать ключ AES-256 перебором на современных технологиях вычислительно невозможно. Защищённость зашифрованного PDF целиком зависит от надёжности пароля.
## Сценарии использования
- Защита конфиденциальных финансовых отчётов перед отправкой по почте
- Защита юридических документов, передаваемых противной стороне
- Установка пароля на медицинские записи и персональные данные
- Распространение платного контента (электронные книги, отчёты) с контролем доступа
- Соблюдение политик защиты данных, требующих шифрования при хранении
## Советы
- Используйте надёжный уникальный пароль. Идеальна парольная фраза от 12 символов с разным регистром, цифрами и символами.
- Передавайте пароль отдельным каналом (звонок, SMS), а не в том же письме, что и PDF.
- Если нужно только ограничить действия (без печати и копирования), не требуя пароля для открытия, используйте инструмент «Изменение разрешений».
## Связанные инструменты
- [Разблокировка PDF](./unlock-pdf): снять шифрование, если вы знаете пароль
- [Изменение разрешений](./change-permissions): изменить отдельные ограничения использования
- [Снятие ограничений](./remove-restrictions): удалить из PDF всю защиту
- [Санирование документа](./sanitize-pdf): удалить скрытое содержимое перед шифрованием
+44
View File
@@ -0,0 +1,44 @@
---
title: PSD в PDF
description: Преобразуйте файлы Photoshop (PSD) в PDF прямо в браузере. Бесплатно, приватно, без программ Adobe.
---
# PSD в PDF
Преобразуйте файлы Adobe Photoshop PSD в PDF-документы. PSD это родной формат Photoshop, и обычно для его открытия нужна дорогая программа Adobe. Этот инструмент отображает совмещённое (сведённое) изображение вашего PSD как страницу PDF в полном разрешении.
## Поддерживаемые форматы
| Формат | Расширение | Примечания |
| :-------------- | :--------- | :------------------------------------------- |
| Adobe Photoshop | `.psd` | Отображается сведённое составное изображение |
## Как это работает
1. Нажмите на область загрузки или перетащите в неё PSD-файлы. Можно загружать несколько файлов.
2. Просмотрите список файлов. Удалите лишние значком корзины или добавьте новые кнопкой **Добавить еще файлы**.
3. Нажмите **Преобразовать в PDF**. Движок PyMuPDF читает PSD-файл и встраивает составное изображение в страницу PDF в исходном разрешении.
4. Один PSD даёт один PDF. Если загрузить несколько PSD-файлов, они объединяются в один многостраничный PDF с именем `psd_to_pdf.pdf`, где каждый PSD становится одной страницей.
## Параметры
Настройки не нужны. Конвертер использует сведённые данные изображения из PSD-файла.
## Сценарии использования
- Просмотр дизайнов Photoshop без запуска Photoshop
- Отправка макетов клиентам, у которых нет Adobe Creative Suite
- Печать художественных работ высокого разрешения из PSD-файлов
- Создание PDF-портфолио из нескольких PSD-макетов: каждый становится страницей одного документа
## Советы
- При преобразовании отображается составной (сведённый) вид PSD. Отдельные слои, корректирующие слои и эффекты слоёв не сохраняются в PDF как отдельные элементы.
- Несколько PSD-файлов объединяются в один многостраничный PDF, а не в отдельные PDF. Это удобно для портфолио и лукбуков.
- PSD-файлы очень высокого разрешения (печатные файлы 300+ DPI) дадут большие PDF. Инструмент сохраняет полное разрешение.
## Связанные инструменты
- [Изображения в PDF](./image-to-pdf)
- [PNG в PDF](./png-to-pdf)
- [VSD в PDF](./vsd-to-pdf)
Loaded 100 of 3344 files, more files were not shown because too many files have changed in this diff. Show more