mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-13 09:54:19 +01:00
feat: translate all pages, UI messages and docs and fix SEO redirects and indexing
This commit is contained in:
1 parent
5e019de5ae
commit
4edb1718cc
3344 files changed
+415643
-4759
No files matched your search
@@ -0,0 +1,136 @@
|
||||
# Đóng góp
|
||||
|
||||
Cảm ơn bạn đã quan tâm đến việc đóng góp cho BentoPDF! Hướng dẫn này sẽ giúp bạn bắt đầu.
|
||||
|
||||
## Bắt đầu
|
||||
|
||||
### Yêu cầu
|
||||
|
||||
- Node.js 18+
|
||||
- npm 9+
|
||||
- Git
|
||||
|
||||
### Cài đặt
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Cấu trúc dự án
|
||||
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
## Thêm công cụ mới
|
||||
|
||||
### Bước 1: Tạo tệp logic
|
||||
|
||||
Tạo `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
|
||||
});
|
||||
```
|
||||
|
||||
### Bước 2: Tạo trang HTML
|
||||
|
||||
Tạo `src/pages/your-tool.html` theo các mẫu công cụ hiện có.
|
||||
|
||||
### Bước 3: Đăng ký công cụ
|
||||
|
||||
Thêm vào `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.',
|
||||
}
|
||||
```
|
||||
|
||||
### Bước 4: Thêm vào cấu hình build
|
||||
|
||||
Thêm trang vào `vite.config.ts`:
|
||||
|
||||
```typescript
|
||||
'your-tool': resolve(__dirname, 'src/pages/your-tool.html'),
|
||||
```
|
||||
|
||||
### Bước 5: Thêm bản dịch
|
||||
|
||||
Thêm các mục vào tất cả tệp locale trong `public/locales/`:
|
||||
|
||||
```json
|
||||
{
|
||||
"yourTool": {
|
||||
"name": "Your Tool",
|
||||
"subtitle": "Description"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Phong cách mã
|
||||
|
||||
- Dùng TypeScript cho mọi mã mới
|
||||
- Tuân theo các mẫu hiện có để nhất quán
|
||||
- Chạy `npm run format` trước khi commit
|
||||
- Không viết chú thích trong mã production (chú thích bị xóa khi build)
|
||||
|
||||
## Quy trình Pull Request
|
||||
|
||||
1. Tạo nhánh tính năng: `git checkout -b feature/your-feature`
|
||||
2. Thực hiện thay đổi của bạn
|
||||
3. Kiểm tra kỹ lưỡng: `npm run build`
|
||||
4. Gửi PR kèm mô tả rõ ràng
|
||||
|
||||
## Dịch thuật
|
||||
|
||||
Xem [TRANSLATION.md](https://github.com/alam00000/bentopdf/blob/main/TRANSLATION.md) để biết cách thêm ngôn ngữ mới.
|
||||
|
||||
## Thỏa thuận cấp phép cho người đóng góp
|
||||
|
||||
Trước khi PR của bạn được merge, bạn cần ký CLA của chúng tôi:
|
||||
|
||||
- [CLA cá nhân (ICLA)](https://github.com/alam00000/bentopdf/blob/main/ICLA.md)
|
||||
- [CLA doanh nghiệp (CCLA)](https://github.com/alam00000/bentopdf/blob/main/CCLA.md)
|
||||
|
||||
## Nhận trợ giúp
|
||||
|
||||
- [GitHub Issues](https://github.com/alam00000/bentopdf/issues)
|
||||
- [Cộng đồng Discord](https://discord.gg/Bgq3Ay3f2w)
|
||||
|
||||
## Giấy phép
|
||||
|
||||
BentoPDF được cấp phép kép:
|
||||
|
||||
- **AGPL-3.0** cho các dự án mã nguồn mở công khai toàn bộ mã nguồn của mình
|
||||
- **Giấy phép thương mại** cho các ứng dụng độc quyền/mã nguồn đóng - [Nhận giấy phép trọn đời với giá $79](https://buy.polar.sh/polar_cl_ThDfffbl733x7oAodcIryCzhlO57ZtcWPq6HJ1qMChd)
|
||||
|
||||
Khi đóng góp, bạn đồng ý rằng các đóng góp của mình sẽ được cấp phép theo các điều khoản này.
|
||||
@@ -0,0 +1,80 @@
|
||||
# Bắt đầu
|
||||
|
||||
Chào mừng bạn đến với BentoPDF! Hướng dẫn này giúp bạn bắt đầu nhanh chóng.
|
||||
|
||||
## BentoPDF là gì?
|
||||
|
||||
BentoPDF là bộ công cụ PDF miễn phí, mã nguồn mở, đặt quyền riêng tư lên hàng đầu và chạy **hoàn toàn trong trình duyệt của bạn**. Tệp của bạn không bao giờ rời khỏi thiết bị, mọi xử lý đều diễn ra cục bộ bằng công nghệ WebAssembly (WASM).
|
||||
|
||||
## Bắt đầu nhanh
|
||||
|
||||
### Cách 1: Dùng phiên bản trực tuyến
|
||||
|
||||
Truy cập [bentopdf.com](https://www.bentopdf.com) để dùng BentoPDF ngay, không cần cài đặt.
|
||||
|
||||
### Cách 2: Tự lưu trữ bằng Docker
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Chuyển đổi tệp Office cần `SharedArrayBuffer`, và điều này đòi hỏi cả:
|
||||
>
|
||||
> - `Cross-Origin-Opener-Policy: same-origin`
|
||||
> - `Cross-Origin-Embedder-Policy: require-corp`
|
||||
> - một ngữ cảnh bảo mật (secure context)
|
||||
>
|
||||
> `http://localhost` dùng được để thử nghiệm cục bộ vì trình duyệt coi loopback là đáng tin cậy. `http://192.168.x.x` hoặc các IP LAN khác thường thì không, nên việc chuyển đổi Word/Excel/PowerPoint sẽ cần HTTPS khi truy cập từ các thiết bị khác trong mạng của bạn.
|
||||
|
||||
```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 có hai bản build: **bản Tự lưu trữ** (`bentopdf-simple`, dùng ở trên) cho triển khai nội bộ/nhóm/tổ chức, và **bản Thương mại** (`bentopdf:latest`) được chính bentopdf.com và các chủ sở hữu giấy phép thương mại dùng cho triển khai công khai. Cả hai đều có cùng các công cụ PDF, bản Thương mại bổ sung phần hero, FAQ, lời chứng thực và chân trang của bentopdf.com. Nếu không chắc, hãy dùng bản Tự lưu trữ.
|
||||
|
||||
Sau đó mở `http://localhost:3000` trong trình duyệt của bạn.
|
||||
|
||||
> [!NOTE]
|
||||
> Nếu bạn chuẩn bị triển khai OCR trong môi trường air-gapped, bạn phải lưu trữ nội bộ cả các phông chữ lớp văn bản OCR, ngoài tệp worker Tesseract, runtime lõi và các tệp traineddata. Cách thiết lập đầy đủ có trong [Tự lưu trữ](/vi/self-hosting/), gồm `VITE_OCR_FONT_BASE_URL` và thư mục `ocr-fonts/` đi kèm.
|
||||
|
||||
### Cách 3: Build từ mã nguồn
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/alam00000/bentopdf.git
|
||||
cd bentopdf
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start development server
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## Tính năng nổi bật
|
||||
|
||||
| Danh mục | Công cụ |
|
||||
| ------------------------- | ------------------------------------------------------------------- |
|
||||
| **Chuyển sang PDF** | Word, Excel, PowerPoint, Hình ảnh, Markdown, EPUB, MOBI, và hơn nữa |
|
||||
| **Chuyển từ PDF** | JPG, PNG, Văn bản, Excel, SVG, và hơn nữa |
|
||||
| **Chỉnh sửa & Chú thích** | Ký, Đánh dấu, Che thông tin, Điền biểu mẫu, Thêm con dấu |
|
||||
| **Sắp xếp** | Gộp, Chia, Xoay, Xóa trang, Sắp xếp lại |
|
||||
| **Tối ưu hóa** | Nén, Sửa chữa, Làm phẳng, OCR |
|
||||
| **Bảo mật** | Mã hóa, Giải mã, Gỡ hạn chế |
|
||||
|
||||
## Hỗ trợ trình duyệt
|
||||
|
||||
BentoPDF hoạt động tốt nhất trên các trình duyệt hiện đại:
|
||||
|
||||
- ✅ Chrome/Edge 90+
|
||||
- ✅ Firefox 90+
|
||||
- ✅ Safari 15+
|
||||
|
||||
## Bước tiếp theo
|
||||
|
||||
- [Khám phá tất cả công cụ](/vi/tools/)
|
||||
- [Tự lưu trữ BentoPDF](/vi/self-hosting/)
|
||||
- [Đóng góp cho dự án](/vi/contributing)
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: 'BentoPDF'
|
||||
text: 'Công cụ PDF miễn phí, mã nguồn mở'
|
||||
tagline: Xử lý PDF hoàn toàn trong trình duyệt của bạn. Không tải lên. Không máy chủ. Riêng tư tuyệt đối.
|
||||
actions:
|
||||
- theme: brand
|
||||
text: Bắt đầu
|
||||
link: /vi/getting-started
|
||||
- theme: alt
|
||||
text: Xem công cụ
|
||||
link: /vi/tools/
|
||||
- theme: alt
|
||||
text: Tự lưu trữ
|
||||
link: /vi/self-hosting/
|
||||
- theme: alt
|
||||
text: Giấy phép thương mại
|
||||
link: /vi/licensing
|
||||
|
||||
features:
|
||||
- icon: 🔒
|
||||
title: Riêng tư 100%
|
||||
details: Tệp của bạn không bao giờ rời khỏi thiết bị. Mọi xử lý diễn ra cục bộ trong trình duyệt bằng WebAssembly.
|
||||
- icon: ⚡
|
||||
title: Nhanh và miễn phí
|
||||
details: Không đăng ký, không giới hạn, không hình mờ. Xử lý không giới hạn PDF miễn phí, mãi mãi.
|
||||
- icon: 🛠️
|
||||
title: Hơn 50 công cụ
|
||||
details: Chuyển đổi, chỉnh sửa, gộp, chia, nén, ký, OCR và hơn thế nữa. Mọi thứ bạn cần ở cùng một nơi.
|
||||
|
||||
- icon: 🌐
|
||||
title: Có thể tự lưu trữ
|
||||
details: Triển khai trên hạ tầng của riêng bạn. Docker, Vercel, Netlify, AWS, hoặc môi trường air-gapped hoàn toàn với worker OCR, dữ liệu ngôn ngữ và phông chữ lớp văn bản tự lưu trữ.
|
||||
---
|
||||
|
||||
## OCR ngoại tuyến
|
||||
|
||||
Nếu bạn tự lưu trữ BentoPDF trong môi trường air-gapped hoặc ngoại tuyến, OCR cần nhiều hơn tệp worker Tesseract và các tệp traineddata. Đầu ra PDF có thể tìm kiếm còn cần các phông chữ lớp văn bản OCR được phục vụ nội bộ.
|
||||
Xem [Tự lưu trữ](/vi/self-hosting/) để biết cách thiết lập đầy đủ, gồm `VITE_OCR_FONT_BASE_URL`, thư mục `ocr-fonts/` đi kèm và quy trình air-gap đã cập nhật.
|
||||
@@ -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](/vi/self-hosting/#cau-hinh-wasm-thanh-phan-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.
|
||||
@@ -0,0 +1,275 @@
|
||||
# Triển khai với Apache
|
||||
|
||||
Lưu trữ BentoPDF bằng Apache HTTP Server.
|
||||
|
||||
## Yêu cầu
|
||||
|
||||
- Apache 2.4+
|
||||
- Đã bật mod_rewrite
|
||||
- Chứng chỉ SSL (khuyến nghị)
|
||||
|
||||
## Bước 1: Build dự án
|
||||
|
||||
```bash
|
||||
git clone https://github.com/alam00000/bentopdf.git
|
||||
cd bentopdf
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Để tùy chỉnh thương hiệu, đặt các biến môi trường trước khi build:
|
||||
|
||||
```bash
|
||||
VITE_BRAND_NAME="AcmePDF" VITE_BRAND_LOGO="images/acme-logo.svg" npm run build
|
||||
```
|
||||
|
||||
## Bước 2: Sao chép tệp
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /var/www/bentopdf
|
||||
sudo cp -r dist/* /var/www/bentopdf/
|
||||
sudo chown -R www-data:www-data /var/www/bentopdf
|
||||
```
|
||||
|
||||
## Bước 3: Cấu hình Apache
|
||||
|
||||
Tạo `/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>
|
||||
```
|
||||
|
||||
## Bước 4: .htaccess cho định tuyến
|
||||
|
||||
Tạo `/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
|
||||
```
|
||||
|
||||
## Bước 5: Bật các module cần thiết
|
||||
|
||||
```bash
|
||||
sudo a2enmod rewrite
|
||||
sudo a2enmod ssl
|
||||
sudo a2enmod headers
|
||||
sudo a2enmod expires
|
||||
sudo a2enmod deflate
|
||||
```
|
||||
|
||||
## Bước 6: Bật trang web
|
||||
|
||||
```bash
|
||||
sudo a2ensite bentopdf.conf
|
||||
sudo apache2ctl configtest
|
||||
sudo systemctl reload apache2
|
||||
```
|
||||
|
||||
## Triển khai trong thư mục con
|
||||
|
||||
Để lưu trữ tại `/pdf/`:
|
||||
|
||||
1. Build với base URL:
|
||||
|
||||
```bash
|
||||
BASE_URL=/pdf/ npm run build
|
||||
```
|
||||
|
||||
2. Cập nhật `.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
|
||||
```
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### Lỗi WASM 404
|
||||
|
||||
Đảm bảo đã cấu hình MIME type:
|
||||
|
||||
```apache
|
||||
AddType application/wasm .wasm
|
||||
```
|
||||
|
||||
### Ký PDF hoặc Form Filler hiển thị trình xem trống (lỗi MIME `.mjs`)
|
||||
|
||||
Nếu console của trình duyệt hiển thị:
|
||||
|
||||
```
|
||||
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.
|
||||
```
|
||||
|
||||
...và yêu cầu bị lỗi có đuôi `.mjs`, cấu hình Apache của bạn đang thiếu ánh xạ `.mjs → application/javascript`. Trình xem PDF đi kèm dùng các tệp ES module có đuôi `.mjs`, và `mime.types` mặc định của Apache không có sẵn đuôi này.
|
||||
|
||||
Thêm vào VirtualHost hoặc `.htaccess`:
|
||||
|
||||
```apache
|
||||
AddType application/javascript .mjs
|
||||
```
|
||||
|
||||
Sau đó tải lại Apache:
|
||||
|
||||
```bash
|
||||
sudo apache2ctl configtest && sudo systemctl reload apache2
|
||||
```
|
||||
|
||||
Để xác nhận: trong DevTools của trình duyệt → thẻ Network, tìm yêu cầu `.mjs` bị lỗi và kiểm tra header phản hồi `Content-Type`. Giờ nó phải là `application/javascript`, không phải `application/octet-stream`.
|
||||
|
||||
### Rewrite không hoạt động
|
||||
|
||||
Kiểm tra mod_rewrite đã được bật:
|
||||
|
||||
```bash
|
||||
sudo a2enmod rewrite
|
||||
```
|
||||
|
||||
### Chuyển Word/ODT/Excel sang PDF không hoạt động
|
||||
|
||||
LibreOffice WASM cần `SharedArrayBuffer`, và điều này đòi hỏi các header sau:
|
||||
|
||||
```apache
|
||||
Header always set Cross-Origin-Embedder-Policy "require-corp"
|
||||
Header always set Cross-Origin-Opener-Policy "same-origin"
|
||||
```
|
||||
|
||||
Nó cũng cần một ngữ cảnh bảo mật (secure context). `http://localhost` dùng được để thử nghiệm cục bộ, nhưng `http://192.168.x.x` hoặc các IP LAN khác thường cần HTTPS. Nếu các header đã có nhưng `window.crossOriginIsolated` vẫn là `false`, hãy kiểm tra xem trang có đang được mở qua HTTP thường trên một origin không phải loopback hay không.
|
||||
|
||||
Các tệp `.wasm.gz` và `.data.gz` nén sẵn cũng cần `Content-Encoding` đúng:
|
||||
|
||||
```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>
|
||||
```
|
||||
|
||||
Đảm bảo `mod_headers` đã được bật: `sudo a2enmod headers`
|
||||
|
||||
### Bị từ chối quyền truy cập
|
||||
|
||||
```bash
|
||||
sudo chown -R www-data:www-data /var/www/bentopdf
|
||||
sudo chmod -R 755 /var/www/bentopdf
|
||||
```
|
||||
@@ -0,0 +1,200 @@
|
||||
# Triển khai lên AWS S3 + CloudFront
|
||||
|
||||
Lưu trữ BentoPDF trên AWS để kiểm soát và mở rộng tối đa.
|
||||
|
||||
## Kiến trúc
|
||||
|
||||
```
|
||||
User → CloudFront (CDN) → S3 (Static Files)
|
||||
```
|
||||
|
||||
## Bước 1: Tạo S3 bucket
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Bước 2: Build và tải lên
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Bước 3: Tạo bản phân phối CloudFront
|
||||
|
||||
```bash
|
||||
aws cloudfront create-distribution \
|
||||
--origin-domain-name your-bentopdf-bucket.s3.amazonaws.com \
|
||||
--default-root-object index.html
|
||||
```
|
||||
|
||||
Hoặc dùng AWS Console:
|
||||
|
||||
1. Vào CloudFront → Create distribution
|
||||
2. Origin domain: chọn S3 bucket của bạn
|
||||
3. Bật "Origin Access Control"
|
||||
4. Default root object: `index.html`
|
||||
5. Tạo distribution
|
||||
|
||||
## Bước 3b: Chính sách header phản hồi (bắt buộc cho LibreOffice WASM)
|
||||
|
||||
Các chuyển đổi dựa trên LibreOffice (Word, Excel, PowerPoint sang PDF) cần `SharedArrayBuffer`, và điều này đòi hỏi các header phản hồi cụ thể. Hãy tạo một CloudFront Response Headers Policy:
|
||||
|
||||
1. Vào CloudFront → Policies → Response headers
|
||||
2. Tạo chính sách tùy chỉnh với các header sau:
|
||||
|
||||
| Header | Giá trị |
|
||||
| ------------------------------ | -------------- |
|
||||
| `Cross-Origin-Embedder-Policy` | `require-corp` |
|
||||
| `Cross-Origin-Opener-Policy` | `same-origin` |
|
||||
| `Cross-Origin-Resource-Policy` | `cross-origin` |
|
||||
|
||||
3. Gắn chính sách vào default cache behavior của distribution
|
||||
|
||||
Hoặc qua 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}
|
||||
]
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## Bước 3c: Metadata S3 cho tệp WASM nén sẵn
|
||||
|
||||
Các tệp WASM của LibreOffice được nén sẵn (`.wasm.gz`, `.data.gz`). Hãy đặt Content-Type và Content-Encoding đúng để trình duyệt giải nén chúng:
|
||||
|
||||
```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 Quan trọng
|
||||
Nếu thiếu chính sách header phản hồi, `SharedArrayBuffer` sẽ không khả dụng và các chuyển đổi LibreOffice WASM sẽ bị treo ở khoảng 55%. Nếu thiếu Content-Encoding đúng trên các tệp `.gz`, trình duyệt sẽ nhận byte gzip thô và việc biên dịch WASM sẽ thất bại.
|
||||
:::
|
||||
|
||||
## Bước 4: Chính sách S3 bucket
|
||||
|
||||
Cho phép CloudFront truy cập bucket:
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Bước 5: Trang lỗi tùy chỉnh
|
||||
|
||||
Cấu hình 404 trả về `index.html` cho định tuyến SPA:
|
||||
|
||||
1. CloudFront → Error pages
|
||||
2. Tạo phản hồi lỗi tùy chỉnh:
|
||||
- HTTP error code: 404
|
||||
- Response page path: `/index.html`
|
||||
- HTTP response code: 200
|
||||
|
||||
## Ước tính chi phí
|
||||
|
||||
| Tài nguyên | Chi phí ước tính |
|
||||
| ------------------------ | ---------------- |
|
||||
| Lưu trữ S3 (~500MB) | ~$0.01/tháng |
|
||||
| CloudFront (truyền 1TB) | ~$85/tháng |
|
||||
| CloudFront (truyền 10GB) | ~$0.85/tháng |
|
||||
|
||||
::: tip
|
||||
Dùng S3 Intelligent Tiering để tối ưu chi phí cho các tệp ít được truy cập.
|
||||
:::
|
||||
|
||||
## Tự động hóa với 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"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,154 @@
|
||||
# Triển khai lên Cloudflare Pages
|
||||
|
||||
[Cloudflare Pages](https://pages.cloudflare.com) cung cấp dịch vụ lưu trữ trang tĩnh toàn cầu, nhanh, với băng thông không giới hạn.
|
||||
|
||||
## Triển khai nhanh
|
||||
|
||||
1. Vào [Cloudflare Pages](https://dash.cloudflare.com/?to=/:account/pages)
|
||||
2. Nhấp "Create a project"
|
||||
3. Kết nối kho GitHub của bạn
|
||||
|
||||
## Cấu hình build
|
||||
|
||||
| Cài đặt | Giá trị |
|
||||
| ---------------------- | --------------- |
|
||||
| Framework preset | None |
|
||||
| Build command | `npm run build` |
|
||||
| Build output directory | `dist` |
|
||||
| Root directory | `/` |
|
||||
|
||||
## Biến môi trường
|
||||
|
||||
Thêm các biến này trong Settings → Environment variables:
|
||||
|
||||
| Biến | Giá trị |
|
||||
| ----------------------- | ---------------------------------------------------- |
|
||||
| `NODE_VERSION` | `18` |
|
||||
| `SIMPLE_MODE` | `false` (tùy chọn) |
|
||||
| `VITE_BRAND_NAME` | Tên thương hiệu tùy chỉnh (tùy chọn) |
|
||||
| `VITE_BRAND_LOGO` | Đường dẫn logo tương đối so với `public/` (tùy chọn) |
|
||||
| `VITE_FOOTER_TEXT` | Văn bản chân trang/bản quyền tùy chỉnh (tùy chọn) |
|
||||
| `VITE_DEFAULT_LANGUAGE` | Ngôn ngữ giao diện mặc định, ví dụ `fr` (tùy chọn) |
|
||||
|
||||
## Tệp cấu hình
|
||||
|
||||
Tạo `_headers` trong thư mục `public` của bạn:
|
||||
|
||||
```
|
||||
# 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 Quan trọng
|
||||
Các header `Cross-Origin-Embedder-Policy` và `Cross-Origin-Opener-Policy` là bắt buộc cho việc chuyển Word/ODT/Excel/PowerPoint sang PDF. Nếu thiếu, `SharedArrayBuffer` sẽ không khả dụng và engine LibreOffice WASM sẽ không khởi tạo được.
|
||||
:::
|
||||
|
||||
Tạo `_redirects` cho định tuyến SPA:
|
||||
|
||||
```
|
||||
/* /index.html 200
|
||||
```
|
||||
|
||||
## Tên miền tùy chỉnh
|
||||
|
||||
1. Vào dự án Pages của bạn
|
||||
2. Nhấp "Custom domains"
|
||||
3. Thêm tên miền của bạn
|
||||
4. Cloudflare sẽ tự động cấu hình DNS nếu tên miền nằm trên Cloudflare
|
||||
|
||||
## Ưu điểm
|
||||
|
||||
- **Băng thông không giới hạn, miễn phí**
|
||||
- **CDN toàn cầu** với hơn 300 điểm biên
|
||||
- **HTTPS tự động**
|
||||
- **Bản triển khai xem trước** cho pull request
|
||||
- **Build nhanh**
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### Tải lên tệp lớn
|
||||
|
||||
Cloudflare Pages hỗ trợ tệp tối đa 25 MB. Các module WASM thường ổn, nhưng nếu bạn chạm giới hạn, hãy cân nhắc:
|
||||
|
||||
```bash
|
||||
# Split large files during build
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Giới hạn kích thước Worker
|
||||
|
||||
Nếu dùng Cloudflare Workers cho định tuyến nâng cao, lưu ý giới hạn 1 MB cho gói miễn phí.
|
||||
|
||||
## CORS Proxy Worker (cho chữ ký số)
|
||||
|
||||
Công cụ Chữ ký số cần một CORS proxy để lấy chuỗi chứng chỉ. Hãy triển khai worker đi kèm:
|
||||
|
||||
```bash
|
||||
cd cloudflare
|
||||
npx wrangler login
|
||||
npx wrangler deploy
|
||||
```
|
||||
|
||||
### Tính năng bảo mật
|
||||
|
||||
| Tính năng | Mô tả |
|
||||
| --------------------------- | ------------------------------- |
|
||||
| **Hạn chế URL** | Chỉ cho phép URL chứng chỉ |
|
||||
| **Giới hạn kích thước tệp** | Tối đa 10MB mỗi yêu cầu |
|
||||
| **Giới hạn tốc độ** | 60 yêu cầu/IP/phút (cần KV) |
|
||||
| **Chặn IP riêng** | Chặn localhost và các IP nội bộ |
|
||||
|
||||
### Bật giới hạn tốc độ
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Build với URL proxy
|
||||
|
||||
```bash
|
||||
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build
|
||||
```
|
||||
|
||||
Hoặc với 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 .
|
||||
```
|
||||
|
||||
> **Lưu ý:** Xem [README](https://github.com/alam00000/bentopdf#digital-signature-cors-proxy-required) để biết cách thiết lập chữ ký HMAC.
|
||||
@@ -0,0 +1,180 @@
|
||||
# CORS Proxy để lấy chứng chỉ
|
||||
|
||||
Công cụ chữ ký số dùng một CORS proxy để lấy các chứng chỉ của bên cấp phát từ các Tổ chức cấp chứng chỉ (CA) bên ngoài. Điều này cần thiết vì nhiều máy chủ CA không đưa header CORS vào phản hồi, khiến trình duyệt không thể lấy trực tiếp.
|
||||
|
||||
Ngoài ra, nhiều máy chủ CA phục vụ chứng chỉ qua HTTP thường. Khi BentoPDF của bạn chạy trên HTTPS, trình duyệt sẽ chặn các yêu cầu HTTP này (chính sách nội dung hỗn hợp). CORS proxy giải quyết cả hai vấn đề bằng cách chuyển yêu cầu qua một endpoint HTTPS với các header phù hợp.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
Khi ký PDF bằng chứng chỉ:
|
||||
|
||||
1. Thư viện `zgapdfsigner` cố gắng dựng một chuỗi chứng chỉ hoàn chỉnh
|
||||
2. Nó lấy các chứng chỉ của bên cấp phát từ các URL nhúng trong phần mở rộng AIA (Authority Information Access) của chứng chỉ bạn
|
||||
3. Các yêu cầu này được chuyển qua một CORS proxy thêm các header `Access-Control-Allow-Origin` cần thiết
|
||||
4. Proxy trả dữ liệu chứng chỉ về trình duyệt
|
||||
|
||||
## Tự lưu trữ CORS Proxy
|
||||
|
||||
Nếu bạn tự lưu trữ BentoPDF, bạn cần triển khai CORS proxy của riêng mình để chữ ký số hoạt động với các chứng chỉ cần lấy chuỗi chứng chỉ.
|
||||
|
||||
### Cách 1: Cloudflare Workers (khuyến nghị)
|
||||
|
||||
1. **Cài đặt Wrangler CLI**:
|
||||
|
||||
```bash
|
||||
npm install -g wrangler
|
||||
```
|
||||
|
||||
2. **Đăng nhập Cloudflare**:
|
||||
|
||||
```bash
|
||||
wrangler login
|
||||
```
|
||||
|
||||
3. **Clone BentoPDF và cập nhật các origin được phép**:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/alam00000/bentopdf.git
|
||||
cd bentopdf/cloudflare
|
||||
```
|
||||
|
||||
Mở `cors-proxy-worker.js` và đổi mảng `ALLOWED_ORIGINS` thành tên miền của bạn:
|
||||
|
||||
```js
|
||||
const ALLOWED_ORIGINS = [
|
||||
'https://your-domain.com',
|
||||
'https://www.your-domain.com',
|
||||
];
|
||||
```
|
||||
|
||||
::: warning Quan trọng
|
||||
Nếu không thay đổi này, proxy sẽ từ chối mọi yêu cầu từ trang của bạn với lỗi **403 Forbidden**. Mặc định chỉ cho phép yêu cầu từ `bentopdf.com`.
|
||||
:::
|
||||
|
||||
4. **Triển khai proxy**:
|
||||
|
||||
```bash
|
||||
wrangler deploy
|
||||
```
|
||||
|
||||
Ghi lại URL worker của bạn (ví dụ `https://bentopdf-cors-proxy.your-subdomain.workers.dev`).
|
||||
|
||||
5. **Build lại BentoPDF với URL proxy**:
|
||||
|
||||
Nếu dùng 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 .
|
||||
```
|
||||
|
||||
Nếu build từ mã nguồn:
|
||||
|
||||
```bash
|
||||
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build
|
||||
```
|
||||
|
||||
### Cách 2: Backend proxy tùy chỉnh
|
||||
|
||||
Bạn cũng có thể tự tạo endpoint proxy. Các yêu cầu là:
|
||||
|
||||
1. Chấp nhận yêu cầu GET với tham số truy vấn `url`
|
||||
2. Lấy URL đó từ máy chủ của bạn (phía máy chủ không bị hạn chế CORS)
|
||||
3. Trả phản hồi kèm các header sau:
|
||||
- `Access-Control-Allow-Origin: https://your-domain.com`
|
||||
- `Access-Control-Allow-Methods: GET, OPTIONS`
|
||||
- `X-Content-Type-Options: nosniff`
|
||||
|
||||
Ví dụ triển khai bằng 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' });
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## Lưu ý bảo mật
|
||||
|
||||
Cloudflare Worker đi kèm có nhiều biện pháp bảo mật:
|
||||
|
||||
| Tính năng | Mô tả |
|
||||
| --------------------------- | ------------------------------------------------------------------------------------- |
|
||||
| **Xác thực origin** | Chỉ cho phép yêu cầu từ các tên miền trong `ALLOWED_ORIGINS` |
|
||||
| **Hạn chế URL** | Chỉ cho phép URL chứng chỉ (`.crt`, `.cer`, `.pem`, `/certs/`, `/ocsp`, `/crl`) |
|
||||
| **Chặn IP riêng** | Chặn dải riêng IPv4/IPv6, link-local, loopback, IP dạng thập phân và metadata đám mây |
|
||||
| **An toàn Content-Type** | Chỉ trả về các MIME type chứng chỉ an toàn, chặn chèn content-type từ upstream |
|
||||
| **Giới hạn kích thước tệp** | Truyền phản hồi theo luồng với giới hạn 10MB, hủy giữa chừng nếu vượt quá |
|
||||
| **Giới hạn tốc độ** | 60 yêu cầu mỗi phút cho mỗi IP hoặc IPv6 /64 (cần KV, bỏ qua giới hạn khi KV lỗi) |
|
||||
| **Chữ ký HMAC** | Ký phía máy khách tùy chọn (ngăn chặn lạm dụng thông thường) |
|
||||
|
||||
### DNS rebinding (tự lưu trữ ngoài Cloudflare)
|
||||
|
||||
Worker từ chối mọi URL phân giải ra IP riêng hoặc nội bộ. Nó không thể dùng danh sách cho phép cố định các host, vì URL chuỗi chứng chỉ trỏ đến bất kỳ CA nào đã cấp chứng chỉ (FNMT, CA doanh nghiệp, v.v.), nên đích đến không biết trước. Điều đó để lại một khoảng hở rebinding nhỏ: người điều hành DNS cho tên miền của họ có thể đưa một IP công khai cho bước kiểm tra an toàn và một IP riêng cho yêu cầu thật ngay sau đó.
|
||||
|
||||
Trên Cloudflare điều này không khai thác được, vì Workers không thể truy cập IP riêng hay endpoint metadata `169.254.169.254`, nên rebind không dẫn đến đâu. Chỉ cần đừng cho worker thêm đường vào: đừng gắn Tunnel, Service hay binding mạng riêng (nó chỉ cần `RATE_LIMIT_KV`).
|
||||
|
||||
Nếu bạn chạy nó ngoài Cloudflare (workerd, Node và tương tự) bên trong VPC, runtime _có thể_ truy cập IP nội bộ. Hãy đặt tường lửa egress phía trước và chặn các dải riêng: `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`, và các dải IPv6 tương đương. Mã ứng dụng không thể thực thi điều đó khi bạn đã ra ngoài Cloudflare.
|
||||
|
||||
## Tắt Proxy
|
||||
|
||||
Nếu bạn không muốn dùng CORS proxy, hãy đặt biến môi trường thành chuỗi rỗng:
|
||||
|
||||
```
|
||||
VITE_CORS_PROXY_URL=
|
||||
```
|
||||
|
||||
**Lưu ý**: Khi không có proxy, việc ký bằng các chứng chỉ cần lấy chuỗi từ bên ngoài (như FNMT hoặc một số CA doanh nghiệp) sẽ thất bại với lỗi "Failed to fetch".
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### "Signing error: TypeError: Failed to fetch"
|
||||
|
||||
Điều này thường có nghĩa là:
|
||||
|
||||
1. **Chưa cấu hình CORS proxy**: Đặt `VITE_CORS_PROXY_URL` và build lại
|
||||
2. **Bị chặn nội dung hỗn hợp**: Trang của bạn dùng HTTPS nhưng URL bên cấp phát của chứng chỉ là HTTP. CORS proxy giải quyết việc này.
|
||||
3. **CORS proxy từ chối origin của bạn**: Kiểm tra tên miền của bạn có trong mảng `ALLOWED_ORIGINS` trong `cors-proxy-worker.js` không
|
||||
|
||||
### "403 Forbidden" từ proxy
|
||||
|
||||
Tên miền của bạn không có trong danh sách `ALLOWED_ORIGINS`. Sửa `cors-proxy-worker.js`:
|
||||
|
||||
```js
|
||||
const ALLOWED_ORIGINS = ['https://your-domain.com'];
|
||||
```
|
||||
|
||||
Sau đó triển khai lại: `npx wrangler deploy`
|
||||
|
||||
### Kiểm tra proxy
|
||||
|
||||
```bash
|
||||
curl -H "Origin: https://your-domain.com" \
|
||||
"https://your-proxy.workers.dev?url=http://www.cert.fnmt.es/certs/ACUSU.crt"
|
||||
```
|
||||
|
||||
### Chứng chỉ hoạt động không cần proxy
|
||||
|
||||
Một số chứng chỉ chứa đủ chuỗi trong tệp P12/PFX và không cần lấy từ bên ngoài:
|
||||
|
||||
- Chứng chỉ tự ký
|
||||
- Một số CA thương mại đóng gói sẵn các chứng chỉ trung gian
|
||||
- Chứng chỉ bạn tự ghép đủ chuỗi
|
||||
@@ -0,0 +1,622 @@
|
||||
# Triển khai với Docker / Podman
|
||||
|
||||
Cách dễ nhất để tự lưu trữ BentoPDF trong môi trường production.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **Các header bắt buộc cho chuyển đổi tệp Office**
|
||||
>
|
||||
> Các công cụ dựa trên LibreOffice (chuyển đổi Word, Excel, PowerPoint) cần các header HTTP sau để hỗ trợ `SharedArrayBuffer`:
|
||||
>
|
||||
> - `Cross-Origin-Opener-Policy: same-origin`
|
||||
> - `Cross-Origin-Embedder-Policy: require-corp`
|
||||
>
|
||||
> Trang cũng phải được phục vụ từ một ngữ cảnh bảo mật (secure context). `http://localhost` dùng được để thử nghiệm cục bộ, nhưng `http://192.168.x.x` hoặc các IP LAN khác thường không đạt điều kiện, nên chuyển đổi Office qua HTTP thường sẽ thất bại dù các header đã có.
|
||||
>
|
||||
> Các container image chính thức đã bao gồm những header này. Nếu dùng reverse proxy (Traefik, Caddy, v.v.), hãy đảm bảo các header được giữ nguyên hoặc được thêm vào, và dùng HTTPS khi truy cập không qua loopback.
|
||||
|
||||
> [!TIP]
|
||||
> **Người dùng Podman:** Mọi lệnh `docker` đều chạy được với Podman bằng cách thay `docker` bằng `podman` và `docker-compose` bằng `podman-compose`.
|
||||
|
||||
## Bắt đầu nhanh
|
||||
|
||||
> [!TIP]
|
||||
> BentoPDF có hai bản build:
|
||||
>
|
||||
> - **Bản Tự lưu trữ** - `ghcr.io/alam00000/bentopdf-simple:latest`. Có mọi công cụ PDF, **không** có phần giao diện quảng bá (không hero, FAQ, lời chứng thực, chân trang). Dùng cho triển khai nội bộ/nhóm/tổ chức. Đây **không** phải bản "lite" bị giảm tính năng.
|
||||
> - **Bản Thương mại** - `ghcr.io/alam00000/bentopdf:latest`. Toàn bộ trang quảng bá, được chính bentopdf.com và các chủ sở hữu giấy phép thương mại dùng cho triển khai công khai.
|
||||
>
|
||||
> Nếu không chắc: hãy pull bản Tự lưu trữ.
|
||||
|
||||
```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
|
||||
|
||||
Tạo `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
|
||||
```
|
||||
|
||||
Chạy:
|
||||
|
||||
```bash
|
||||
# Docker Compose
|
||||
docker compose up -d
|
||||
|
||||
# Podman Compose
|
||||
podman-compose up -d
|
||||
```
|
||||
|
||||
## Tự build image
|
||||
|
||||
```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;"]
|
||||
```
|
||||
|
||||
Build và chạy:
|
||||
|
||||
```bash
|
||||
docker build -t bentopdf:custom .
|
||||
docker run -d -p 3000:8080 bentopdf:custom
|
||||
```
|
||||
|
||||
## Biến môi trường
|
||||
|
||||
| Biến | Mô tả | Mặc định |
|
||||
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
||||
| `SIMPLE_MODE` | Build biến thể Tự lưu trữ (ẩn phần giao diện quảng bá của bentopdf.com: hero, FAQ, lời chứng thực, chân trang). Mọi công cụ PDF vẫn còn. | `false` |
|
||||
| `BASE_URL` | Triển khai vào thư mục con | `/` |
|
||||
| `VITE_WASM_PYMUPDF_URL` | URL module WASM PyMuPDF | `https://cdn.jsdelivr.net/npm/@bentopdf/pymupdf-wasm@0.11.16/` |
|
||||
| `VITE_WASM_GS_URL` | URL module WASM Ghostscript | `https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/` |
|
||||
| `VITE_WASM_CPDF_URL` | URL module WASM CoherentPDF | `https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/` |
|
||||
| `VITE_TESSERACT_WORKER_URL` | URL tệp script worker OCR | _(trống; dùng CDN mặc định của Tesseract.js)_ |
|
||||
| `VITE_TESSERACT_CORE_URL` | Thư mục runtime lõi OCR | _(trống; dùng CDN mặc định của Tesseract.js)_ |
|
||||
| `VITE_TESSERACT_LANG_URL` | Thư mục traineddata OCR | _(trống; dùng CDN mặc định của Tesseract.js)_ |
|
||||
| `VITE_TESSERACT_AVAILABLE_LANGUAGES` | Các ngôn ngữ OCR hiển thị trong giao diện, phân tách bằng dấu phẩy | _(trống; hiển thị toàn bộ danh mục)_ |
|
||||
| `VITE_OCR_FONT_BASE_URL` | Thư mục phông chữ lớp văn bản OCR | _(trống; dùng URL phông Noto từ xa)_ |
|
||||
| `VITE_DEFAULT_LANGUAGE` | Ngôn ngữ giao diện mặc định | `en` |
|
||||
| `VITE_BRAND_NAME` | Tên thương hiệu tùy chỉnh | `BentoPDF` |
|
||||
| `VITE_BRAND_LOGO` | Đường dẫn logo tương đối so với `public/` | `images/favicon-no-bg.svg` |
|
||||
| `VITE_FOOTER_TEXT` | Văn bản chân trang/bản quyền tùy chỉnh | `© 2026 BentoPDF. All rights reserved.` |
|
||||
| `DISABLE_TOOLS` | ID các công cụ cần ẩn, phân tách bằng dấu phẩy | _(trống; bật mọi công cụ)_ |
|
||||
| `DISABLE_GITHUB_STARS` | Bỏ qua việc lấy số sao GitHub khi tải trang và loại `api.github.com` khỏi CSP. Các bản build Simple Mode luôn bỏ qua. | `false` |
|
||||
| `SITE_URL` | URL công khai được ghi vào các liên kết canonical, hreflang và sitemap. Hãy giữ mặc định trừ khi bạn muốn công cụ tìm kiếm coi bản triển khai của bạn là một trang riêng. | `https://www.bentopdf.com` |
|
||||
| `ALLOW_INDEXING` | Với `SITE_URL` tùy chỉnh, mọi trang được đánh dấu `noindex` để bản của bạn không cạnh tranh với bentopdf.com trong kết quả tìm kiếm. Đặt `true` để cho phép công cụ tìm kiếm lập chỉ mục. | `false` |
|
||||
|
||||
URL các module WASM đã được cấu hình sẵn với CDN mặc định, nên mọi tính năng nâng cao hoạt động ngay. Hãy ghi đè các URL này cho môi trường air-gapped hoặc tự lưu trữ.
|
||||
|
||||
### Công cụ tìm kiếm
|
||||
|
||||
Theo mặc định, mọi trang đều chỉ công cụ tìm kiếm về bentopdf.com như bản gốc, nên bản triển khai của bạn không bị coi là trùng lặp. Bạn không cần thay đổi gì cho một bản riêng tư hoặc nội bộ.
|
||||
|
||||
- **Giữ bản của bạn hoàn toàn ngoài kết quả tìm kiếm:** chạy container với `-e ROBOTS_NOINDEX=true`. Chỉ cần khởi động lại, không cần build lại.
|
||||
- **Biến bản của bạn thành một trang riêng trong kết quả tìm kiếm:** build với `--build-arg SITE_URL=https://your-domain.example --build-arg ALLOW_INDEXING=true`. Nếu thiếu `ALLOW_INDEXING=true`, `SITE_URL` tùy chỉnh sẽ đánh dấu mọi trang là `noindex`.
|
||||
|
||||
### Content-Security-Policy
|
||||
|
||||
Image nginx đi kèm header `Content-Security-Policy` ở chế độ thực thi. Các chỉ thị `script-src`, `connect-src` và `font-src` của CSP được **tạo tại thời điểm build** từ các biến URL `VITE_*` ở trên: mọi host bạn truyền qua `--build-arg` đều tự động được thêm vào chính sách.
|
||||
|
||||
Do đó:
|
||||
|
||||
- Nếu bạn ghi đè `VITE_CORS_PROXY_URL` hoặc `VITE_WASM_*_URL` lúc build, CSP tự động cho phép các origin đó, không cần cấu hình thêm.
|
||||
- Với URL trên `cdn.jsdelivr.net`, `script-src` chỉ cho phép đúng thư mục gói có phiên bản, ví dụ `https://cdn.jsdelivr.net/npm/@bentopdf/pymupdf-wasm@0.11.16/`, không phải toàn bộ CDN. jsDelivr phục vụ bất kỳ gói npm hoặc kho GitHub công khai nào, nên cho phép cả host sẽ để chúng chạy trên bản triển khai của bạn. URL trên mọi host khác được cho phép theo origin.
|
||||
- Nếu bạn cấu hình URL WASM tùy chỉnh lúc _chạy_ qua trang Cài đặt nâng cao trong ứng dụng, các origin đó **không** có trong CSP và trình duyệt sẽ chặn các yêu cầu tới chúng. Điều này cũng áp dụng cho phiên bản khác của cùng một gói trên `cdn.jsdelivr.net`, vì chỉ phiên bản đặt lúc build được cho phép. Cấu hình lúc chạy dành cho thử nghiệm; với URL tùy chỉnh lâu dài, hãy đặt build arg `VITE_*` tương ứng.
|
||||
- Các bản triển khai air-gapped ghi đè cả ba giá trị `VITE_WASM_*_URL` cũng sẽ bị loại các thư mục gói `cdn.jsdelivr.net` đó khỏi CSP (mỗi giá trị mặc định được thay thế, không phải nối thêm). Các mặc định Tesseract OCR trên `cdn.jsdelivr.net` vẫn nằm trong chính sách cho đến khi bạn cũng đặt ba giá trị `VITE_TESSERACT_*`. Tương tự, đặt `VITE_CORS_PROXY_URL` sẽ thay thế mặc định công khai `bentopdf-cors-proxy.bentopdf.workers.dev`.
|
||||
|
||||
CSP có `'unsafe-eval'` trong `script-src` vì runtime LibreOffice WASM (dùng cho các công cụ chuyển đổi Word/Excel/PowerPoint) và thư viện ảnh wasm-vips (dùng cho PDF sang TIFF) biên dịch mã điều phối nội bộ qua `new Function()`. Gỡ nó sẽ làm hỏng các công cụ này. Nếu bạn build ở `SIMPLE_MODE` (không có LibreOffice) và không cần PDF sang TIFF, bạn có thể tự sửa tệp `security-headers.conf` được tạo ra để bỏ `'unsafe-eval'` cho chính sách chặt hơn.
|
||||
|
||||
Với OCR, hãy để trống các biến `VITE_TESSERACT_*` để dùng tài nguyên trực tuyến mặc định, hoặc đặt cả ba cùng lúc cho OCR tự lưu trữ/ngoại tuyến. Ghi đè OCR một phần sẽ bị từ chối vì worker, runtime lõi và thư mục traineddata phải khớp nhau. Để có đầu ra PDF có thể tìm kiếm hoàn toàn ngoại tuyến, hãy đặt thêm `VITE_OCR_FONT_BASE_URL` để phông chữ lớp văn bản OCR được tải từ máy chủ nội bộ của bạn thay vì URL phông Noto công khai.
|
||||
|
||||
`VITE_DEFAULT_LANGUAGE` đặt ngôn ngữ giao diện cho khách truy cập lần đầu. Giá trị được hỗ trợ: `en`, `ar`, `be`, `fr`, `de`, `es`, `zh`, `zh-TW`, `vi`, `tr`, `id`, `it`, `pt`, `nl`, `da`. Người dùng vẫn có thể đổi ngôn ngữ, giá trị này chỉ đổi mặc định.
|
||||
|
||||
Ví dụ:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Thương hiệu tùy chỉnh
|
||||
|
||||
Thay logo, tên và văn bản chân trang BentoPDF mặc định bằng của riêng bạn. Đặt tệp logo vào thư mục `public/` (hoặc dùng một ảnh có sẵn), sau đó truyền các biến thương hiệu lúc build:
|
||||
|
||||
```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 .
|
||||
```
|
||||
|
||||
Thương hiệu hoạt động ở cả chế độ đầy đủ và Simple Mode, và có thể kết hợp với mọi tùy chọn build khác.
|
||||
|
||||
### Tắt một số công cụ
|
||||
|
||||
Ẩn công cụ khỏi giao diện để đáp ứng yêu cầu tuân thủ hoặc bảo mật. Các công cụ bị tắt sẽ bị gỡ khỏi trang chủ, kết quả tìm kiếm, phím tắt và trình tạo quy trình. Truy cập trực tiếp bằng URL sẽ hiển thị trang "công cụ không khả dụng".
|
||||
|
||||
ID công cụ là URL của trang bỏ `.html`. Ví dụ, nếu công cụ nằm ở `bentopdf.com/edit-pdf.html`, ID là `edit-pdf`.
|
||||
|
||||
#### Tìm ID công cụ
|
||||
|
||||
Cách dễ nhất: mở bất kỳ công cụ nào trong BentoPDF và nhìn vào URL. Phần cuối của đường dẫn (bỏ `.html`) chính là ID công cụ.
|
||||
|
||||
<details>
|
||||
<summary>Danh sách đầy đủ ID công cụ</summary>
|
||||
|
||||
**Chỉnh sửa & Chú thích:** `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`
|
||||
|
||||
**Chuyển sang 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`
|
||||
|
||||
**Chuyển từ 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`
|
||||
|
||||
**Sắp xếp & Quản lý:** `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`
|
||||
|
||||
**Tối ưu hóa & Sửa chữa:** `compress-pdf`, `pdf-to-pdfa`, `fix-page-size`, `linearize-pdf`, `remove-restrictions`, `repair-pdf`, `rasterize-pdf`, `deskew-pdf`, `font-to-outline`
|
||||
|
||||
**Bảo mật:** `encrypt-pdf`, `sanitize-pdf`, `decrypt-pdf`, `flatten-pdf`, `remove-metadata`, `change-permissions`, `digital-sign-pdf`, `validate-signature-pdf`, `timestamp-pdf`
|
||||
|
||||
</details>
|
||||
|
||||
#### Cách 1: Lúc build (build arg của Docker)
|
||||
|
||||
```bash
|
||||
docker build \
|
||||
--build-arg DISABLE_TOOLS="edit-pdf,sign-pdf,encrypt-pdf" \
|
||||
-t bentopdf .
|
||||
```
|
||||
|
||||
Cách này ghi danh sách công cụ bị tắt vào bundle JavaScript. Cần build lại để thay đổi.
|
||||
|
||||
#### Cách 2: Lúc chạy (config.json)
|
||||
|
||||
Gắn một tệp `config.json` vào thư mục được phục vụ, không cần build lại:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Hoặc với 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
|
||||
```
|
||||
|
||||
Có thể kết hợp cả hai cách, các danh sách sẽ được gộp. Nếu một công cụ xuất hiện ở một trong hai, nó sẽ bị tắt.
|
||||
|
||||
#### Tắt tính năng của trình chỉnh sửa
|
||||
|
||||
Bạn cũng có thể tắt các tính năng cụ thể trong Trình chỉnh sửa PDF (ví dụ che thông tin, chú thích, biểu mẫu) mà không cần tắt cả công cụ chỉnh sửa. Thêm `editorDisabledCategories` vào `config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"editorDisabledCategories": ["redaction", "annotation-stamp"]
|
||||
}
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Danh sách đầy đủ danh mục của trình chỉnh sửa</summary>
|
||||
|
||||
**Zoom:** `zoom`, `zoom-in`, `zoom-out`, `zoom-fit-page`, `zoom-fit-width`, `zoom-marquee`, `zoom-level`
|
||||
|
||||
**Chú thích:** `annotation`, `annotation-markup`, `annotation-highlight`, `annotation-underline`, `annotation-strikeout`, `annotation-squiggly`, `annotation-ink`, `annotation-text`, `annotation-stamp`
|
||||
|
||||
**Hình dạng:** `annotation-shape`, `annotation-rectangle`, `annotation-circle`, `annotation-line`, `annotation-arrow`, `annotation-polygon`, `annotation-polyline`
|
||||
|
||||
**Biểu mẫu:** `form`, `form-textfield`, `form-checkbox`, `form-radio`, `form-select`, `form-listbox`, `form-fill-mode`
|
||||
|
||||
**Che thông tin:** `redaction`, `redaction-area`, `redaction-text`, `redaction-apply`, `redaction-clear`
|
||||
|
||||
**Tài liệu:** `document`, `document-open`, `document-close`, `document-print`, `document-capture`, `document-export`, `document-fullscreen`, `document-protect`
|
||||
|
||||
**Trang:** `page`, `spread`, `rotate`, `scroll`, `navigation`
|
||||
|
||||
**Bảng điều khiển:** `panel`, `panel-sidebar`, `panel-search`, `panel-comment`
|
||||
|
||||
**Công cụ:** `tools`, `pan`, `pointer`, `capture`
|
||||
|
||||
**Lựa chọn:** `selection`, `selection-copy`
|
||||
|
||||
**Lịch sử:** `history`, `history-undo`, `history-redo`
|
||||
|
||||
</details>
|
||||
|
||||
Các danh mục có cấu trúc phân cấp: tắt một mục cha (ví dụ `annotation`) sẽ tắt toàn bộ mục con của nó.
|
||||
|
||||
### Tắt bộ đếm sao GitHub
|
||||
|
||||
Thanh điều hướng hiển thị số sao GitHub trực tiếp, được lấy từ `api.github.com` khi tải trang. Đây là yêu cầu bên ngoài duy nhất không phục vụ một tính năng PDF. Hãy tắt nó lúc build để gỡ mã lấy dữ liệu khỏi bundle và loại `api.github.com` khỏi Content-Security-Policy:
|
||||
|
||||
```bash
|
||||
docker build --build-arg DISABLE_GITHUB_STARS=true -t bentopdf .
|
||||
```
|
||||
|
||||
Các bản build Simple Mode (`bentopdf-simple`) luôn bỏ qua bộ đếm sao, cờ này chỉ cần cho bản Thương mại hoặc các bản build đầy đủ tùy chỉnh.
|
||||
|
||||
### URL WASM tùy chỉnh (Air-Gapped / Tự lưu trữ)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> URL WASM được ghi vào JavaScript lúc **build**. Các tệp WASM được **trình duyệt của người dùng** tải về lúc chạy, Docker không tải chúng trong quá trình build. Với mạng air-gapped, bạn phải lưu trữ các tệp WASM trên một máy chủ nội bộ mà trình duyệt truy cập được.
|
||||
|
||||
**Quy trình air-gapped đầy đủ:**
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Dùng các mã được in bởi `bash scripts/prepare-airgap.sh --list-ocr-languages`, hoặc tìm theo tên bằng `bash scripts/prepare-airgap.sh --search-ocr-language <term>`, cho `--ocr-languages`. Khi build với một tập con OCR giới hạn, hãy truyền cùng các mã đó cho `VITE_TESSERACT_AVAILABLE_LANGUAGES` để ứng dụng chỉ hiển thị các ngôn ngữ đã đóng gói. Để có đầu ra OCR ngoại tuyến đầy đủ, hãy lưu trữ thêm thư mục `ocr-fonts/` đi kèm và trỏ `VITE_OCR_FONT_BASE_URL` tới nó.
|
||||
|
||||
Đặt một biến thành chuỗi rỗng để tắt module đó (người dùng phải tự cấu hình qua Cài đặt nâng cao).
|
||||
|
||||
## Cổng tùy chỉnh
|
||||
|
||||
Theo mặc định, BentoPDF lắng nghe ở cổng `8080` bên trong container. Để đổi, hãy đặt biến môi trường `PORT` lúc chạy:
|
||||
|
||||
```bash
|
||||
docker run -p 3000:9090 -e PORT=9090 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
| Biến | Mô tả | Mặc định |
|
||||
| ------ | ------------------------------------ | -------- |
|
||||
| `PORT` | Cổng lắng nghe Nginx trong container | `8080` |
|
||||
|
||||
Cách này hoạt động với cả Dockerfile tiêu chuẩn và nonroot.
|
||||
|
||||
## User ID tùy chỉnh (PUID/PGID)
|
||||
|
||||
Với các môi trường yêu cầu chạy bằng một người dùng không phải root cụ thể (thiết bị NAS, Kubernetes có security context, chính sách của tổ chức), BentoPDF cung cấp một Dockerfile riêng hỗ trợ PUID/PGID kiểu LSIO.
|
||||
|
||||
### Build và chạy
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Biến môi trường
|
||||
|
||||
| Biến | Mô tả | Mặc định |
|
||||
| -------------- | -------------------- | -------- |
|
||||
| `PUID` | User ID để chạy | `1000` |
|
||||
| `PGID` | Group ID để chạy | `1000` |
|
||||
| `PORT` | Cổng lắng nghe Nginx | `8080` |
|
||||
| `DISABLE_IPV6` | Tắt listener 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
|
||||
```
|
||||
|
||||
### Cách hoạt động
|
||||
|
||||
Container khởi động bằng root, tạo một người dùng với PUID/PGID đã chỉ định, điều chỉnh quyền sở hữu trên mọi thư mục có thể ghi, rồi hạ quyền bằng `su-exec`. Tiến trình nginx chạy hoàn toàn dưới người dùng bạn chỉ định.
|
||||
|
||||
> [!NOTE]
|
||||
> `Dockerfile` tiêu chuẩn dùng `nginx-unprivileged` (UID 101) và được khuyến nghị cho hầu hết triển khai. Chỉ dùng `Dockerfile.nonroot` khi bạn cần một UID/GID cụ thể.
|
||||
|
||||
> [!WARNING]
|
||||
> PUID/PGID không được là `0` (root). Entrypoint kiểm tra đầu vào và sẽ thoát với lỗi nếu giá trị không hợp lệ.
|
||||
|
||||
## Với Traefik (Reverse Proxy)
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Với Caddy (Reverse Proxy)
|
||||
|
||||
```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"
|
||||
}
|
||||
```
|
||||
|
||||
## Giới hạn tài nguyên
|
||||
|
||||
```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 (tích hợp Systemd)
|
||||
|
||||
[Quadlet](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html) cho phép bạn chạy container Podman như các dịch vụ systemd. Rất phù hợp cho triển khai production trên hệ thống Linux.
|
||||
|
||||
### Thiết lập Quadlet cơ bản
|
||||
|
||||
Tạo tệp unit container tại `~/.config/containers/systemd/bentopdf.container` (người dùng) hoặc `/etc/containers/systemd/bentopdf.container` (hệ thống):
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Bật và khởi động
|
||||
|
||||
```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]
|
||||
> Với triển khai toàn hệ thống, dùng `systemctl` không kèm cờ `--user` và đặt tệp trong `/etc/containers/systemd/`.
|
||||
|
||||
### Quadlet với kiểm tra sức khỏe
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Tự động cập nhật với Quadlet
|
||||
|
||||
Podman có thể tự động cập nhật container khi có image mới:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Cấu hình mạng Quadlet
|
||||
|
||||
Để cấu hình mạng tùy chỉnh, tạo tệp mạng `bentopdf.network`:
|
||||
|
||||
```ini
|
||||
[Network]
|
||||
Subnet=10.89.0.0/24
|
||||
Gateway=10.89.0.1
|
||||
```
|
||||
|
||||
Sau đó tham chiếu nó trong tệp container của bạn:
|
||||
|
||||
```ini
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf
|
||||
PublishPort=3000:8080
|
||||
Network=bentopdf.network
|
||||
```
|
||||
|
||||
## Cập nhật
|
||||
|
||||
```bash
|
||||
# Pull latest image
|
||||
docker compose pull
|
||||
|
||||
# Recreate container
|
||||
docker compose up -d
|
||||
```
|
||||
@@ -0,0 +1,266 @@
|
||||
# Triển khai lên Hostinger
|
||||
|
||||
[Hostinger](https://hostinger.com) là nhà cung cấp shared hosting phổ biến. Hướng dẫn này nói về cách triển khai BentoPDF lên shared hosting của Hostinger.
|
||||
|
||||
## Yêu cầu
|
||||
|
||||
- Gói hosting Hostinger có quyền truy cập File Manager
|
||||
- Đã cài Node.js trên máy để build
|
||||
|
||||
## Bước 1: Build dự án
|
||||
|
||||
```bash
|
||||
git clone https://github.com/alam00000/bentopdf.git
|
||||
cd bentopdf
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Các tệp đã build sẽ nằm trong thư mục `dist`.
|
||||
|
||||
## Bước 2: Tải lên Hostinger
|
||||
|
||||
### Triển khai trên tên miền gốc
|
||||
|
||||
1. Đăng nhập vào tài khoản Hostinger của bạn
|
||||
2. Vào **File Manager** → **public_html**
|
||||
3. **Xóa** mọi tệp hiện có (sao lưu nếu cần)
|
||||
4. **Tải lên** toàn bộ nội dung thư mục `dist` trên máy của bạn vào `public_html`
|
||||
|
||||
### Triển khai trong thư mục con
|
||||
|
||||
Nếu triển khai vào thư mục con (ví dụ `yourdomain.com/pdf-tools/`):
|
||||
|
||||
1. Build với base URL đúng:
|
||||
|
||||
```bash
|
||||
BASE_URL=/pdf-tools/ npm run build
|
||||
```
|
||||
|
||||
2. Tạo thư mục trong Hostinger:
|
||||
- Vào **File Manager** → **public_html**
|
||||
- Tạo thư mục mới: `pdf-tools`
|
||||
3. Tải toàn bộ nội dung `dist` lên `public_html/pdf-tools/`
|
||||
|
||||
## Bước 3: Tạo tệp .htaccess
|
||||
|
||||
Tạo tệp `.htaccess` ở thư mục gốc của bản triển khai (`public_html` hoặc `public_html/pdf-tools/`):
|
||||
|
||||
::: warning Quan trọng
|
||||
Với triển khai trong thư mục con, đổi `RewriteBase /` thành `RewriteBase /pdf-tools/` (hoặc tên thư mục của bạn).
|
||||
:::
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Ví dụ .htaccess cho thư mục con
|
||||
|
||||
Với `yourdomain.com/pdf-tools/`, hãy cập nhật các dòng sau:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### Tệp WASM không tải được
|
||||
|
||||
Đảm bảo các MIME type được đặt đúng trong `.htaccess`:
|
||||
|
||||
```apache
|
||||
AddType application/wasm .wasm
|
||||
```
|
||||
|
||||
### Công cụ LibreOffice không hoạt động
|
||||
|
||||
Các header bảo mật rất quan trọng cho SharedArrayBuffer:
|
||||
|
||||
```apache
|
||||
Header always set Cross-Origin-Opener-Policy "same-origin"
|
||||
Header always set Cross-Origin-Embedder-Policy "require-corp"
|
||||
```
|
||||
|
||||
Nếu các header không được áp dụng, hãy liên hệ bộ phận hỗ trợ của Hostinger để bật `mod_headers`.
|
||||
|
||||
### Lỗi 404 khi tải lại trang
|
||||
|
||||
Đảm bảo quy tắc đuôi `.html` và các tuyến ngôn ngữ được cấu hình đúng. BentoPDF dùng các tệp HTML tĩnh, không dùng định tuyến 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]
|
||||
```
|
||||
|
||||
### Giới hạn tải tệp lên
|
||||
|
||||
Hostinger có thể giới hạn kích thước tệp. Hãy tải các tệp WASM lên riêng nếu tải hàng loạt thất bại.
|
||||
@@ -0,0 +1,538 @@
|
||||
# Hướng dẫn tự lưu trữ
|
||||
|
||||
BentoPDF có thể được tự lưu trữ trên hạ tầng của riêng bạn. Hướng dẫn này trình bày nhiều tùy chọn triển khai.
|
||||
|
||||
## Bắt đầu nhanh với Docker / Podman
|
||||
|
||||
Cách nhanh nhất để tự lưu trữ BentoPDF:
|
||||
|
||||
> [!TIP]
|
||||
> BentoPDF có hai bản dựng:
|
||||
>
|
||||
> - **Bản dựng Self-Hosted**: `ghcr.io/alam00000/bentopdf-simple:latest`. Có mọi công cụ PDF, **không** có phần giao diện tiếp thị (không có hero, FAQ, lời chứng thực, chân trang). Dùng bản này cho các triển khai nội bộ, theo nhóm hoặc tổ chức. Đây **không phải** là phiên bản "lite" bị giảm tính năng.
|
||||
> - **Bản dựng Commercial**: `ghcr.io/alam00000/bentopdf:latest`. Toàn bộ trang tiếp thị, được chính bentopdf.com và các chủ sở hữu giấy phép thương mại chạy triển khai công khai sử dụng.
|
||||
>
|
||||
> Nếu còn phân vân: hãy dùng bản dựng Self-Hosted.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Chuyển đổi tệp Office cần `SharedArrayBuffer`, nghĩa là ứng dụng phải được cô lập cross-origin và phục vụ từ một ngữ cảnh bảo mật. Image chính thức đã gửi sẵn các header COOP/COEP cần thiết, nhưng trình duyệt vẫn tắt `SharedArrayBuffer` trên các origin HTTP mạng nội bộ như `http://192.168.x.x`.
|
||||
>
|
||||
> Chỉ dùng `http://localhost` để thử nghiệm trên cùng một thiết bị. Nếu người dùng truy cập BentoPDF qua IP hoặc tên máy trong mạng LAN, hãy dùng 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
|
||||
```
|
||||
|
||||
Hoặc với 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)
|
||||
|
||||
Chạy BentoPDF như một dịch vụ systemd. Tạo `~/.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
|
||||
```
|
||||
|
||||
Xem [hướng dẫn triển khai Docker](/vi/self-hosting/docker) để biết đầy đủ tài liệu về Quadlet.
|
||||
|
||||
## Dựng từ mã nguồn
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Tùy chọn cấu hình
|
||||
|
||||
### Bản dựng Self-Hosted (Simple Mode)
|
||||
|
||||
Bản dựng Self-Hosted (image `bentopdf-simple`, còn gọi là Simple Mode) **giống hệt về chức năng** với bản dựng Commercial: mọi công cụ PDF đều có và hoạt động như nhau. Nó chỉ ẩn phần giao diện tiếp thị vốn chỉ phù hợp với chính bentopdf.com hoặc một triển khai công khai thương mại. **Đây không phải là phiên bản bị giảm tính năng hay "lite".**
|
||||
|
||||
**Những gì bản dựng Self-Hosted ẩn đi** (chỉ là phần hiển thị, không có tính năng PDF nào bị gỡ bỏ):
|
||||
|
||||
- Thanh điều hướng, phần hero, phần tính năng, FAQ, lời chứng thực, chân trang
|
||||
- Đổi tiêu đề trang thành "Công cụ PDF"
|
||||
|
||||
**Những gì bản dựng Self-Hosted giữ lại** (mọi thứ thực sự xử lý PDF):
|
||||
|
||||
- Mọi công cụ PDF (gộp, tách, chỉnh sửa, ký, OCR, chuyển đổi Office, v.v.)
|
||||
- Hỗ trợ thương hiệu tùy chỉnh, toàn bộ cấu hình lúc dựng và lúc chạy
|
||||
|
||||
Bản dựng Commercial (`ghcr.io/alam00000/bentopdf:latest`) là bản vận hành chính bentopdf.com và được các chủ sở hữu giấy phép thương mại chạy triển khai công khai sử dụng. Nó bổ sung hero, FAQ, lời chứng thực và chân trang, những thứ không phù hợp với một công cụ nội bộ.
|
||||
|
||||
Nếu bạn tự lưu trữ BentoPDF cho nhóm, tổ chức hoặc làm công cụ nội bộ, hãy dùng bản dựng Self-Hosted:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Xem [SIMPLE_MODE.md](https://github.com/alam00000/bentopdf/blob/main/SIMPLE_MODE.md) để biết chi tiết.
|
||||
|
||||
### Bản dựng Commercial (triển khai công khai với thương hiệu riêng)
|
||||
|
||||
Bản dựng Commercial (image `bentopdf`, không có hậu tố `-simple`) là bản vận hành chính bentopdf.com. Nó gồm toàn bộ trang tiếp thị (hero, tính năng, FAQ, lời chứng thực, chân trang) cùng mọi công cụ PDF. Hãy dùng bản dựng này khi bạn muốn **triển khai BentoPDF thành dịch vụ PDF công khai dưới thương hiệu của riêng bạn**, ví dụ:
|
||||
|
||||
- Bạn chạy BentoPDF như một SaaS cho người dùng cuối trên tên miền của riêng bạn
|
||||
- Bạn muốn có trải nghiệm trang chủ (phần tiếp thị cùng công cụ), không chỉ giao diện công cụ trơn
|
||||
- Bạn là chủ sở hữu giấy phép thương mại và nhúng BentoPDF vào một sản phẩm thương mại
|
||||
|
||||
**Chạy nguyên bản** (thương hiệu BentoPDF, hữu ích để xem trước bản dựng):
|
||||
|
||||
```bash
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
```
|
||||
|
||||
**Dựng với thương hiệu riêng** (quy trình thương mại điển hình):
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Mọi tùy chọn lúc dựng khác (`BASE_URL`, `VITE_DEFAULT_LANGUAGE`, `DISABLE_TOOLS`, ghi đè URL WASM, v.v.) hoạt động giống như trên bản dựng Self-Hosted.
|
||||
|
||||
::: warning Giấy phép
|
||||
Chạy bản dựng Commercial được phép theo một trong hai tùy chọn giấy phép của BentoPDF:
|
||||
|
||||
- **AGPL-3.0** (miễn phí): được phép nếu triển khai của bạn công bố toàn bộ mã nguồn theo AGPL, bao gồm mọi chỉnh sửa thương hiệu và logic nghiệp vụ liên quan.
|
||||
- **Giấy phép thương mại** ($79 trọn đời): bắt buộc cho các triển khai mã nguồn đóng / độc quyền, nơi bạn không mở mã nguồn của bản fork thương hiệu hay mã nghiệp vụ.
|
||||
|
||||
Xem [trang Giấy phép](https://www.bentopdf.com/licensing) để so sánh đầy đủ. Các mô-đun WASM theo giấy phép AGPL (PyMuPDF, Ghostscript, CoherentPDF) được tải từ CDN lúc chạy, nên chúng không nằm trong image của bạn và không thay đổi tình trạng giấy phép của bạn.
|
||||
:::
|
||||
|
||||
### Base URL
|
||||
|
||||
Triển khai vào một thư mục con:
|
||||
|
||||
```bash
|
||||
BASE_URL=/pdf-tools/ npm run build
|
||||
```
|
||||
|
||||
### Thương hiệu tùy chỉnh
|
||||
|
||||
Thay logo, tên và văn bản chân trang mặc định của BentoPDF bằng của bạn ngay lúc dựng:
|
||||
|
||||
| Variable | Mô tả | Mặc định |
|
||||
| ------------------ | -------------------------------------------- | --------------------------------------- |
|
||||
| `VITE_BRAND_NAME` | Tên thương hiệu hiển thị ở đầu và chân trang | `BentoPDF` |
|
||||
| `VITE_BRAND_LOGO` | Đường dẫn logo, tính từ `public/` | `images/favicon-no-bg.svg` |
|
||||
| `VITE_FOOTER_TEXT` | Văn bản chân trang / bản quyền tùy chỉnh | `© 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
|
||||
```
|
||||
|
||||
Hoặc qua 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 .
|
||||
```
|
||||
|
||||
Thương hiệu hoạt động ở cả chế độ đầy đủ lẫn Simple Mode, và có thể kết hợp với mọi tùy chọn lúc dựng khác (`BASE_URL`, `SIMPLE_MODE`, `VITE_DEFAULT_LANGUAGE`).
|
||||
|
||||
### Tắt công cụ cụ thể
|
||||
|
||||
Ẩn từng công cụ vì lý do tuân thủ hoặc bảo mật. Công cụ bị tắt sẽ bị loại khỏi trang chủ, tìm kiếm, phím tắt, trình tạo quy trình và truy cập trực tiếp bằng URL.
|
||||
|
||||
ID công cụ là URL của trang bỏ đi `.html`. Hãy mở bất kỳ công cụ nào và xem URL (ví dụ: `edit-pdf`, `sign-pdf`, `encrypt-pdf`).
|
||||
|
||||
**Lúc dựng** (được đưa thẳng vào bundle):
|
||||
|
||||
```bash
|
||||
DISABLE_TOOLS="edit-pdf,sign-pdf" npm run build
|
||||
```
|
||||
|
||||
**Lúc chạy** (không cần dựng lại, gắn một tệp `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
|
||||
```
|
||||
|
||||
Có thể kết hợp cả hai cách, các danh sách sẽ được gộp lại.
|
||||
|
||||
Bạn cũng có thể tắt một số tính năng bên trong Trình chỉnh sửa PDF (ví dụ: biên tập che thông tin) mà không cần tắt cả công cụ, bằng cách thêm `editorDisabledCategories` vào `config.json`. Xem [hướng dẫn Docker](/vi/self-hosting/docker#tat-tinh-nang-cua-trinh-chinh-sua) để biết danh sách đầy đủ các nhóm.
|
||||
|
||||
## Hướng dẫn triển khai
|
||||
|
||||
Chọn nền tảng của bạn:
|
||||
|
||||
- [Vercel](/vi/self-hosting/vercel)
|
||||
- [Netlify](/vi/self-hosting/netlify)
|
||||
- [Cloudflare Pages](/vi/self-hosting/cloudflare)
|
||||
- [AWS S3 + CloudFront](/vi/self-hosting/aws)
|
||||
- [Hostinger](/vi/self-hosting/hostinger)
|
||||
- [Nginx](/vi/self-hosting/nginx)
|
||||
- [Apache](/vi/self-hosting/apache)
|
||||
- [Docker](/vi/self-hosting/docker)
|
||||
- [Kubernetes](/vi/self-hosting/kubernetes)
|
||||
- [CORS Proxy](/vi/self-hosting/cors-proxy) - Bắt buộc cho chữ ký số
|
||||
|
||||
## Các sự cố thường gặp
|
||||
|
||||
### Chuyển Word / ODT / Excel / PowerPoint sang PDF bị treo (SharedArrayBuffer không khả dụng)
|
||||
|
||||
**Triệu chứng**: Các chuyển đổi tài liệu dựa trên LibreOffice (Word, ODT, Excel, PowerPoint sang PDF) bị treo ở khoảng 55% hoặc không thể bắt đầu. Bảng điều khiển trình duyệt có thể hiển thị:
|
||||
|
||||
> `ReferenceError: SharedArrayBuffer is not defined`
|
||||
|
||||
...hoặc `window.crossOriginIsolated` trả về `false`, hoặc quá trình biên dịch WASM báo `expected magic word 00 61 73 6d, found 1f 8b 08 08`.
|
||||
|
||||
**Nguyên nhân**: LibreOffice WASM cần `SharedArrayBuffer`, thứ mà trình duyệt chỉ bật khi trang được **cô lập cross-origin** VÀ được phục vụ từ một **ngữ cảnh bảo mật**. Điều đó nghĩa là cần đảm bảo hai điều:
|
||||
|
||||
1. Mọi phản hồi đều có cả hai header:
|
||||
- `Cross-Origin-Embedder-Policy: require-corp`
|
||||
- `Cross-Origin-Opener-Policy: same-origin`
|
||||
2. Trang được phục vụ từ `https://...` hoặc `http://localhost`. HTTP thường trên IP mạng LAN (ví dụ `http://192.168.x.x`) KHÔNG được coi là bảo mật: trình duyệt tắt `SharedArrayBuffer` ở đó.
|
||||
|
||||
Việc lệch `00 61 73 6d / 1f 8b 08 08` là một triệu chứng phụ riêng: các tệp `.wasm.gz` / `.data.gz` đã nén sẵn thiếu header phản hồi `Content-Encoding: gzip`, nên trình duyệt nhận dữ liệu gzip thô thay vì WASM đã giải nén.
|
||||
|
||||
**Cách khắc phục**: xem hướng dẫn triển khai riêng của nền tảng bạn để biết cấu hình chính xác:
|
||||
|
||||
- [Nginx →](/vi/self-hosting/nginx#chuyen-word-odt-excel-sang-pdf-khong-hoat-đong)
|
||||
- [Apache →](/vi/self-hosting/apache#chuyen-word-odt-excel-sang-pdf-khong-hoat-đong)
|
||||
- [AWS S3 + CloudFront →](/vi/self-hosting/aws#buoc-3b-chinh-sach-header-phan-hoi-bat-buoc-cho-libreoffice-wasm)
|
||||
- [Cloudflare Pages →](/vi/self-hosting/cloudflare#tep-cau-hinh) (tệp `_headers`)
|
||||
- [Netlify →](/vi/self-hosting/netlify#chuyen-word-odt-excel-sang-pdf-bi-đung-o-55) (`netlify.toml`)
|
||||
- [Vercel →](/vi/self-hosting/vercel#chuyen-word-odt-excel-sang-pdf-khong-hoat-đong) (`vercel.json`)
|
||||
- [Hostinger →](/vi/self-hosting/hostinger#cong-cu-libreoffice-khong-hoat-đong) (`.htaccess`)
|
||||
- [Kubernetes →](/vi/self-hosting/kubernetes#đam-bao-cac-header-sharedarraybuffer-van-hoat-đong-ingress-gateway)
|
||||
- **Docker**: được xử lý tự động bởi cấu hình nginx đi kèm, không cần làm gì thêm.
|
||||
|
||||
**Kiểm tra**: mở Console của DevTools trên bất kỳ trang BentoPDF nào và chạy:
|
||||
|
||||
```js
|
||||
console.log(window.crossOriginIsolated); // should be true
|
||||
console.log(typeof SharedArrayBuffer); // should be "function"
|
||||
```
|
||||
|
||||
Nếu trang dùng HTTPS hoặc `http://localhost` VÀ cả hai header COEP/COOP đều có trên mọi phản hồi, cả hai phép kiểm tra sẽ đạt. Nếu bạn đang dùng `http://192.168.x.x` hoặc một origin HTTP không phải loopback khác, hãy dùng HTTPS: không có cách khắc phục nào chỉ bằng header.
|
||||
|
||||
### Tệp `.mjs` được phục vụ với `application/octet-stream`
|
||||
|
||||
**Triệu chứng**: Ký PDF / Form Filler / một số công cụ khác hiển thị trình xem trống hoặc không tải được. Bảng điều khiển trình duyệt báo:
|
||||
|
||||
> `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.`
|
||||
|
||||
**Nguyên nhân**: Máy chủ web hoặc reverse proxy của bạn không có ánh xạ kiểu MIME cho tệp `.mjs` (trình xem PDF đi kèm dùng module ES với phần mở rộng này). Nhiều cấu hình máy chủ mặc định dùng `application/octet-stream` cho các phần mở rộng không nhận ra, và trình duyệt từ chối thực thi chúng như module ES.
|
||||
|
||||
**Cách khắc phục**: xem hướng dẫn triển khai riêng của nền tảng bạn để biết đoạn cấu hình chính xác:
|
||||
|
||||
- [Nginx →](/vi/self-hosting/nginx#ky-pdf-hoac-form-filler-hien-thi-trinh-xem-trong-loi-mime-mjs)
|
||||
- [Apache →](/vi/self-hosting/apache#ky-pdf-hoac-form-filler-hien-thi-trinh-xem-trong-loi-mime-mjs)
|
||||
- [AWS S3 + CloudFront →](/vi/self-hosting/aws#buoc-2-build-va-tai-len) (xem `aws s3 cp ... --include "*.mjs"`)
|
||||
- [Kubernetes →](/vi/self-hosting/kubernetes#loi-kieu-mime-cua-mjs-ky-pdf-iframe-form-filler-bi-trong)
|
||||
- **Docker, Vercel, Netlify, Cloudflare Pages, Hostinger**: được xử lý tự động, không cần làm gì thêm.
|
||||
|
||||
**Kiểm tra**: mở DevTools → tab Network, tìm yêu cầu `.mjs` bị lỗi, xem header phản hồi `Content-Type`. Giá trị phải là `application/javascript`. Nếu vẫn là `application/octet-stream`, có thể một reverse proxy hoặc CDN bên ngoài đang tự đoán lại kiểu: hãy kiểm tra từng lớp trong chuỗi phục vụ của bạn.
|
||||
|
||||
## Cấu hình WASM (thành phần AGPL)
|
||||
|
||||
BentoPDF **không đóng gói** các thư viện xử lý theo giấy phép AGPL trong mã nguồn của mình, nhưng **cấu hình sẵn các URL CDN** để mọi tính năng hoạt động ngay, không cần thiết lập thủ công.
|
||||
|
||||
::: tip Không cần cấu hình theo mặc định
|
||||
Từ v2.0.0, các mô-đun WASM được cấu hình sẵn để tải từ CDN jsDelivr thông qua biến môi trường. Mọi tính năng nâng cao hoạt động ngay mà người dùng không cần cấu hình gì.
|
||||
:::
|
||||
|
||||
| Thành phần | Giấy phép | Tính năng |
|
||||
| --------------- | --------- | ------------------------------------------------------------- |
|
||||
| **PyMuPDF** | AGPL-3.0 | Chuyển đổi EPUB/MOBI/FB2/XPS, trích xuất ảnh, trích xuất bảng |
|
||||
| **Ghostscript** | AGPL-3.0 | Chuyển đổi PDF/A, nén, chỉnh nghiêng, rasterize |
|
||||
| **CoherentPDF** | AGPL-3.0 | Mục lục, tệp đính kèm, gộp PDF kèm dấu trang |
|
||||
|
||||
### Biến môi trường mặc định
|
||||
|
||||
Các biến này được đặt trong `.env.production` và đưa thẳng vào bản dựng:
|
||||
|
||||
```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=
|
||||
```
|
||||
|
||||
### Ghi đè URL WASM
|
||||
|
||||
Bạn có thể ghi đè các giá trị mặc định lúc dựng cho các triển khai tùy chỉnh:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Để tắt hoàn toàn một mô-đun (yêu cầu người dùng tự cấu hình qua Cài đặt nâng cao), hãy đặt biến của nó thành chuỗi rỗng.
|
||||
|
||||
Với OCR, hoặc để trống tất cả biến `VITE_TESSERACT_*` và dùng các tài nguyên trực tuyến mặc định, hoặc đặt đồng thời các URL worker/core/lang cho OCR tự lưu trữ / ngoại tuyến. Nếu bạn chỉ đóng gói một số ngôn ngữ OCR, hãy đặt thêm `VITE_TESSERACT_AVAILABLE_LANGUAGES` với cùng các mã phân tách bằng dấu phẩy để giao diện chỉ đưa ra các ngôn ngữ đã cài và các lựa chọn không được hỗ trợ báo lỗi mô tả rõ ràng. Để xuất PDF có thể tìm kiếm hoàn toàn ngoại tuyến, hãy đặt thêm `VITE_OCR_FONT_BASE_URL` trỏ đến thư mục nội bộ phục vụ các phông chữ OCR đi kèm.
|
||||
|
||||
Người dùng cũng có thể ghi đè các giá trị mặc định này bất cứ lúc nào qua **Cài đặt nâng cao** trong giao diện: các ghi đè của người dùng lưu trong trình duyệt được ưu tiên hơn giá trị mặc định của môi trường.
|
||||
|
||||
### Triển khai cách ly mạng / ngoại tuyến
|
||||
|
||||
Dành cho các mạng không có internet (chính phủ, y tế, tài chính, v.v.). Các URL WASM được đưa thẳng vào JavaScript **lúc dựng**, còn các tệp WASM thực tế được **trình duyệt của người dùng** tải về lúc chạy. Vì vậy bạn cần chuẩn bị mọi thứ trên một máy có internet rồi chuyển vào mạng cách ly.
|
||||
|
||||
#### Script tự động (khuyến nghị)
|
||||
|
||||
Script `prepare-airgap.sh` đi kèm tự động hóa toàn bộ quy trình: tải các gói WASM, dựng image Docker và tạo một bundle độc lập cùng script thiết lập.
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Lệnh này tạo ra một thư mục bundle:
|
||||
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
Chuyển bundle vào mạng cách ly qua USB, kho artifact nội bộ hoặc phương thức được phê duyệt. Sau đó chạy script thiết lập đi kèm:
|
||||
|
||||
```bash
|
||||
cd bentopdf-airgap-bundle
|
||||
bash setup.sh
|
||||
```
|
||||
|
||||
Script thiết lập sẽ nạp image Docker, giải nén các tệp WASM và tùy chọn khởi động container.
|
||||
|
||||
**Tùy chọn của script:**
|
||||
|
||||
| Flag | Mô tả | Mặc định |
|
||||
| ------------------------------ | ------------------------------------------------------ | ------------------------------ |
|
||||
| `--wasm-base-url <url>` | Nơi các WASM sẽ được lưu trữ nội bộ | _(bắt buộc, sẽ hỏi nếu thiếu)_ |
|
||||
| `--image-name <name>` | Tag image Docker | `bentopdf` |
|
||||
| `--output-dir <path>` | Thư mục bundle đầu ra | `./bentopdf-airgap-bundle` |
|
||||
| `--simple-mode` | Bật Simple Mode | tắt |
|
||||
| `--base-url <path>` | URL gốc của thư mục con (ví dụ `/pdf/`) | `/` |
|
||||
| `--language <code>` | Ngôn ngữ giao diện mặc định (ví dụ `fr`, `de`) | _(không có)_ |
|
||||
| `--brand-name <name>` | Tên thương hiệu tùy chỉnh | _(không có)_ |
|
||||
| `--brand-logo <path>` | Đường dẫn logo, tính từ `public/` | _(không có)_ |
|
||||
| `--footer-text <text>` | Văn bản chân trang tùy chỉnh | _(không có)_ |
|
||||
| `--ocr-languages <list>` | Các ngôn ngữ OCR cần đóng gói, phân tách bằng dấu phẩy | `eng` |
|
||||
| `--list-ocr-languages` | In các mã và tên OCR được hỗ trợ rồi thoát | tắt |
|
||||
| `--search-ocr-language <term>` | Tìm mã OCR theo tên hoặc chữ viết tắt | tắt |
|
||||
| `--dockerfile <path>` | Dockerfile cần dùng | `Dockerfile` |
|
||||
| `--skip-docker` | Bỏ qua bước dựng và xuất Docker | tắt |
|
||||
| `--skip-wasm` | Bỏ qua tải WASM (dùng lại các tệp `.tgz` có sẵn) | tắt |
|
||||
|
||||
Lời nhắc tương tác cũng chấp nhận `list` để in toàn bộ danh sách mã Tesseract được hỗ trợ và `search <term>` để tìm kết quả khớp như `search german` hoặc `search chi`.
|
||||
|
||||
::: warning Yêu cầu cùng origin
|
||||
Các tệp WASM phải được phục vụ từ **cùng origin** với ứng dụng BentoPDF. Web Worker dùng `importScripts()` và không thể tải script cross-origin. Ví dụ, nếu BentoPDF chạy tại `https://internal.example.com`, URL gốc của WASM cũng nên là `https://internal.example.com/wasm`.
|
||||
:::
|
||||
|
||||
#### Các bước thủ công
|
||||
|
||||
<details>
|
||||
<summary>Nếu bạn muốn làm thủ công mà không dùng script</summary>
|
||||
|
||||
**Bước 1: Tải các gói WASM và OCR** (trên máy có internet)
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
**Bước 2: Dựng image Docker với các URL nội bộ**
|
||||
|
||||
```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 .
|
||||
```
|
||||
|
||||
**Bước 3: Xuất image Docker**
|
||||
|
||||
```bash
|
||||
docker save bentopdf -o bentopdf.tar
|
||||
```
|
||||
|
||||
**Bước 4: Chuyển vào mạng cách ly**
|
||||
|
||||
Sao chép qua USB, kho artifact nội bộ hoặc phương thức chuyển được phê duyệt:
|
||||
|
||||
- `bentopdf.tar`: image Docker
|
||||
- Năm gói WASM/OCR `.tgz` từ Bước 1
|
||||
- Thư mục `tesseract-langdata/` từ Bước 1
|
||||
- Thư mục `ocr-fonts/` từ Bước 1
|
||||
|
||||
**Bước 5: Thiết lập bên trong mạng cách ly**
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Hãy đảm bảo các tệp truy cập được tại các URL bạn đã cấu hình ở Bước 2, gồm `.../ocr/worker.min.js`, `.../ocr/core`, `.../ocr/lang-data` và `.../ocr/fonts`.
|
||||
|
||||
</details>
|
||||
|
||||
::: info Dựng từ mã nguồn thay vì Docker?
|
||||
Đặt các biến trong `.env.production` trước khi chạy `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
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Tự lưu trữ WASM Proxy
|
||||
|
||||
Nếu bạn cần phục vụ các tệp WASM AGPL với header CORS phù hợp, bạn có thể triển khai một proxy đơn giản. Xem [hướng dẫn Cloudflare WASM Proxy](https://github.com/alam00000/bentopdf/blob/main/cloudflare/WASM-PROXY.md) để có ví dụ triển khai.
|
||||
|
||||
::: tip Tại sao tách riêng?
|
||||
Việc tách riêng này đảm bảo:
|
||||
|
||||
- Tuân thủ pháp lý rõ ràng cho người dùng thương mại
|
||||
- Phần lõi của BentoPDF vẫn nằm dưới giấy phép kép (AGPL-3.0 / Commercial)
|
||||
- Các tệp WASM được tải lúc chạy, không đóng gói trong mã nguồn
|
||||
:::
|
||||
|
||||
## Yêu cầu hệ thống
|
||||
|
||||
| Yêu cầu | Tối thiểu |
|
||||
| ------- | ----------------------------------------- |
|
||||
| Lưu trữ | ~100 MB (phần lõi, không gồm mô-đun AGPL) |
|
||||
| RAM | 512 MB |
|
||||
| CPU | Bất kỳ bộ xử lý hiện đại nào |
|
||||
|
||||
::: tip
|
||||
BentoPDF là một trang web tĩnh, không cần cơ sở dữ liệu hay máy chủ backend!
|
||||
:::
|
||||
@@ -0,0 +1,211 @@
|
||||
# Triển khai với Kubernetes
|
||||
|
||||
Kubernetes có thể là quá mức cần thiết cho một trang web tĩnh, nhưng sẽ rất phù hợp nếu bạn đã chuẩn hóa theo Helm + GitOps.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **Header bắt buộc để chuyển đổi tệp Office**
|
||||
>
|
||||
> Các công cụ dựa trên LibreOffice (chuyển đổi Word, Excel, PowerPoint) cần các header HTTP sau để hỗ trợ `SharedArrayBuffer`:
|
||||
>
|
||||
> - `Cross-Origin-Opener-Policy: same-origin`
|
||||
> - `Cross-Origin-Embedder-Policy: require-corp`
|
||||
>
|
||||
> Các image nginx chính thức của BentoPDF đã bao gồm các header này. Trong Kubernetes, **bộ điều khiển Ingress/Gateway cũng là reverse proxy**, vì vậy hãy đảm bảo các header này được giữ nguyên (hoặc thêm chúng ở lớp biên).
|
||||
|
||||
## Điều kiện tiên quyết
|
||||
|
||||
- Cụm Kubernetes
|
||||
- Helm v3
|
||||
- Một image nginx của BentoPDF (ví dụ `ghcr.io/alam00000/bentopdf:<tag>`) phục vụ trên **cổng 8080**
|
||||
|
||||
## Triển khai với Helm
|
||||
|
||||
### Cài đặt từ repo này (chart cục bộ)
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Cài đặt từ GHCR (chart OCI)
|
||||
|
||||
Nếu chart được xuất bản lên GHCR dưới dạng artifact 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
|
||||
```
|
||||
|
||||
## Công khai dịch vụ
|
||||
|
||||
### Port-forward (thử nhanh)
|
||||
|
||||
```bash
|
||||
kubectl -n bentopdf port-forward deploy/bentopdf 8080:8080
|
||||
```
|
||||
|
||||
### Ingress (tùy chọn)
|
||||
|
||||
Bật Ingress (ví dụ cho nginx-ingress):
|
||||
|
||||
```yaml
|
||||
ingress:
|
||||
enabled: true
|
||||
className: nginx
|
||||
hosts:
|
||||
- host: pdf.example.com
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
```
|
||||
|
||||
### Gateway API (tùy chọn)
|
||||
|
||||
Chart này hỗ trợ Gateway API `Gateway` + `HTTPRoute`.
|
||||
|
||||
Ví dụ (operator 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
|
||||
```
|
||||
|
||||
## Đảm bảo các header SharedArrayBuffer vẫn hoạt động (Ingress/Gateway)
|
||||
|
||||
### Điều "đáng lẽ" xảy ra
|
||||
|
||||
Cấu hình nginx của BentoPDF đặt các header phản hồi cần thiết. Hầu hết bộ điều khiển Ingress/Gateway **chuyển tiếp nguyên vẹn các header phản hồi từ upstream**.
|
||||
|
||||
### Điều có thể làm hỏng
|
||||
|
||||
- Một chính sách của bộ điều khiển/lớp biên **ghi đè** hoặc **loại bỏ** các header phản hồi
|
||||
- Một middleware "security headers" đặt giá trị COOP/COEP khác
|
||||
|
||||
### Cách kiểm tra
|
||||
|
||||
Chạy lệnh này với endpoint công khai của bạn:
|
||||
|
||||
```bash
|
||||
curl -I https://pdf.example.com/ | egrep -i 'cross-origin-opener-policy|cross-origin-embedder-policy'
|
||||
```
|
||||
|
||||
Bạn sẽ thấy:
|
||||
|
||||
- `Cross-Origin-Opener-Policy: same-origin`
|
||||
- `Cross-Origin-Embedder-Policy: require-corp`
|
||||
|
||||
### Nếu bộ điều khiển Ingress của bạn không giữ nguyên chúng
|
||||
|
||||
Hãy thêm header ở lớp biên (tùy theo bộ điều khiển). Ví dụ cho **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;
|
||||
```
|
||||
|
||||
## Lỗi kiểu MIME của `.mjs` (Ký PDF / iframe Form Filler bị trống)
|
||||
|
||||
Nếu bảng điều khiển trình duyệt hiển thị `Failed to load module script: ... non-JavaScript MIME type "application/octet-stream"` ở một yêu cầu `.mjs`, nghĩa là một bộ điều khiển Ingress/Gateway đặt phía trước nginx của BentoPDF đang thay header `Content-Type` từ upstream bằng `application/octet-stream`.
|
||||
|
||||
Nginx trong image BentoPDF vốn đã phục vụ `.mjs` với kiểu `application/javascript`. Cách khắc phục là ngăn bộ điều khiển loại bỏ/thay thế nó. Với nginx-ingress:
|
||||
|
||||
```yaml
|
||||
ingress:
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/configuration-snippet: |
|
||||
location ~* \.mjs$ {
|
||||
types {} default_type application/javascript;
|
||||
}
|
||||
```
|
||||
|
||||
Hoặc dùng bộ lọc `ResponseHeaderModifier` trong Gateway API để đặt `Content-Type: application/javascript` cho các đường dẫn `.mjs`. Kiểm tra bằng DevTools → tab Network: yêu cầu `.mjs` từng lỗi giờ sẽ hiển thị `content-type: application/javascript`.
|
||||
|
||||
### Nếu bạn dùng Gateway API và muốn buộc thêm header
|
||||
|
||||
Gateway API hỗ trợ bộ lọc `ResponseHeaderModifier`. Bạn có thể gắn nó trong `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
|
||||
```
|
||||
|
||||
Việc hỗ trợ từng bộ lọc cụ thể tùy thuộc vào bộ điều khiển Gateway của bạn; nếu một bộ lọc bị bỏ qua, hãy thêm header ở lớp biên/bộ điều khiển.
|
||||
|
||||
## Tắt công cụ cụ thể
|
||||
|
||||
Dùng ConfigMap để tắt công cụ lúc chạy mà không cần dựng lại image:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: bentopdf-config
|
||||
namespace: bentopdf
|
||||
data:
|
||||
config.json: |
|
||||
{
|
||||
"disabledTools": ["edit-pdf", "sign-pdf", "encrypt-pdf"]
|
||||
}
|
||||
```
|
||||
|
||||
Gắn nó vào thư mục được phục vụ:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
ID công cụ là URL của trang bỏ đi `.html`. Hãy mở bất kỳ công cụ nào và xem URL (ví dụ: `edit-pdf`, `merge-pdf`, `compress-pdf`). Công cụ bị tắt sẽ bị ẩn khỏi trang chủ, tìm kiếm, phím tắt, trình tạo quy trình và truy cập trực tiếp bằng URL. Xem [hướng dẫn Docker](/vi/self-hosting/docker#tat-mot-so-cong-cu) để biết đầy đủ các tùy chọn.
|
||||
@@ -0,0 +1,139 @@
|
||||
# Triển khai lên Netlify
|
||||
|
||||
[Netlify](https://netlify.com) cung cấp dịch vụ lưu trữ trang web tĩnh xuất sắc với gói miễn phí hào phóng.
|
||||
|
||||
## Triển khai một lần nhấp
|
||||
|
||||
[](https://app.netlify.com/start/deploy?repository=https://github.com/alam00000/bentopdf)
|
||||
|
||||
## Triển khai thủ công
|
||||
|
||||
### Bước 1: Kết nối repository
|
||||
|
||||
1. Đăng nhập vào [Netlify](https://app.netlify.com)
|
||||
2. Nhấp "Add new site" → "Import an existing project"
|
||||
3. Kết nối tài khoản GitHub của bạn
|
||||
4. Chọn bản fork BentoPDF của bạn
|
||||
|
||||
### Bước 2: Cấu hình thiết lập dựng
|
||||
|
||||
| Thiết lập | Giá trị |
|
||||
| ----------------- | --------------- |
|
||||
| Build command | `npm run build` |
|
||||
| Publish directory | `dist` |
|
||||
| Node version | 18+ |
|
||||
|
||||
### Bước 3: Triển khai
|
||||
|
||||
Nhấp "Deploy site" và đợi quá trình dựng hoàn tất.
|
||||
|
||||
## Tệp cấu hình
|
||||
|
||||
Tạo `netlify.toml` ở thư mục gốc của dự án:
|
||||
|
||||
```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 Quan trọng
|
||||
Các header `Cross-Origin-Embedder-Policy` và `Cross-Origin-Opener-Policy` là bắt buộc cho việc chuyển Word/ODT/Excel/PowerPoint sang PDF. Thiếu chúng, `SharedArrayBuffer` sẽ không khả dụng và engine LibreOffice WASM sẽ không khởi tạo được.
|
||||
|
||||
Các header `Content-Encoding: gzip` trên tệp `.wasm.gz` và `.data.gz` báo cho trình duyệt tự động giải nén chúng. Thiếu chúng, trình duyệt nhận dữ liệu gzip thô và quá trình biên dịch WASM sẽ thất bại.
|
||||
:::
|
||||
|
||||
## Biến môi trường
|
||||
|
||||
Đặt các biến này tại Site settings → Environment variables:
|
||||
|
||||
| Variable | Mô tả |
|
||||
| ----------------------- | ------------------------------------------------------------- |
|
||||
| `SIMPLE_MODE` | Đặt là `true` để dựng bản tối giản |
|
||||
| `VITE_BRAND_NAME` | Tên thương hiệu tùy chỉnh (thay cho "BentoPDF") |
|
||||
| `VITE_BRAND_LOGO` | Đường dẫn logo tính từ `public/` (ví dụ `images/my-logo.svg`) |
|
||||
| `VITE_FOOTER_TEXT` | Văn bản chân trang / bản quyền tùy chỉnh |
|
||||
| `VITE_DEFAULT_LANGUAGE` | Ngôn ngữ giao diện mặc định (ví dụ `fr`, `de`, `es`) |
|
||||
|
||||
## Tên miền tùy chỉnh
|
||||
|
||||
1. Vào Site settings → Domain management
|
||||
2. Nhấp "Add custom domain"
|
||||
3. Làm theo hướng dẫn cấu hình DNS
|
||||
|
||||
## Phương tiện dung lượng lớn
|
||||
|
||||
Với các tệp WASM lớn, hãy cân nhắc bật [Netlify Large Media](https://docs.netlify.com/large-media/overview/):
|
||||
|
||||
```bash
|
||||
netlify lm:setup
|
||||
git lfs track "*.wasm"
|
||||
```
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### Chuyển Word/ODT/Excel sang PDF bị đứng ở 55%
|
||||
|
||||
Nếu quá trình chuyển đổi tài liệu bị treo ở 55%, hãy mở Console của DevTools và kiểm tra:
|
||||
|
||||
```js
|
||||
console.log(window.crossOriginIsolated); // should be true
|
||||
console.log(typeof SharedArrayBuffer); // should be "function"
|
||||
```
|
||||
|
||||
Nếu `crossOriginIsolated` là `false`, các header COEP/COOP từ `netlify.toml` của bạn chưa được áp dụng. Hãy đảm bảo tệp nằm ở thư mục gốc dự án rồi triển khai lại.
|
||||
|
||||
Nếu bạn thấy `expected magic word 00 61 73 6d, found 1f 8b 08 08` trong console, các tệp `.wasm.gz` đang thiếu header `Content-Encoding: gzip`. Hãy đảm bảo các khối `[[headers]]` cho `soffice.wasm.gz` và `soffice.data.gz` có trong `netlify.toml` của bạn.
|
||||
|
||||
### Dựng thất bại
|
||||
|
||||
Kiểm tra tính tương thích phiên bản Node:
|
||||
|
||||
```toml
|
||||
[build.environment]
|
||||
NODE_VERSION = "20"
|
||||
```
|
||||
|
||||
### Tải lần đầu chậm
|
||||
|
||||
Bật tối ưu hóa tài nguyên tại Site settings → Build & deploy → Asset optimization.
|
||||
@@ -0,0 +1,232 @@
|
||||
# Triển khai với Nginx
|
||||
|
||||
Lưu trữ BentoPDF trên máy chủ của riêng bạn bằng Nginx.
|
||||
|
||||
## Điều kiện tiên quyết
|
||||
|
||||
- Máy chủ Ubuntu/Debian
|
||||
- Đã cài Nginx
|
||||
- Chứng chỉ SSL (khuyến nghị: Let's Encrypt)
|
||||
|
||||
## Bước 1: Dựng dự án
|
||||
|
||||
```bash
|
||||
git clone https://github.com/alam00000/bentopdf.git
|
||||
cd bentopdf
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Để tùy chỉnh thương hiệu, hãy đặt biến môi trường trước khi dựng:
|
||||
|
||||
```bash
|
||||
VITE_BRAND_NAME="AcmePDF" VITE_BRAND_LOGO="images/acme-logo.svg" npm run build
|
||||
```
|
||||
|
||||
## Bước 2: Sao chép tệp
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /var/www/bentopdf
|
||||
sudo cp -r dist/* /var/www/bentopdf/
|
||||
sudo chown -R www-data:www-data /var/www/bentopdf
|
||||
```
|
||||
|
||||
## Bước 3: Cấu hình Nginx
|
||||
|
||||
Tạo `/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;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Bước 4: Bật trang web
|
||||
|
||||
```bash
|
||||
sudo ln -s /etc/nginx/sites-available/bentopdf /etc/nginx/sites-enabled/
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
## Bước 5: SSL với Let's Encrypt
|
||||
|
||||
```bash
|
||||
sudo apt install certbot python3-certbot-nginx
|
||||
sudo certbot --nginx -d your-domain.com
|
||||
```
|
||||
|
||||
## Triển khai vào thư mục con
|
||||
|
||||
Để lưu trữ tại `/pdf/`:
|
||||
|
||||
```nginx
|
||||
location /pdf/ {
|
||||
alias /var/www/bentopdf/;
|
||||
try_files $uri $uri/ /pdf/index.html;
|
||||
}
|
||||
```
|
||||
|
||||
Dựng với:
|
||||
|
||||
```bash
|
||||
BASE_URL=/pdf/ npm run build
|
||||
```
|
||||
|
||||
## Tinh chỉnh hiệu năng
|
||||
|
||||
Thêm vào `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;
|
||||
}
|
||||
```
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### WASM không tải được
|
||||
|
||||
Đảm bảo đã đặt kiểu MIME:
|
||||
|
||||
```nginx
|
||||
types {
|
||||
application/wasm wasm;
|
||||
}
|
||||
```
|
||||
|
||||
### Ký PDF hoặc Form Filler hiển thị trình xem trống (lỗi MIME `.mjs`)
|
||||
|
||||
Nếu bảng điều khiển trình duyệt hiển thị:
|
||||
|
||||
```
|
||||
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.
|
||||
```
|
||||
|
||||
...và yêu cầu bị lỗi có đuôi `.mjs`, nginx của bạn đang thiếu ánh xạ `.mjs → application/javascript`. Trình xem PDF đi kèm (được dùng bởi Ký PDF, Form Filler và một vài công cụ khác) có các tệp module ES với phần mở rộng `.mjs`, và `mime.types` mặc định của nginx không bao gồm chúng.
|
||||
|
||||
Hãy khắc phục bằng cách thêm `mjs` vào dòng `application/javascript` hiện có trong `/etc/nginx/mime.types`:
|
||||
|
||||
```nginx
|
||||
application/javascript js mjs;
|
||||
```
|
||||
|
||||
> KHÔNG thêm dòng `application/javascript` _thứ hai_: nginx phân tích `mime.types` theo từng dòng và chỉ một ánh xạ kiểu sang phần mở rộng có hiệu lực, nên dòng thứ hai bị bỏ qua âm thầm trên một số phiên bản. Hãy sửa dòng hiện có để thêm `mjs` cạnh `js`.
|
||||
|
||||
Hoặc ghi đè cục bộ trong khối server của bạn (không sửa tệp toàn cục):
|
||||
|
||||
```nginx
|
||||
types {
|
||||
application/javascript js mjs;
|
||||
application/wasm wasm;
|
||||
}
|
||||
```
|
||||
|
||||
Tải lại nginx sau khi thay đổi:
|
||||
|
||||
```bash
|
||||
sudo nginx -t && sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
Để xác nhận: trong DevTools của trình duyệt → tab Network, tìm yêu cầu `.mjs` bị lỗi và kiểm tra header phản hồi `Content-Type`. Giờ nó phải là `application/javascript`, không phải `application/octet-stream`.
|
||||
|
||||
### Chuyển Word/ODT/Excel sang PDF không hoạt động
|
||||
|
||||
LibreOffice WASM cần `SharedArrayBuffer`, thứ đòi hỏi các header `Cross-Origin-Embedder-Policy` và `Cross-Origin-Opener-Policy`. Nó cũng cần ngữ cảnh bảo mật, nên `http://localhost` dùng được để thử cục bộ nhưng `http://192.168.x.x` hay các IP LAN khác thường cần HTTPS. Lưu ý rằng các chỉ thị nginx `add_header` trong khối `location` **ghi đè** các chỉ thị `add_header` ở cấp server, chúng không được gộp lại. Mỗi khối `location` có `add_header` riêng phải bao gồm các header COEP/COOP.
|
||||
|
||||
Kiểm tra bằng:
|
||||
|
||||
```bash
|
||||
curl -I https://your-domain.com/ | grep -i cross-origin
|
||||
```
|
||||
|
||||
Nếu dùng reverse proxy đặt trước nginx, hãy đảm bảo nó giữ nguyên các header này.
|
||||
|
||||
### 502 Bad Gateway
|
||||
|
||||
Kiểm tra nhật ký lỗi của Nginx:
|
||||
|
||||
```bash
|
||||
sudo tail -f /var/log/nginx/error.log
|
||||
```
|
||||
@@ -0,0 +1,122 @@
|
||||
# Triển khai lên Vercel
|
||||
|
||||
[Vercel](https://vercel.com) mang lại trải nghiệm triển khai dễ nhất cho các trang web tĩnh.
|
||||
|
||||
## Triển khai một lần nhấp
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/alam00000/bentopdf)
|
||||
|
||||
## Triển khai thủ công
|
||||
|
||||
### Bước 1: Fork repository
|
||||
|
||||
Fork [bentopdf/bentopdf](https://github.com/alam00000/bentopdf) về tài khoản GitHub của bạn.
|
||||
|
||||
### Bước 2: Nhập vào Vercel
|
||||
|
||||
1. Truy cập [vercel.com/new](https://vercel.com/new)
|
||||
2. Chọn repository đã fork của bạn
|
||||
3. Cấu hình dự án:
|
||||
|
||||
| Thiết lập | Giá trị |
|
||||
| ---------------- | --------------- |
|
||||
| Framework Preset | Vite |
|
||||
| Build Command | `npm run build` |
|
||||
| Output Directory | `dist` |
|
||||
| Install Command | `npm install` |
|
||||
|
||||
### Bước 3: Biến môi trường (tùy chọn)
|
||||
|
||||
Thêm các biến này nếu cần:
|
||||
|
||||
| Variable | Mô tả |
|
||||
| ----------------------- | ------------------------------------------------------------- |
|
||||
| `SIMPLE_MODE` | Đặt là `true` để có giao diện tối giản |
|
||||
| `VITE_BRAND_NAME` | Tên thương hiệu tùy chỉnh (thay cho "BentoPDF") |
|
||||
| `VITE_BRAND_LOGO` | Đường dẫn logo tính từ `public/` (ví dụ `images/my-logo.svg`) |
|
||||
| `VITE_FOOTER_TEXT` | Văn bản chân trang / bản quyền tùy chỉnh |
|
||||
| `VITE_DEFAULT_LANGUAGE` | Ngôn ngữ giao diện mặc định (ví dụ `fr`, `de`, `es`) |
|
||||
|
||||
### Bước 4: Triển khai
|
||||
|
||||
Nhấp "Deploy" và đợi quá trình dựng hoàn tất.
|
||||
|
||||
## Tên miền tùy chỉnh
|
||||
|
||||
1. Vào phần cài đặt dự án của bạn
|
||||
2. Chuyển đến "Domains"
|
||||
3. Thêm tên miền tùy chỉnh của bạn
|
||||
4. Cấu hình DNS theo hướng dẫn
|
||||
|
||||
## Hạn chế
|
||||
|
||||
::: warning Tệp lớn
|
||||
Các serverless function của Vercel có giới hạn 50MB. Vì BentoPDF là trang web tĩnh nên điều này không ảnh hưởng đến bạn, nhưng các mô-đun WASM khá lớn (tổng cộng ~100MB). Hãy đảm bảo chúng được phục vụ từ thư mục `/public`.
|
||||
:::
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### Hết thời gian dựng
|
||||
|
||||
Nếu quá trình dựng bị hết thời gian, hãy thử:
|
||||
|
||||
```json
|
||||
// vercel.json
|
||||
{
|
||||
"buildCommand": "npm run build",
|
||||
"outputDirectory": "dist"
|
||||
}
|
||||
```
|
||||
|
||||
### Lỗi 404 khi làm mới trang
|
||||
|
||||
Thêm `vercel.json` để định tuyến SPA:
|
||||
|
||||
```json
|
||||
{
|
||||
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
|
||||
}
|
||||
```
|
||||
|
||||
### Chuyển Word/ODT/Excel sang PDF không hoạt động
|
||||
|
||||
Việc chuyển đổi LibreOffice WASM cần `SharedArrayBuffer`, thứ đòi hỏi các header phản hồi sau trên mọi trang:
|
||||
|
||||
- `Cross-Origin-Embedder-Policy: require-corp`
|
||||
- `Cross-Origin-Opener-Policy: same-origin`
|
||||
|
||||
Các tệp `.wasm.gz` và `.data.gz` đã nén sẵn cũng cần `Content-Encoding: gzip` để trình duyệt giải nén chúng.
|
||||
|
||||
Thêm các mục này vào `vercel.json` của bạn:
|
||||
|
||||
```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" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Để kiểm tra, mở Console của DevTools và chạy `console.log(window.crossOriginIsolated)`: kết quả phải là `true`.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Thêm tệp đính kèm
|
||||
description: Nhúng tệp thuộc bất kỳ loại nào vào PDF ở cấp tài liệu hoặc gắn vào các trang cụ thể.
|
||||
---
|
||||
|
||||
# Thêm tệp đính kèm
|
||||
|
||||
Nhúng một hoặc nhiều tệp trực tiếp vào tài liệu PDF. Tệp đính kèm có thể được thêm ở cấp tài liệu (hiển thị trong bảng tệp đính kèm của mọi trình đọc PDF) hoặc gắn vào các trang cụ thể.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bạn muốn đính kèm tệp.
|
||||
2. Dùng vùng thả tệp đính kèm để chọn các tệp bạn muốn nhúng (bất kỳ loại tệp nào).
|
||||
3. Chọn cấp đính kèm: **Tài liệu** (mặc định) hoặc **Trang**.
|
||||
4. Nếu chọn cấp Trang, hãy nhập phạm vi trang (ví dụ: `1-3` hoặc `5`).
|
||||
5. Nhấp nút xử lý. PDF đã sửa đổi sẽ được tải xuống kèm các tệp đã nhúng.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Đính kèm mọi loại tệp: hình ảnh, bảng tính, tệp nén, tệp thực thi, bất cứ thứ gì
|
||||
- Đặt tệp đính kèm ở cấp tài liệu hoặc cấp trang
|
||||
- Có thể đính kèm nhiều tệp trong một thao tác
|
||||
- Hiển thị tên và dung lượng của tất cả tệp đính kèm đã chọn
|
||||
- Đầu ra giữ nguyên nội dung PDF gốc và thêm các tệp đã nhúng
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mô tả |
|
||||
| ---------------- | ------------------------------------------------------------------- |
|
||||
| **Cấp tài liệu** | Đính kèm tệp vào toàn bộ PDF, truy cập được từ bảng tệp đính kèm |
|
||||
| **Cấp trang** | Đính kèm tệp vào các trang cụ thể, được chỉ định bằng phạm vi trang |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Gói dữ liệu nguồn (tệp Excel, CSV) cùng một báo cáo PDF
|
||||
- Đính kèm các tệp ảnh gốc vào PDF danh mục ảnh nhiếp ảnh
|
||||
- Nhúng tài liệu hỗ trợ vào hợp đồng hoặc đề xuất
|
||||
- Thêm tài liệu bổ sung vào các trang cụ thể của một cuốn sổ tay đào tạo
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp đính kèm cấp tài liệu được hỗ trợ rộng rãi nhất trên các trình đọc PDF. Tệp đính kèm cấp trang có thể không hiển thị trong mọi trình xem.
|
||||
- Không có giới hạn dung lượng cho tệp đính kèm, nhưng các tệp nhúng rất lớn sẽ làm tăng kích thước PDF tương ứng.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Trích xuất tệp đính kèm](./extract-attachments)
|
||||
- [Chỉnh sửa tệp đính kèm](./edit-attachments)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Thêm trang trống
|
||||
description: Chèn một hoặc nhiều trang trống vào bất kỳ vị trí nào trong tài liệu PDF.
|
||||
---
|
||||
|
||||
# Thêm trang trống
|
||||
|
||||
Chèn các trang trống vào PDF tại vị trí bạn chỉ định. Bạn kiểm soát nơi đặt các trang trống và số lượng cần thêm.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF. Công cụ hiển thị số trang.
|
||||
2. Nhập **vị trí** cần chèn các trang trống. Dùng `0` để chèn ở đầu tài liệu, hoặc tổng số trang để thêm vào cuối.
|
||||
3. Nhập **số lượng** trang trống cần thêm (mặc định là 1).
|
||||
4. Nhấp nút xử lý. PDF đã sửa đổi sẽ được tải xuống kèm các trang trống đã chèn.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Chèn ở bất kỳ vị trí nào: đầu, giữa hoặc cuối tài liệu
|
||||
- Thêm nhiều trang trống trong một thao tác
|
||||
- Gợi ý vị trí tự cập nhật theo số trang của PDF đã tải lên
|
||||
- Trang trống kích thước A4 chuẩn
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Thêm trang trống ngăn cách giữa các phần của một tài liệu tổng hợp
|
||||
- Chèn trang trống để căn chỉnh khi in hai mặt
|
||||
- Thêm khoảng trống để ghi chú tay trong tài liệu học tập đã in
|
||||
- Bổ sung trang để tài liệu đạt số trang tối thiểu theo yêu cầu
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Vị trí `0` chèn trước trang đầu tiên. Vị trí bằng tổng số trang sẽ thêm sau trang cuối cùng.
|
||||
- Nếu bạn cần chèn nội dung (không chỉ trang trống) vào một vị trí cụ thể, hãy dùng [Công cụ đa năng PDF](./pdf-multi-tool) để chèn một PDF khác sau một trang nhất định.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Sắp xếp & Nhân bản](./organize-pdf)
|
||||
- [Công cụ đa năng PDF](./pdf-multi-tool)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Thêm nhãn trang
|
||||
description: Thêm nhãn trang PDF với số La Mã, tiền tố chữ cái, đánh số tùy chỉnh và nhiều quy tắc trong một tài liệu.
|
||||
---
|
||||
|
||||
# Thêm nhãn trang
|
||||
|
||||
Nhãn trang điều khiển cách số trang hiển thị trong trình xem PDF (số hiển thị trên thanh công cụ, không in trên trang). Công cụ này cho phép bạn gán các kiểu nhãn khác nhau cho các phạm vi trang khác nhau: số La Mã cho phần đầu sách, số thập phân cho phần nội dung, phụ lục đánh chữ cái, v.v.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Bảng tùy chọn xuất hiện với một quy tắc nhãn theo mặc định.
|
||||
3. Cấu hình từng quy tắc với phạm vi trang, kiểu, tiền tố tùy chọn và giá trị bắt đầu.
|
||||
4. Nhấp **Thêm quy tắc** để tạo thêm quy tắc cho các phần khác nhau.
|
||||
5. Nhấp **Thêm nhãn trang** để áp dụng mọi quy tắc và tải kết quả xuống.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Mỗi quy tắc nhãn có các thiết lập sau:
|
||||
|
||||
- **Phạm vi trang**: Các trang mà quy tắc áp dụng. Để trống nếu áp dụng cho mọi trang. Hỗ trợ các phạm vi như `1-4`, `7`, `odd` hoặc `1-9,30-40`.
|
||||
- **Kiểu nhãn**: Số Ả Rập thập phân, số La Mã chữ thường (i, ii, iii), số La Mã chữ hoa (I, II, III), chữ cái thường (a, b, c), chữ cái hoa (A, B, C), hoặc Không nhãn (chỉ tiền tố).
|
||||
- **Tiền tố nhãn**: Văn bản tùy chọn đặt trước mỗi nhãn, chẳng hạn "A-" để tạo các nhãn như A-1, A-2, A-3.
|
||||
- **Giá trị bắt đầu**: Số bắt đầu đếm. Mặc định là 1. Đặt là 0 để đánh số từ 0.
|
||||
- **Đánh số liên tục qua các phạm vi rời nhau**: Bật tùy chọn này khi một quy tắc nhắm đến các trang không liền kề (như `1-9,30-40` hoặc `odd`) và bạn muốn đánh số tiếp tục tuần tự.
|
||||
- **Xóa nhãn trang hiện có**: Được chọn theo mặc định. Xóa mọi nhãn trước đó trước khi áp dụng các quy tắc mới.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Nhiều quy tắc nhãn trong một tài liệu cho các sơ đồ đánh số phức tạp
|
||||
- Sáu kiểu nhãn bao quát mọi hệ thống đánh số chuẩn
|
||||
- Hỗ trợ tiền tố tùy chỉnh để gắn nhãn theo từng phần
|
||||
- Hỗ trợ phạm vi rời nhau với đánh số liên tiếp
|
||||
- Tùy chọn giữ lại hoặc xóa các nhãn hiện có
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đặt nhãn số La Mã (i, ii, iii) cho lời nói đầu của một cuốn sách và nhãn thập phân cho phần nội dung chính
|
||||
- Gắn nhãn các trang phụ lục bằng tiền tố chữ cái như "A-1", "A-2", "B-1", "B-2"
|
||||
- Sửa nhãn trang trong tài liệu quét mà số trang thực tế không khớp với thứ tự trang PDF
|
||||
- Thêm cách đánh số bắt đầu từ 0 cho tài liệu kỹ thuật
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nhãn trang là siêu dữ liệu mà trình xem PDF hiển thị trên thanh điều hướng. Chúng không được in trên trang thực tế. Để có số hiển thị trên trang, hãy dùng [Số trang](./page-numbers).
|
||||
- Công cụ này yêu cầu CoherentPDF (CPDF) được cấu hình trong Cài đặt WASM của bạn. Nếu chưa thiết lập, bạn sẽ được nhắc cấu hình.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Số trang](./page-numbers)
|
||||
- [Đánh số Bates](./bates-numbering)
|
||||
- [Chỉnh sửa Bookmark](./bookmark)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Thêm tem
|
||||
description: Thêm tem hình ảnh vào các trang PDF bằng thanh công cụ chú thích tích hợp kèm tên người dùng.
|
||||
---
|
||||
|
||||
# Thêm tem
|
||||
|
||||
Đặt tem hình ảnh lên các trang PDF bằng trình xem nhúng có thanh công cụ chú thích tem. Tem có thể kèm tên của bạn để ghi nhận người thực hiện, rất hữu ích cho quy trình phê duyệt, xem xét và đánh dấu tài liệu.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhập tên của bạn vào trường **Tên người dùng tem**. Tên này sẽ xuất hiện trên các tem bạn tạo.
|
||||
2. Tải lên tệp PDF bằng cách nhấp hoặc kéo thả vào vùng thả tệp.
|
||||
3. Trình chỉnh sửa tem mở ra với tài liệu của bạn được nạp trong trình xem.
|
||||
4. Dùng công cụ tem hình ảnh trên thanh công cụ để chọn và đặt tem lên bất kỳ trang nào.
|
||||
5. Định vị và đổi kích thước tem khi cần.
|
||||
6. Nhấp **Lưu PDF đã đóng dấu** để tải kết quả xuống.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Trình xem PDF tích hợp với thanh công cụ chú thích dành riêng cho tem
|
||||
- Ghi nhận tên người dùng trên các tem được tạo
|
||||
- Đặt tem hình ảnh lên bất kỳ trang nào
|
||||
- Định vị và đổi kích thước bằng kéo thả
|
||||
- Tự động điều chỉnh kích thước trình xem theo tỷ lệ khung hình của trang
|
||||
- Hiển thị tệp kèm tên và dung lượng
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Thêm tem hình ảnh "APPROVED" hoặc "REVIEWED" vào tài liệu trong quy trình xem xét
|
||||
- Đặt hình con dấu công ty hoặc tem công chứng lên các tài liệu chính thức
|
||||
- Đánh dấu các trang bằng tem "RECEIVED" kèm tên người xem xét
|
||||
- Thêm tem kiểm soát chất lượng vào báo cáo kiểm tra
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hãy đặt tên người dùng tem trước khi tải PDF lên. Tên người dùng được nhúng trong siêu dữ liệu của tem.
|
||||
- Trình xem điều chỉnh chiều cao dựa trên tỷ lệ khung hình của trang đầu tiên để xem tối ưu.
|
||||
- Nếu muốn watermark dạng văn bản thay vì tem hình ảnh, hãy dùng công cụ [Thêm Watermark](./add-watermark).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Ký PDF](./sign-pdf)
|
||||
- [Thêm Watermark](./add-watermark)
|
||||
- [Trình chỉnh sửa PDF](./edit-pdf)
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: Thêm Watermark
|
||||
description: Đóng dấu watermark văn bản hoặc hình ảnh lên các trang PDF bằng trình chỉnh sửa kéo thả trực quan có xem trước trực tiếp.
|
||||
---
|
||||
|
||||
# Thêm Watermark
|
||||
|
||||
Thêm watermark văn bản hoặc hình ảnh vào các trang PDF bằng trình chỉnh sửa trực quan. Bạn có thể định vị watermark bằng cách kéo trực tiếp trên bản xem trước, đổi kích thước bằng các điểm nắm ở góc, và cấu hình độ mờ, góc xoay, phông chữ và màu sắc. Mỗi trang có thể có vị trí watermark riêng, hoặc bạn có thể áp dụng cùng một watermark cho tất cả các trang cùng lúc.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Trình chỉnh sửa mở ra với bản xem trước trực tiếp của trang đầu tiên và lớp phủ watermark có thể kéo.
|
||||
3. Chọn chế độ watermark **Văn bản** hoặc **Hình ảnh** bằng các nút chuyển đổi.
|
||||
4. Cấu hình các thiết lập watermark trong bảng bên.
|
||||
5. Kéo watermark trên bản xem trước đến đúng vị trí bạn muốn. Dùng các điểm nắm ở góc để đổi kích thước.
|
||||
6. Chuyển giữa các trang để đặt watermark riêng cho từng trang, hoặc giữ nguyên tùy chọn **Áp dụng cho tất cả các trang**.
|
||||
7. Nhấp **Thêm Watermark** để xử lý và tải xuống.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
**Thiết lập watermark văn bản:**
|
||||
|
||||
- **Văn bản**: Nội dung watermark (ví dụ: "MẬT", "BẢN NHÁP").
|
||||
- **Cỡ chữ**: Từ 10 đến 200 điểm. Mặc định là 72.
|
||||
- **Màu sắc**: Bất kỳ màu nào qua bộ chọn màu.
|
||||
- **Độ mờ**: Điều chỉnh độ trong suốt từ hoàn toàn trong suốt đến hoàn toàn đục.
|
||||
- **Góc xoay**: Xoay văn bản watermark từ -180 đến 180 độ.
|
||||
|
||||
**Thiết lập watermark hình ảnh:**
|
||||
|
||||
- **Tải ảnh lên**: Tải lên tệp PNG, JPG hoặc tệp ảnh khác để dùng làm watermark.
|
||||
- **Độ mờ**: Điều chỉnh độ trong suốt của ảnh.
|
||||
- **Tỷ lệ**: Đổi kích thước ảnh watermark.
|
||||
|
||||
**Thiết lập bố cục:**
|
||||
|
||||
- **Đơn**: Một watermark trên mỗi trang, được định vị bằng cách kéo hoặc bằng các vị trí đặt sẵn.
|
||||
- **Lát gạch**: Lặp lại watermark trên toàn trang theo lưới chéo bám theo góc xoay, để dấu phủ kín tài liệu từ mép này sang mép kia.
|
||||
- **Khoảng cách ngang**: Khoảng cách giữa các ô theo hướng văn bản, tính theo phần trăm chiều rộng watermark (chỉ ở chế độ lát gạch).
|
||||
- **Khoảng cách dọc**: Khoảng cách giữa các hàng ô, tính theo phần trăm chiều cao watermark (chỉ ở chế độ lát gạch).
|
||||
|
||||
**Thiết lập chung:**
|
||||
|
||||
- **Áp dụng cho tất cả các trang**: Khi được chọn, cùng một watermark áp dụng cho mọi trang. Bỏ chọn để đặt watermark riêng cho từng trang.
|
||||
- **Phạm vi trang**: Chỉ định các trang được thêm watermark (ví dụ: "1-3, 5, 7-9" hoặc "all").
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Định vị kéo thả trực quan trên bản xem trước PDF trực tiếp
|
||||
- Watermark có thể đổi kích thước bằng các điểm nắm ở góc
|
||||
- Chế độ watermark văn bản và hình ảnh
|
||||
- Bố cục đơn hoặc lát gạch (lặp lại) toàn trang với khoảng cách điều chỉnh được
|
||||
- Áp dụng watermark theo từng trang hoặc toàn cục
|
||||
- Chuyển trang từng trang trong bản xem trước
|
||||
- Điều khiển độ mờ và góc xoay
|
||||
- Lọc theo phạm vi trang
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đánh dấu tài liệu nháp bằng "BẢN NHÁP" trước khi lưu hành để xem xét
|
||||
- Thêm watermark "MẬT" vào các báo cáo tài chính nhạy cảm
|
||||
- Gắn thương hiệu cho tài liệu bằng watermark là logo công ty
|
||||
- Đóng dấu "SAMPLE" lên tài liệu sản phẩm chia sẻ với khách hàng tiềm năng
|
||||
- Thêm thông báo bản quyền vào các tài liệu PDF được phân phối
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Để có watermark chéo trên trang, hãy đặt góc xoay khoảng 45 độ và tăng cỡ chữ.
|
||||
- Chế độ lát gạch khiến tài liệu khó tái sử dụng hơn nhiều sau khi cắt xén, vì xóa một dấu vẫn còn hàng chục dấu khác. Hãy giảm độ mờ khi lát gạch để văn bản bên dưới vẫn dễ đọc.
|
||||
- Watermark hình ảnh có nền trong suốt (định dạng PNG) hòa vào nội dung tài liệu tự nhiên hơn.
|
||||
- Nếu cần văn bản watermark khác nhau trên các trang khác nhau, hãy bỏ chọn "Áp dụng cho tất cả các trang" và chuyển từng trang.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Đầu trang & Chân trang](./header-footer)
|
||||
- [Thêm tem](./add-stamps)
|
||||
- [Đánh số Bates](./bates-numbering)
|
||||
- [Ký PDF](./sign-pdf)
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Điều chỉnh màu sắc
|
||||
description: Tinh chỉnh độ sáng, độ tương phản, độ bão hòa, sắc độ, nhiệt độ màu, tông màu, gamma và sepia trong PDF của bạn.
|
||||
---
|
||||
|
||||
# Điều chỉnh màu sắc
|
||||
|
||||
Bộ công cụ chỉnh màu đầy đủ cho PDF. Điều chỉnh tám thông số độc lập: độ sáng, độ tương phản, độ bão hòa, dịch sắc độ, nhiệt độ màu, tông màu, gamma và sepia, với bản xem trước trực tiếp cập nhật khi bạn di chuyển từng thanh trượt.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Trình chỉnh sửa mở ra, hiển thị bản xem trước trang đầu tiên và bảng thiết lập màu.
|
||||
3. Di chuyển các thanh trượt để điều chỉnh từng thông số màu. Bản xem trước cập nhật theo thời gian thực.
|
||||
4. Nhấp **Đặt lại** để đưa mọi thanh trượt về vị trí mặc định.
|
||||
5. Nhấp **Áp dụng điều chỉnh màu** để xử lý tất cả các trang và tải PDF đã điều chỉnh xuống.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Độ sáng**: Làm sáng hoặc tối toàn bộ trang (-100 đến +100).
|
||||
- **Độ tương phản**: Tăng hoặc giảm sự khác biệt giữa vùng sáng và tối (-100 đến +100).
|
||||
- **Độ bão hòa**: Tăng hoặc giảm cường độ màu (-100 đến +100). Đặt -100 cho kết quả thang xám.
|
||||
- **Dịch sắc độ**: Xoay vòng màu để dịch chuyển đồng loạt mọi màu.
|
||||
- **Nhiệt độ màu**: Dịch màu sang ấm hơn (vàng/cam) hoặc lạnh hơn (xanh dương).
|
||||
- **Tông màu**: Thêm sắc xanh lá hoặc đỏ tím.
|
||||
- **Gamma**: Điều chỉnh độ sáng vùng trung bằng đường cong gamma. Giá trị dưới 1.0 làm tối vùng trung; giá trị trên 1.0 làm sáng chúng.
|
||||
- **Sepia**: Áp dụng hiệu ứng tông sepia cổ điển. Giá trị cao hơn cho sắc nâu đậm hơn.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Tám thông số màu điều chỉnh độc lập
|
||||
- Bản xem trước trực tiếp phản hồi ngay khi kéo thanh trượt
|
||||
- Nút Reset để nhanh chóng quay về mặc định
|
||||
- Xử lý tất cả các trang trong tài liệu
|
||||
- Hoạt động với mọi nội dung PDF (văn bản, hình ảnh, đồ họa)
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Làm sáng bản quét tối hoặc chỉnh các trang bị cháy sáng
|
||||
- Giảm bão hòa tài liệu nhiều màu để tiết kiệm mực trước khi in
|
||||
- Áp dụng tông sepia để tạo vẻ cổ điển cho chứng chỉ hoặc giải thưởng
|
||||
- Chỉnh nhiệt độ màu của các ảnh nhúng trong PDF
|
||||
- Tăng độ tương phản cho tài liệu quét bị phai hoặc chất lượng thấp
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Để chuyển nhanh sang thang xám, kéo thanh trượt độ bão hòa hết cỡ đến -100.
|
||||
- Thanh trượt gamma đặc biệt hữu ích để cải thiện khả năng đọc của tài liệu quét có vùng trung quá tối hoặc quá sáng.
|
||||
- Giống các công cụ hiệu ứng hình ảnh khác, công cụ này rasterize từng trang. Đầu ra sẽ dựa trên hình ảnh, nên văn bản sẽ không chọn được.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Đảo ngược màu](./invert-colors)
|
||||
- [Hiệu ứng máy quét](./scanner-effect)
|
||||
- [Màu nền](./background-color)
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Xen kẽ & Trộn trang
|
||||
description: Gộp các PDF bằng cách xen kẽ trang từ mỗi tệp theo thứ tự luân phiên, giữ nguyên dấu trang.
|
||||
---
|
||||
|
||||
# Xen kẽ & Trộn trang
|
||||
|
||||
Xen kẽ các trang từ nhiều tệp PDF để các trang luân phiên giữa các tài liệu. Đây là công cụ bạn cần khi gộp thông thường chỉ nối các tệp nối đuôi nhau, còn bạn cần trang 1 của Tệp A, rồi trang 1 của Tệp B, rồi trang 2 của Tệp A, và cứ thế tiếp tục.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên ít nhất hai tệp PDF bằng vùng thả tệp.
|
||||
2. Công cụ hiển thị từng tệp cùng số trang và dung lượng.
|
||||
3. Kéo các tay nắm để sắp xếp lại tệp nào có trang đứng đầu trong chuỗi xen kẽ.
|
||||
4. Nhấp **Trộn trang** để tạo đầu ra xen kẽ.
|
||||
5. Kết quả được tải xuống với tên `alternated-mixed.pdf`.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Xen kẽ các trang giữa bất kỳ số lượng PDF nào (tối thiểu hai)
|
||||
- Kéo thả sắp xếp lại tệp để điều khiển thứ tự ưu tiên xen kẽ
|
||||
- Giữ nguyên dấu trang từ các tài liệu nguồn
|
||||
- Hiển thị số trang và dung lượng của từng tệp đã tải lên
|
||||
- Xử lý qua web worker riêng để giao diện luôn phản hồi
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Ghép lại các bản quét hai mặt khi trang lẻ và trang chẵn được quét riêng
|
||||
- Kết hợp phiếu câu hỏi với đáp án để mỗi câu hỏi được theo sau bởi đáp án của nó
|
||||
- Gộp tài liệu hai ngôn ngữ theo từng trang (ví dụ: tiếng Anh ở một mặt, bản dịch ở mặt kế tiếp)
|
||||
- Xen kẽ bản quét mặt trước và mặt sau từ máy quét một mặt
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu các PDF nguồn có số trang khác nhau, trang của tài liệu ngắn hơn sẽ hết trước và các trang còn lại của tài liệu dài hơn sẽ xuất hiện ở cuối.
|
||||
- Thứ tự tệp rất quan trọng: tệp đầu tiên trong danh sách đóng góp trang đầu tiên của đầu ra. Hãy kéo để sắp xếp lại nếu cần.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Sắp xếp & Nhân bản](./organize-pdf)
|
||||
- [Chia PDF](./split-pdf)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Màu nền
|
||||
description: Đổi màu nền của mọi trang trong PDF mà vẫn giữ nguyên toàn bộ nội dung phía trên.
|
||||
---
|
||||
|
||||
# Màu nền
|
||||
|
||||
Đặt một màu nền đơn sắc phía sau toàn bộ nội dung hiện có trong PDF. Công cụ tạo một hình chữ nhật màu trên mỗi trang và xếp nội dung gốc lên trên, nên văn bản, hình ảnh và đồ họa vẫn hiển thị đầy đủ trên nền mới.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Chọn màu nền bằng bộ chọn màu. Mặc định là vàng nhạt (#FFFFCC).
|
||||
3. Nhấp **Đổi màu nền** để xử lý.
|
||||
4. PDF đã cập nhật được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Màu nền**: Bộ chọn màu tiêu chuẩn để chọn bất kỳ màu đơn sắc nào. Mặc định là vàng nhạt.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Áp dụng màu nền đồng nhất cho mọi trang
|
||||
- Giữ nguyên toàn bộ nội dung gốc (văn bản, hình ảnh, đồ họa vector) phía trên lớp màu
|
||||
- Giữ nguyên kích thước trang gốc
|
||||
- Hoạt động với tài liệu có số trang bất kỳ
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Thêm nền màu kem hoặc ngà nhạt để tài liệu có vẻ ngoài mềm mại như giấy
|
||||
- Mã hóa màu các bộ tài liệu bằng cách áp dụng các màu nền khác nhau cho từng danh mục
|
||||
- Tạo các phiên bản khác biệt về hình thức của cùng một tài liệu cho các đối tượng khác nhau
|
||||
- Thêm sắc nền nhạt để dễ đọc hơn khi trình chiếu tài liệu trên màn hình
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Màu nhạt và dịu hoạt động tốt nhất. Nền quá tối có thể làm văn bản khó đọc trừ khi văn bản vốn có màu sáng.
|
||||
- Nếu muốn đổi cả màu nền và màu văn bản, hãy áp dụng màu nền trước, rồi dùng [Thay đổi màu văn bản](./text-color) trên kết quả.
|
||||
- Công cụ này hoạt động ở cấp cấu trúc PDF (không rasterize), nên văn bản vẫn chọn và tìm kiếm được trong đầu ra.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Thay đổi màu văn bản](./text-color)
|
||||
- [Đảo ngược màu](./invert-colors)
|
||||
- [Điều chỉnh màu sắc](./adjust-colors)
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: Đánh số Bates
|
||||
description: Áp dụng số Bates cho một hoặc nhiều PDF với mẫu, độ đệm số, phông chữ và vị trí tùy chỉnh.
|
||||
---
|
||||
|
||||
# Đánh số Bates
|
||||
|
||||
Đánh số Bates đóng dấu các mã định danh tuần tự lên mọi trang trong PDF của bạn. Đây là phương pháp tiêu chuẩn để gắn nhãn tài liệu trong tố tụng pháp lý, kiểm toán và quy trình tuân thủ. Công cụ này hỗ trợ nhiều tệp, mẫu tùy chỉnh, và tạo các PDF được đánh số riêng lẻ hoặc một tệp nén ZIP duy nhất.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều tệp PDF. Bạn có thể kéo nhiều tệp cùng lúc.
|
||||
2. Chọn một kiểu cài sẵn hoặc tạo mẫu tùy chỉnh.
|
||||
3. Cấu hình vị trí, phông chữ, cỡ chữ, màu sắc và các số bắt đầu.
|
||||
4. Nhấp **Áp dụng số Bates** để xử lý.
|
||||
5. Một tệp sẽ được tải xuống trực tiếp. Nhiều tệp sẽ được tải xuống dưới dạng tệp nén ZIP.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Kiểu cài sẵn**: Chọn từ các định dạng dựng sẵn:
|
||||
- Phụ lục + Vụ + Bates + Trang (ví dụ: "Exhibit 1 Case XYZ 000001 Page 1")
|
||||
- Phụ lục + Vụ + Bates (không có số trang)
|
||||
- Vụ + Bates
|
||||
- Chỉ số Bates (ví dụ: "000001")
|
||||
- Tùy chỉnh (tự viết mẫu của bạn)
|
||||
- **Tùy chỉnh kiểu**: Một chuỗi mẫu dùng các placeholder: `[BATES]`, `[PAGE]`, `[FILE]`, `[FILENAME]`.
|
||||
- **Độ đệm số Bates**: Số chữ số (3 đến 6) cho số Bates được đệm số 0. Chỉ hiển thị ở chế độ tùy chỉnh.
|
||||
- **Vị trí**: Đầu trang hoặc Chân trang, Trái, Giữa hoặc Phải.
|
||||
- **Số Bates bắt đầu từ**: Số Bates đầu tiên. Mặc định là 1. Việc đánh số tiếp tục xuyên suốt các tệp.
|
||||
- **Bộ đếm tệp bắt đầu từ**: Số bắt đầu cho placeholder `[FILE]`.
|
||||
- **Phông chữ**: Helvetica, Times New Roman hoặc Courier.
|
||||
- **Cỡ chữ**: Kích thước văn bản được đóng dấu.
|
||||
- **Màu sắc**: Bộ chọn màu cho văn bản số Bates.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Xem trước trực tiếp cách số Bates sẽ xuất hiện trên tất cả các tệp đã tải lên
|
||||
- Hỗ trợ nhiều tệp với việc đánh số liên tục giữa các tài liệu
|
||||
- Kéo thả sắp xếp lại tệp để điều khiển thứ tự đánh số
|
||||
- Sáu tùy chọn vị trí (đầu/chân trang, trái/giữa/phải)
|
||||
- Tính lề thích ứng, phù hợp với các khổ trang khác nhau
|
||||
- Đầu ra ZIP cho các lô nhiều tệp
|
||||
- Placeholder trong mẫu để linh hoạt tối đa
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đóng dấu tài liệu thu thập chứng cứ cho tố tụng bằng số hiệu chứng cứ tuần tự
|
||||
- Đánh số các gói bằng chứng kiểm toán gồm hàng chục tệp
|
||||
- Áp dụng số tham chiếu quy định cho tài liệu tuân thủ
|
||||
- Gắn nhãn các phụ lục hồ sơ đăng ký sáng chế bằng mã định danh riêng của vụ việc
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Kéo các tệp trong danh sách để sắp xếp lại trước khi xử lý. Thứ tự đánh số Bates theo thứ tự này.
|
||||
- Dùng placeholder `[FILENAME]` để đưa tên tệp gốc vào dấu đóng, giúp truy ngược các trang về tài liệu nguồn.
|
||||
- Ô xem trước cập nhật theo thời gian thực khi bạn đổi thiết lập, nên bạn có thể kiểm tra định dạng trước khi xử lý.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Số trang](./page-numbers)
|
||||
- [Thêm nhãn trang](./add-page-labels)
|
||||
- [Đầu trang & Chân trang](./header-footer)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: BMP sang PDF
|
||||
description: Chuyển đổi ảnh bitmap BMP sang định dạng PDF ngay trong trình duyệt, không cần tải lên bất kỳ máy chủ nào.
|
||||
---
|
||||
|
||||
# BMP sang PDF
|
||||
|
||||
Chuyển đổi tệp Windows Bitmap (BMP) sang PDF. BMP là định dạng ảnh không nén vẫn còn gặp trong các hệ thống cũ, chẩn đoán hình ảnh y tế và máy quét công nghiệp. Công cụ này chuyển chúng sang PDF mà không cần cài đặt gì.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :-------- | :----------- |
|
||||
| BMP | `.bmp` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo thả các tệp BMP của bạn.
|
||||
2. Xem lại danh sách tệp. Thêm tệp khác hoặc xóa những tệp không cần.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Đầu ra được tải xuống với tên `from_bmps.pdf`.
|
||||
|
||||
Mỗi BMP được vẽ lên canvas, xuất ra PNG, rồi nhúng vào PDF bằng pdf-lib. Kích thước trang khớp với kích thước ảnh gốc.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có thêm thiết lập chất lượng. Hình ảnh được nhúng ở độ phân giải gốc dưới dạng PNG không mất dữ liệu trong PDF.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển các tài liệu quét cũ lưu dưới dạng BMP thành PDF lưu trữ
|
||||
- Biến ảnh chụp màn hình BMP từ các ứng dụng Windows cũ thành tài liệu có thể chia sẻ
|
||||
- Xử lý đầu ra của máy quét y tế hoặc công nghiệp mặc định là BMP
|
||||
- Di chuyển các kho ảnh cũ sang định dạng dễ mang theo hơn
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp BMP không nén nên thường rất lớn. PDF kết quả sẽ nhỏ hơn đáng kể vì hình ảnh được mã hóa lại thành PNG bên trong.
|
||||
- Nếu bạn có tệp BMP cùng các định dạng ảnh khác, hãy dùng công cụ [Hình ảnh sang PDF](./image-to-pdf) để chuyển đổi tất cả trong một lô.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
- [PNG sang PDF](./png-to-pdf)
|
||||
- [TIFF sang PDF](./tiff-to-pdf)
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: Chỉnh sửa Bookmark
|
||||
description: Thêm, sửa, nhập, xuất và xóa dấu trang PDF bằng trình chỉnh sửa trực quan, hỗ trợ CSV/JSON.
|
||||
---
|
||||
|
||||
# Chỉnh sửa Bookmark
|
||||
|
||||
Trình chỉnh sửa dấu trang cho bạn toàn quyền kiểm soát các dấu trang điều hướng (còn gọi là outline) của PDF. Bạn có thể thêm dấu trang mới, sửa dấu trang hiện có, sắp xếp lại cấu trúc phân cấp, và nhập hoặc xuất dữ liệu dấu trang ở định dạng CSV và JSON.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải PDF lên bằng cách nhấp hoặc kéo thả tệp vào vùng thả.
|
||||
2. Có thể chọn **Tự động trích xuất dấu trang hiện có** để lấy cây dấu trang hiện tại của tài liệu.
|
||||
3. Trình chỉnh sửa mở ra với chế độ chia đôi: trình xem PDF ở bên trái, bảng dấu trang ở bên phải.
|
||||
4. Nhập tiêu đề dấu trang và nhấp **Thêm vào trang** để tạo dấu trang mới trỏ đến trang hiện tại.
|
||||
5. Dùng các nút trên thanh công cụ để sắp xếp lại, tạo kiểu hoặc xóa dấu trang.
|
||||
6. Nhấp **Lưu PDF kèm dấu trang** để tải xuống tệp đã cập nhật.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Trình xem PDF trực quan với điều hướng trang, điều khiển thu phóng và ô nhập số trang cần đến
|
||||
- Thêm dấu trang vào bất kỳ trang nào chỉ với một cú nhấp
|
||||
- Nhấp trực tiếp lên PDF để đặt điểm đến chính xác cho dấu trang (chế độ chọn)
|
||||
- Cấu trúc dấu trang lồng nhau, sắp xếp lại bằng kéo và thả
|
||||
- Thao tác hàng loạt: chọn nhiều dấu trang để đổi màu, đổi kiểu hoặc xóa cùng lúc
|
||||
- Tìm kiếm dấu trang để nhanh chóng tìm mục trong cây lớn
|
||||
- Hỗ trợ hoàn tác và làm lại cho mọi thay đổi
|
||||
- Nhập dấu trang từ tệp CSV (tiêu đề, trang, cấp) hoặc JSON
|
||||
- Xuất dấu trang ra CSV hoặc JSON để chỉnh sửa bên ngoài
|
||||
- Tạo kiểu dấu trang: màu (đỏ, xanh dương, xanh lá, vàng, tím) và kiểu chữ (đậm, nghiêng, đậm nghiêng)
|
||||
- Điều hướng nhanh: cuộn qua các trang bằng phím Page Up/Page Down
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Tự động trích xuất dấu trang hiện có**: Khi chọn, công cụ đọc và hiển thị các dấu trang hiện tại của PDF lúc tải.
|
||||
- **Chế độ hàng loạt**: Bật để chọn nhiều dấu trang và áp dụng đổi màu, đổi kiểu hoặc xóa hàng loạt.
|
||||
- **Mở rộng/Thu gọn tất cả**: Nhanh chóng hiện hoặc ẩn các dấu trang con lồng nhau.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Thêm mục lục cho sách giáo khoa hoặc sổ tay chưa có dấu trang
|
||||
- Sắp xếp lại dấu trang trong tài liệu quét sau khi xử lý OCR
|
||||
- Xuất dấu trang ra CSV, chỉnh sửa trong bảng tính rồi nhập lại
|
||||
- Dọn dẹp các dấu trang tự động tạo có tham chiếu trang sai
|
||||
- Thêm dấu trang có màu để đánh dấu các phần quan trọng trong hồ sơ pháp lý
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Dùng nhập CSV để tạo hàng loạt dấu trang. Định dạng đơn giản: `title,page,level`, trong đó level 1 là cấp cao nhất.
|
||||
- Chế độ chọn cho phép nhấp vào đúng một vị trí trên trang PDF để đặt điểm đến của dấu trang, chính xác hơn so với chỉ nhắm đến số trang.
|
||||
- Hãy xuất dấu trang trước khi thực hiện thay đổi lớn để có bản sao lưu.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Mục lục](./table-of-contents)
|
||||
- [Trình chỉnh sửa PDF](./edit-pdf)
|
||||
- [Thêm nhãn trang](./add-page-labels)
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: CBZ sang PDF
|
||||
description: Chuyển đổi kho lưu trữ truyện tranh CBZ và CBR sang PDF ngay trong trình duyệt. Miễn phí, riêng tư, không cần tải lên.
|
||||
---
|
||||
|
||||
# CBZ sang PDF
|
||||
|
||||
Biến các tệp lưu trữ truyện tranh thành PDF. CBZ và CBR là định dạng tiêu chuẩn của truyện tranh kỹ thuật số: thực chất chúng chỉ là kho lưu trữ ZIP hoặc RAR chứa đầy hình ảnh. Công cụ này trích xuất từng trang, giữ nguyên thứ tự đọc và tạo ra một PDF gọn gàng, trong đó mỗi hình ảnh trở thành một trang kích thước đầy đủ.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :-------- | :----------- | :-------------------------------------------------------- |
|
||||
| CBZ | `.cbz` | Kho truyện tranh dựa trên ZIP (xử lý cục bộ bằng pdf-lib) |
|
||||
| CBR | `.cbr` | Kho truyện tranh dựa trên RAR (xử lý qua engine PyMuPDF) |
|
||||
|
||||
Trình chuyển đổi CBZ nhận dạng các hình ảnh JPEG, PNG, GIF, BMP, WebP, AVIF, TIFF, HEIC và JXL trong kho lưu trữ. Các định dạng không chuẩn được tự động chuyển sang PNG trước khi nhúng.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo thả các tệp CBZ hoặc CBR. Bạn có thể trộn cả hai định dạng trong một lô.
|
||||
2. Xem lại danh sách tệp. Xóa những tệp không cần, hoặc nhấp **Thêm tệp** để thêm nữa.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Với tệp CBZ, công cụ giải nén kho lưu trữ, sắp xếp các tệp hình ảnh theo tên theo thứ tự tự nhiên, phát hiện định dạng thực của từng hình ảnh, rồi nhúng chúng vào PDF bằng pdf-lib. Tệp CBR được chuyển qua engine PyMuPDF.
|
||||
4. Một tệp sẽ được tải xuống dưới dạng PDF. Nhiều tệp sẽ tạo ra một kho ZIP tên là `comic-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không cần cấu hình. Mỗi hình ảnh trở thành một trang có kích thước khớp với kích thước gốc, nên các trang đôi vẫn rộng và các trang đơn vẫn hẹp.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đọc truyện tranh trên máy tính bảng hoặc ứng dụng điện thoại hỗ trợ PDF nhưng không hỗ trợ CBZ/CBR
|
||||
- In một số trang cụ thể từ truyện tranh kỹ thuật số
|
||||
- Lưu trữ bộ sưu tập truyện tranh ở định dạng mà trình xem tệp nào cũng mở được
|
||||
- Chia sẻ truyện tranh với người không có trình đọc truyện chuyên dụng
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hình ảnh trong kho lưu trữ được sắp xếp theo thứ tự tự nhiên (nên `page2.jpg` đứng trước `page10.jpg`). Hãy đặt tên tệp với cách đánh số nhất quán để có thứ tự trang đúng.
|
||||
- Trình chuyển đổi phát hiện định dạng hình ảnh bằng chữ ký nhị phân, không dựa vào phần mở rộng tệp. Một tệp PNG vô tình đặt tên `.jpg` vẫn được nhúng đúng.
|
||||
- Tệp CBZ được xử lý hoàn toàn trong trình duyệt mà không cần tải engine PyMuPDF, nên chuyển đổi nhanh hơn tệp CBR.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [EPUB sang PDF](./epub-to-pdf)
|
||||
- [MOBI sang PDF](./mobi-to-pdf)
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: Thay đổi quyền
|
||||
description: Đặt hoặc sửa quyền sử dụng PDF cho việc in, sao chép, chỉnh sửa và chú thích. Dùng mã hóa AES 256-bit.
|
||||
---
|
||||
|
||||
# Thay đổi quyền
|
||||
|
||||
Tinh chỉnh những gì người nhận có thể làm với PDF của bạn. Khác với mã hóa cơ bản chỉ khóa tệp bằng mật khẩu, công cụ này cho phép bạn chọn cho phép hoặc từ chối việc in, sao chép, chỉnh sửa, chú thích, điền biểu mẫu, ghép tài liệu và trích xuất trang, tất cả đều được thực thi qua mã hóa AES 256-bit.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Nếu PDF đã được mã hóa, nhập **Mật khẩu hiện tại**.
|
||||
3. Đặt **Mật khẩu người dùng mới** (bắt buộc để mở tệp) và/hoặc **Mật khẩu chủ sở hữu mới** (kiểm soát quyền).
|
||||
4. Bật hoặc tắt từng quyền bằng các ô chọn.
|
||||
5. Nhấp **Thay đổi quyền**.
|
||||
6. Tải xuống PDF đã cập nhật.
|
||||
|
||||
Nếu bạn để trống cả hai ô mật khẩu mới, công cụ sẽ giải mã hoàn toàn PDF, gỡ bỏ mọi mã hóa và hạn chế.
|
||||
|
||||
## Các điều khiển quyền
|
||||
|
||||
| Quyền | Kiểm soát điều gì |
|
||||
| ----------------------------- | ---------------------------------------------------------- |
|
||||
| **Cho phép in** | Tài liệu có thể được in hay không |
|
||||
| **Cho phép sao chép** | Văn bản và hình ảnh có thể được chọn và sao chép hay không |
|
||||
| **Cho phép chỉnh sửa** | Nội dung tài liệu có thể được chỉnh sửa hay không |
|
||||
| **Cho phép chú thích** | Có thể thêm bình luận, đánh dấu và con dấu hay không |
|
||||
| **Cho phép điền biểu mẫu** | Các trường biểu mẫu tương tác có thể được điền hay không |
|
||||
| **Cho phép ghép tài liệu** | Có thể chèn, xóa hoặc xoay trang hay không |
|
||||
| **Cho phép trích xuất trang** | Từng trang riêng lẻ có thể được trích xuất hay không |
|
||||
|
||||
Mọi quyền đều cần mật khẩu chủ sở hữu để được thực thi. Nếu không có mật khẩu chủ sở hữu, hầu hết trình đọc PDF sẽ bỏ qua các cờ quyền.
|
||||
|
||||
## Quyền hoạt động như thế nào trong PDF
|
||||
|
||||
Quyền PDF là một phần của đặc tả mã hóa. Chúng được lưu dưới dạng cờ bit trong từ điển mã hóa và được các trình đọc PDF tuân thủ thực thi. Điểm khác biệt chính:
|
||||
|
||||
- **Mật khẩu người dùng**: Bắt buộc để mở tệp.
|
||||
- **Mật khẩu chủ sở hữu**: Bắt buộc để thay đổi quyền hoặc gỡ bỏ hạn chế. Nếu không có, các cờ quyền kiểm soát những thao tác người dùng được thực hiện.
|
||||
|
||||
Nếu bạn chỉ đặt mật khẩu chủ sở hữu (không có mật khẩu người dùng), ai cũng mở được tệp nhưng chỉ được thực hiện các thao tác cho phép. Nếu đặt cả hai, tệp cần mật khẩu để mở và bị hạn chế sau khi xác thực.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Phân phối báo cáo có thể xem và in nhưng không thể chỉnh sửa hoặc sao chép
|
||||
- Chia sẻ mẫu hợp đồng mà người nhận có thể điền nhưng không thể sửa
|
||||
- Xuất bản danh mục PDF đã tắt khả năng sao chép hình ảnh
|
||||
- Cho phép chú thích trên bản nháp cần duyệt nhưng ngăn thay đổi cấu trúc
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Để có hiệu lực, hãy luôn đặt mật khẩu chủ sở hữu. Quyền không có mật khẩu chủ sở hữu không thể thực thi.
|
||||
- Một số công cụ PDF của bên thứ ba bỏ qua cờ quyền. Để bảo vệ mạnh hơn, hãy cân nhắc chuyển PDF thành ảnh raster hoặc dùng DRM.
|
||||
- Dùng công cụ này để nâng cấp PDF cũ mã hóa RC4 lên AES-256.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Mã hóa PDF](./protect-pdf): bảo vệ bằng mật khẩu đơn giản, không có quyền chi tiết
|
||||
- [Giải mã PDF](./unlock-pdf): gỡ bỏ hoàn toàn mã hóa
|
||||
- [Xóa hạn chế](./remove-restrictions): gỡ mọi hạn chế khi bạn có mật khẩu chủ sở hữu
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Kết hợp thành một trang
|
||||
description: Ghép tất cả các trang của PDF thành một trang cuộn liên tục theo chiều dọc hoặc chiều ngang.
|
||||
---
|
||||
|
||||
# Kết hợp thành một trang
|
||||
|
||||
Gộp mọi trang của PDF thành một trang dài duy nhất. Các trang được ghép theo chiều dọc (như một cuộn giấy) hoặc chiều ngang (cạnh nhau), tạo ra một trang liên tục trong tệp đầu ra.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Chọn hướng bố cục: **Dọc** (các trang xếp chồng từ trên xuống) hoặc **Ngang** (các trang đặt cạnh nhau).
|
||||
3. Đặt khoảng cách giữa các trang tính bằng point.
|
||||
4. Chọn màu nền cho khoảng trống giữa các trang.
|
||||
5. Có thể bật đường phân cách (các đường mảnh giữa các trang) và cấu hình độ dày và màu của chúng.
|
||||
6. Nhấp nút xử lý. Kết quả là một PDF một trang.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Ghép trang theo chiều dọc hoặc ngang
|
||||
- Khoảng cách giữa các trang có thể cấu hình
|
||||
- Bộ chọn màu nền cho vùng khoảng trống
|
||||
- Đường phân cách tùy chọn với độ dày và màu chỉnh được
|
||||
- Kết xuất từng trang gốc ở độ phân giải đầy đủ lên canvas gộp
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mô tả |
|
||||
| -------------------------- | ------------------------------------------- |
|
||||
| **Hướng** | Dọc (xếp chồng) hoặc Ngang (cạnh nhau) |
|
||||
| **Khoảng cách trang** | Khoảng trống giữa các trang tính bằng point |
|
||||
| **Màu nền** | Màu của vùng giữa các trang |
|
||||
| **Thêm đường phân cách** | Bật các đường mảnh giữa các trang |
|
||||
| **Độ dày đường phân cách** | Độ dày đường tính bằng point |
|
||||
| **Màu đường phân cách** | Màu của các đường phân cách |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tạo một hình ảnh dài duy nhất từ wireframe hoặc bản mockup thiết kế nhiều trang
|
||||
- Tạo chế độ xem cuộn liên tục của tài liệu để nhúng vào web
|
||||
- Ghép truyện tranh hoặc storyboard nhiều trang thành một dải
|
||||
- Tạo cái nhìn toàn cảnh về các trang liên tiếp để xem xét
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hướng dọc phù hợp nhất với tài liệu có trang dọc. Hướng ngang tốt hơn cho nội dung nằm ngang.
|
||||
- Tài liệu lớn nhiều trang sẽ tạo ra đầu ra rất cao hoặc rất rộng. Một số trình xem PDF có thể gặp khó với các trang đơn cực lớn.
|
||||
- Thêm đường phân cách có màu tương phản giúp dễ thấy trang gốc này kết thúc và trang tiếp theo bắt đầu ở đâu.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [N-Up PDF](./n-up-pdf)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Chia trang](./divide-pages)
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: So sánh PDF
|
||||
description: So sánh hai tài liệu PDF cạnh nhau hoặc ở chế độ chồng lớp, với phát hiện và phân loại thay đổi chi tiết.
|
||||
---
|
||||
|
||||
# So sánh PDF
|
||||
|
||||
Tải lên hai PDF và xem chính xác điều gì đã thay đổi giữa chúng. Công cụ ghép cặp các trang một cách thông minh, phát hiện khác biệt về văn bản, hình ảnh, chú thích, đầu trang và định dạng, rồi hiển thị chúng ở dạng cạnh nhau hoặc chồng lớp.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên hai tệp PDF: bản gốc (bên trái) và bản đã sửa (bên phải).
|
||||
2. Công cụ ghép cặp các trang giữa hai tài liệu dựa trên chữ ký nội dung.
|
||||
3. Chọn chế độ xem: **Cạnh nhau** hoặc **Chồng lớp**.
|
||||
4. Chuyển giữa các cặp trang bằng điều khiển phân trang.
|
||||
5. Các khác biệt được đánh dấu và phân loại. Dùng bảng bộ lọc để tập trung vào các loại thay đổi cụ thể.
|
||||
6. Có thể xuất kết quả so sánh thành báo cáo PDF.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Tự động ghép cặp trang dựa trên độ tương đồng nội dung
|
||||
- Chế độ xem so sánh cạnh nhau và chồng lớp
|
||||
- Phân loại thay đổi: văn bản, hình ảnh, đầu trang/chân trang, chú thích, định dạng, nền
|
||||
- Công tắc bộ lọc theo từng loại để hiện hoặc ẩn các loại thay đổi cụ thể
|
||||
- Tìm kiếm thay đổi văn bản với bộ lọc truy vấn
|
||||
- Hỗ trợ OCR để so sánh tài liệu quét
|
||||
- Điều khiển thu phóng để kiểm tra chi tiết
|
||||
- Cuộn đồng bộ giữa các bảng ở chế độ cạnh nhau
|
||||
- Xuất kết quả so sánh thành PDF
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mô tả |
|
||||
| -------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| **Chế độ xem** | Cạnh nhau hoặc Chồng lớp |
|
||||
| **OCR** | Bật/tắt OCR để so sánh tài liệu quét |
|
||||
| **Ngôn ngữ OCR** | Ngôn ngữ để trích xuất văn bản bằng OCR |
|
||||
| **Bộ lọc loại** | Bật/tắt hiển thị thay đổi về văn bản, hình ảnh, đầu trang/chân trang, chú thích, định dạng và nền |
|
||||
| **Phạm vi thay đổi** | Ở chế độ chồng lớp, lọc giữa tất cả thay đổi hoặc chỉ nội dung |
|
||||
| **Thu phóng** | Điều chỉnh mức phóng đại để kiểm tra chi tiết |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xem lại các bản sửa hợp đồng để tìm chính xác điều gì đã thay đổi giữa các phiên bản
|
||||
- So sánh bản mockup thiết kế để xác nhận PDF xuất ra đúng như mong đợi
|
||||
- Kiểm toán thay đổi tài liệu trong các ngành được quản lý, nơi mọi chỉnh sửa đều phải được theo dõi
|
||||
- Xác minh quá trình chuyển đổi PDF giữ nguyên nội dung gốc một cách chính xác
|
||||
- Đối chiếu tài liệu dịch với bản gốc để tìm thay đổi về bố cục
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Chế độ chồng lớp xếp hai tài liệu lên nhau, giúp các khác biệt về không gian (phần tử bị dịch chuyển, hình ảnh bị đổi kích thước) hiện ra ngay lập tức.
|
||||
- Bật OCR khi so sánh tài liệu quét không có lớp văn bản. Engine so sánh sẽ trích xuất văn bản từ ảnh trang.
|
||||
- Dùng bộ lọc loại để tập trung vào điều quan trọng. Ví dụ, ẩn thay đổi định dạng khi bạn chỉ quan tâm đến khác biệt về nội dung văn bản.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Xem Metadata](./view-metadata)
|
||||
- [OCR PDF](./ocr-pdf)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
title: Nén PDF
|
||||
description: Giảm dung lượng tệp PDF tới 90% với engine Hyper Compress. Hỗ trợ kích thước tệp mục tiêu, xử lý hàng loạt và cài đặt chất lượng tùy chỉnh.
|
||||
---
|
||||
|
||||
# Nén PDF
|
||||
|
||||
Thu nhỏ tệp PDF mà không làm hỏng chúng. Nén PDF được cung cấp bởi [Hyper Compress](https://www.bentopdf.com/hyper-compress), engine nén riêng của BentoPDF. Nó nén lại hình ảnh, tạo tập con và gộp phông chữ, đồng thời loại bỏ phần dư thừa như ảnh thu nhỏ nhúng sẵn và dữ liệu riêng của ứng dụng. PDF vẫn hoạt động đầy đủ: văn bản vẫn chọn được, liên kết và trường biểu mẫu vẫn dùng được.
|
||||
|
||||
Hyper Compress được biên dịch sang WebAssembly và đi kèm BentoPDF, nên việc nén hoạt động offline và trong các môi trường triển khai cách ly mạng mà không cần thiết lập thêm.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào.
|
||||
2. Chọn **Mức nén**: Thấp, Trung bình, Cao hoặc Không mất dữ liệu.
|
||||
3. Có thể nhập **Kích thước tệp mục tiêu**, hoặc mở **Cài đặt tùy chỉnh** để điều chỉnh chi tiết, gồm cả **Chuyển sang thang xám**.
|
||||
4. Nhấp **Nén PDF**. Với nhiều tệp, bạn nhận được một tệp ZIP duy nhất để tải xuống.
|
||||
|
||||
## Tài liệu đặc biệt
|
||||
|
||||
- **PDF có chữ ký số** được trả về nguyên vẹn, vì mọi thay đổi đều làm mất hiệu lực chữ ký. Bật **Ghi đè bảo vệ nội dung** trong Cài đặt tùy chỉnh để gỡ chữ ký và nén chúng; chữ ký hiển thị vẫn nằm trên trang, nhưng tệp không còn được ký.
|
||||
- **Tệp PDF/A** mất nhãn PDF/A sau khi nén, để tệp không bao giờ tuyên bố một mức tuân thủ mà nó không còn đáp ứng. Bật **Giữ PDF/A** trong Cài đặt tùy chỉnh để giữ tệp tuân thủ.
|
||||
- **PDF có mật khẩu** có ô nhập mật khẩu trên thẻ tệp. Nhập mật khẩu ở đó và Hyper Compress tự mở tệp, không cần bước giải mã riêng. Với hai tệp bị khóa trở lên, một ô dùng chung sẽ mở khóa mọi tệp có cùng mật khẩu. Bản đã nén không có mật khẩu; hãy dùng [Mã hóa PDF](./protect-pdf) để thêm lại.
|
||||
- **Bản quét không có lớp văn bản** có thể nhỏ hơn nữa với **Raster hóa trang** trong Cài đặt tùy chỉnh, thay mỗi trang bằng một hình ảnh đã tối ưu. Tùy chọn này bị bỏ qua với mọi tài liệu có văn bản chọn được, kể cả bản quét đã qua OCR, trừ khi **Ghi đè bảo vệ nội dung** đang bật. Khi đó các trang văn bản cũng thành hình ảnh, nên văn bản không còn chọn được và liên kết ngừng hoạt động.
|
||||
|
||||
## Mức nén
|
||||
|
||||
| Mức | Chất lượng hình ảnh | Độ phân giải tối đa | Phù hợp nhất cho |
|
||||
| --------------------- | ------------------- | ------------------- | ------------------------------- |
|
||||
| **Thấp** | 80 | 200 DPI | Giữ chất lượng hình ảnh |
|
||||
| **Trung bình** | 50 | 150 DPI | Tài liệu hằng ngày |
|
||||
| **Cao** | 20 | 72 DPI | Tệp đính kèm email, tải lên web |
|
||||
| **Không mất dữ liệu** | Hình ảnh giữ nguyên | Không đổi | Bản lưu trữ |
|
||||
|
||||
Mức Cao còn gỡ nhúng 14 phông chữ PDF tiêu chuẩn, cùng các phông tương tự như Arial khi an toàn.
|
||||
|
||||
## Kích thước tệp mục tiêu
|
||||
|
||||
Nhập kích thước theo KB hoặc MB và Hyper Compress sẽ tìm chất lượng hình ảnh tốt nhất vẫn vừa kích thước đó, bắt đầu từ mức bạn đã chọn. Nếu tài liệu không thể nhỏ đến vậy, bạn nhận được phiên bản nhỏ nhất có thể cùng một thông báo cho biết điều đó. Các trang chuyên biệt như [Nén PDF xuống 1MB](https://www.bentopdf.com/compress-pdf-to-1mb) mở ra với mục tiêu đã được điền sẵn.
|
||||
|
||||
## Cài đặt tùy chỉnh
|
||||
|
||||
Mở bảng Cài đặt tùy chỉnh để điều chỉnh trực tiếp Hyper Compress. Chọn một mức nén sẽ đặt lại các giá trị này về giá trị của mức đó, và chỉnh sửa bất kỳ giá trị nào sẽ chuyển mức sang Tùy chỉnh.
|
||||
|
||||
- **Ghi đè bảo vệ nội dung**: theo mặc định Hyper Compress không động đến PDF đã ký và không raster hóa các trang có văn bản. Bật tùy chọn này sẽ bỏ qua cả hai. Nó vẫn bật khi bạn đổi mức.
|
||||
|
||||
- **Hình ảnh**: chất lượng hình ảnh, độ phân giải tối đa, buộc lấy mẫu lại, giảm màu, cắt các vùng ảnh vô hình, xóa ảnh thay thế, đơn giản hóa hồ sơ màu, JPEG 2000 và chế độ không mất dữ liệu
|
||||
- **Phông chữ**: tạo tập con, gộp bản trùng và gỡ nhúng phông chuẩn cùng các phông tương tự
|
||||
- **Nội dung**: làm phẳng chú thích, trường biểu mẫu hoặc liên kết
|
||||
- **Dọn dẹp**: xóa ảnh thu nhỏ, dữ liệu ứng dụng, article thread, thông tin chụp web, cây cấu trúc hoặc output intent
|
||||
- **Raster hóa**: thay trang bằng hình ảnh, cho bản quét chỉ có ảnh; bị bỏ qua khi tài liệu có văn bản chọn được
|
||||
- **Đầu ra**: Giữ PDF/A, và nén Brotli cho trình đọc PDF 2.0 có hỗ trợ
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đưa báo cáo 50 MB xuống dưới giới hạn tệp đính kèm email
|
||||
- Đưa bản quét xuống dưới giới hạn tải lên nghiêm ngặt của một cổng thông tin bằng kích thước tệp mục tiêu
|
||||
- Tối ưu PDF tiếp thị để tải xuống từ website nhanh hơn
|
||||
- Lưu trữ bộ tài liệu lớn khi chi phí lưu trữ là vấn đề
|
||||
- Giảm lưu lượng dữ liệu di động khi chia sẻ PDF qua ứng dụng nhắn tin
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Bắt đầu với Trung bình. Nếu kết quả vẫn quá lớn, hãy đặt kích thước tệp mục tiêu hoặc tăng lên Cao.
|
||||
- Với bản quét không có lớp văn bản, hãy bật Raster hóa trang trong Cài đặt tùy chỉnh.
|
||||
- Chuyển sang thang xám, trong Cài đặt tùy chỉnh, có thể giảm dung lượng với tài liệu nhiều màu.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Tuyến tính hóa PDF](./linearize-pdf): tối ưu PDF đã nén để xem web nhanh
|
||||
- [Raster hóa PDF](./rasterize-pdf): chuyển trang thành hình ảnh ở DPI cụ thể, kể cả trang có văn bản
|
||||
- [Sửa chữa PDF](./repair-pdf): sửa PDF bị hỏng trong quá trình nén ở nơi khác
|
||||
- [Xóa metadata](./remove-metadata): loại bỏ dữ liệu ẩn để bảo vệ quyền riêng tư
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Cắt PDF
|
||||
description: Cắt các trang PDF trực quan bằng cách vẽ vùng cắt trên từng trang với trình chỉnh sửa dùng Cropper.js.
|
||||
---
|
||||
|
||||
# Cắt PDF
|
||||
|
||||
Cắt bớt lề các trang PDF bằng giao diện cắt trực quan. Vẽ hình chữ nhật cắt trực tiếp trên từng trang, xem trước kết quả rồi áp dụng. Bạn có thể đặt vùng cắt khác nhau cho từng trang hoặc áp dụng cùng một vùng cắt cho toàn bộ tài liệu.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF.
|
||||
2. Trình chỉnh sửa cắt mở ra, hiển thị trang đầu tiên với lớp phủ cắt có thể kéo.
|
||||
3. Điều chỉnh hình chữ nhật cắt bằng cách kéo các cạnh hoặc góc.
|
||||
4. Dùng các nút điều hướng trang để chuyển giữa các trang và đặt vùng cắt cho từng trang.
|
||||
5. Nhấp **Cắt** để áp dụng và tải xuống kết quả.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Trình chỉnh sửa cắt trực quan dùng Cropper.js với các tay nắm để điều chỉnh chính xác
|
||||
- Điều hướng từng trang để đặt vùng cắt riêng
|
||||
- Lưu cài đặt cắt theo từng trang để bạn có thể định nghĩa vùng cắt khác nhau cho các trang khác nhau
|
||||
- Xem trước trực tiếp vùng cắt đã chọn
|
||||
- Hỗ trợ PDF với mọi kích thước và hướng trang
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Loại bỏ lề rộng khỏi tài liệu quét để tập trung vào vùng nội dung
|
||||
- Cắt bỏ dấu cắt hoặc dấu căn chỉnh của máy in khỏi PDF tiền in
|
||||
- Cắt slide bài giảng để bỏ vùng ghi chú của người trình bày
|
||||
- Loại bỏ đầu trang hoặc chân trang khỏi mọi trang trước khi chia sẻ đoạn trích tài liệu
|
||||
- Đổi kích thước trang cho vừa một màn hình hoặc bố cục in cụ thể
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Lớp phủ cắt có thể đổi kích thước và di chuyển tự do. Kéo các góc để đổi kích thước theo tỷ lệ hoặc kéo các cạnh để chỉnh theo một trục.
|
||||
- Với tài liệu mà mọi trang cần cùng một vùng cắt, hãy đặt nó trên trang đầu tiên: công cụ ghi nhớ vùng cắt của bạn khi bạn chuyển trang.
|
||||
- Nếu bạn cần chuẩn hóa kích thước trang thay vì cắt trực quan, công cụ Sửa kích thước trang có thể phù hợp hơn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Trình chỉnh sửa PDF](./edit-pdf)
|
||||
- [Số trang](./page-numbers)
|
||||
- [Xóa trang trống](./remove-blank-pages)
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: CSV sang PDF
|
||||
description: Chuyển đổi tệp bảng tính CSV thành bảng PDF đã định dạng ngay trong trình duyệt.
|
||||
---
|
||||
|
||||
# CSV sang PDF
|
||||
|
||||
Biến tệp CSV thành tài liệu PDF gọn gàng, đã định dạng. Mỗi tệp CSV được phân tích và hiển thị dưới dạng bảng trong PDF đầu ra. Điều này hữu ích khi bạn cần in hoặc chia sẻ dữ liệu dạng bảng mà người nhận không cần có phần mềm bảng tính.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :-------- | :----------- |
|
||||
| CSV | `.csv` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo thả một hoặc nhiều tệp CSV.
|
||||
2. Xem lại danh sách tệp. Thêm tệp hoặc xóa những tệp không cần.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Thanh tiến trình hiển thị trạng thái chuyển đổi.
|
||||
4. Một tệp được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp được đóng gói vào `csv-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có cấu hình bổ sung. CSV được tự động phân tích và định dạng thành bảng.
|
||||
|
||||
## Đầu ra
|
||||
|
||||
| Số tệp đầu vào | Đầu ra |
|
||||
| :------------- | :----------------------------------------------------- |
|
||||
| 1 tệp | Tải xuống một PDF (ví dụ: `data.pdf`) |
|
||||
| 2+ tệp | Kho ZIP (`csv-converted.zip`) chứa một PDF cho mỗi tệp |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển các báo cáo cơ sở dữ liệu đã xuất thành bảng PDF có thể in
|
||||
- Chia sẻ dữ liệu tài chính hoặc danh sách kho cho người không có Excel
|
||||
- Tạo phiên bản PDF của tệp nhật ký CSV cho tài liệu tuân thủ
|
||||
- In danh sách địa chỉ, bảng điểm hoặc bất kỳ dữ liệu bảng nào lưu dưới dạng CSV
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Để có kết quả tốt nhất, hãy đảm bảo CSV dùng dấu phân cách là dấu phẩy chuẩn. Công cụ tuân theo các quy ước phân tích CSV phổ biến.
|
||||
- Nếu CSV có nhiều cột, bảng có thể bị nén lại để vừa chiều rộng trang. Hãy cân nhắc chia các bộ dữ liệu rộng thành nhiều tệp.
|
||||
- Với tệp Excel (`.xls`, `.xlsx`), hãy dùng công cụ [Excel sang PDF](./excel-to-pdf), giữ nguyên định dạng bảng tính và nhiều trang tính.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Excel sang PDF](./excel-to-pdf)
|
||||
- [Văn bản sang PDF](./txt-to-pdf)
|
||||
- [JSON sang PDF](./json-to-pdf)
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Xóa trang
|
||||
description: Xóa các trang cụ thể khỏi PDF theo số trang, phạm vi hoặc chọn trực quan bằng ảnh thu nhỏ.
|
||||
---
|
||||
|
||||
# Xóa trang
|
||||
|
||||
Xóa các trang không cần thiết khỏi tài liệu PDF. Chỉ định trang cần xóa bằng cách nhập số trang hoặc phạm vi, hoặc nhấp trực tiếp vào ảnh thu nhỏ để đánh dấu xóa.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF. Công cụ hiển thị ảnh thu nhỏ xem trước của mọi trang.
|
||||
2. Nhập các trang cần xóa vào ô văn bản theo cú pháp phạm vi (ví dụ: `2, 5-8`), hoặc nhấp vào ảnh thu nhỏ để bật/tắt chúng.
|
||||
3. Các trang được đánh dấu sẽ được làm nổi bật để bạn xác nhận lựa chọn.
|
||||
4. Nhấp nút xử lý. Một PDF mới được tạo với các trang đã chọn bị xóa.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Chọn trang bằng văn bản với cú pháp phạm vi (`2, 5-8, 12`)
|
||||
- Lưới ảnh thu nhỏ trực quan để nhấp chọn xóa
|
||||
- Làm nổi bật theo thời gian thực các trang được đánh dấu xóa
|
||||
- Kiểm tra đầu vào dựa trên số trang thực tế
|
||||
- Giữ tất cả các trang không bị xóa theo thứ tự ban đầu
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xóa các trang trống hoặc trang đệm khỏi tài liệu quét
|
||||
- Bỏ trang bìa hoặc phụ lục trước khi chia sẻ tài liệu
|
||||
- Dọn các trang nháp vô tình còn sót trong PDF cuối cùng
|
||||
- Xóa các trang chứa thông tin nhạy cảm trước khi phân phối
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Xóa trang không ảnh hưởng đến nội dung hay định dạng của các trang còn lại. Đầu ra là bản sao trung thực của bản gốc trừ các trang đã xóa.
|
||||
- Nếu bạn muốn chỉ giữ một số trang cụ thể thay vì xóa một số trang, [Trích xuất trang](./extract-pages) phù hợp hơn.
|
||||
- Chế độ xem ảnh thu nhỏ tải theo kiểu lazy, nên tài liệu lớn vẫn phản hồi mượt.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Trích xuất trang](./extract-pages)
|
||||
- [Sắp xếp và nhân bản](./organize-pdf)
|
||||
- [Chia PDF](./split-pdf)
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Chỉnh nghiêng PDF
|
||||
description: Tự động chỉnh thẳng các trang bị nghiêng trong PDF quét bằng phát hiện độ nghiêng của OpenCV. Có thể điều chỉnh ngưỡng và DPI.
|
||||
---
|
||||
|
||||
# Chỉnh nghiêng PDF
|
||||
|
||||
Tài liệu quét hiếm khi thẳng hoàn hảo. Chỉ một độ nghiêng nhỏ cũng làm OCR kém chính xác và bản in trông cẩu thả. Công cụ này dùng các thuật toán xử lý ảnh của OpenCV để phát hiện góc nghiêng của từng trang và xoay nó về ngang bằng.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF quét.
|
||||
2. Đặt **Ngưỡng độ nghiêng**: các trang có độ nghiêng phát hiện được thấp hơn giá trị này sẽ được giữ nguyên.
|
||||
3. Chọn **Chất lượng xử lý (DPI)**: DPI cao hơn giúp phát hiện chính xác hơn nhưng mất nhiều thời gian hơn.
|
||||
4. Nhấp **Chỉnh thẳng PDF**.
|
||||
5. Sau khi xử lý, bảng kết quả hiển thị góc phát hiện được của từng trang và trang đó có được chỉnh hay không.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Cài đặt | Giá trị | Mặc định |
|
||||
| --------------------- | --------------------- | -------- |
|
||||
| **Ngưỡng độ nghiêng** | 0.1, 0.5, 1.0, 2.0 độ | 0.5 |
|
||||
| **DPI xử lý** | 100, 150, 200, 300 | 150 |
|
||||
|
||||
## Cách phát hiện độ nghiêng hoạt động
|
||||
|
||||
Công cụ kết xuất từng trang thành ảnh ở DPI đã chọn, sau đó dùng OpenCV để phát hiện các góc đường chủ đạo trong nội dung. Nếu độ nghiêng phát hiện được vượt ngưỡng, trang được xoay theo góc ngược lại để làm thẳng. Các trang dưới ngưỡng được giữ nguyên.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Dọn dẹp hợp đồng hoặc tài liệu pháp lý quét hàng loạt
|
||||
- Chuẩn bị biên lai hoặc hóa đơn quét cho xử lý OCR
|
||||
- Chỉnh thẳng các trang từ máy quét phẳng khi giấy đặt không đồng đều
|
||||
- Cải thiện chất lượng hình ảnh của tài liệu lưu trữ đã số hóa
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hạ ngưỡng xuống 0.1 độ nếu bạn cần căn chỉnh chính xác từng điểm ảnh cho OCR.
|
||||
- 150 DPI nhanh và chính xác với hầu hết tài liệu. Dùng 300 DPI cho văn bản rất nhỏ hoặc trang nhiều chi tiết.
|
||||
- Chỉnh thẳng hoạt động tốt nhất với tài liệu có các dòng văn bản ngang rõ ràng. Nó có thể gặp khó với các trang chủ yếu là hình ảnh hoặc có yếu tố thiết kế đường chéo.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Raster hóa PDF](./rasterize-pdf): chuyển đầu ra đã chỉnh thẳng thành PDF dạng ảnh phẳng
|
||||
- [Nén PDF](./compress-pdf): giảm dung lượng tệp sau khi chỉnh thẳng
|
||||
- [Sửa chữa PDF](./repair-pdf): sửa lỗi cấu trúc trong PDF quét
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: Chữ ký số
|
||||
description: Thêm chữ ký số mật mã vào PDF bằng chứng chỉ X.509. Hỗ trợ định dạng PKCS#12 và PEM với tùy chọn chữ ký hiển thị.
|
||||
---
|
||||
|
||||
# Chữ ký số
|
||||
|
||||
Chữ ký số là bằng chứng mật mã cho thấy một người cụ thể đã ký tài liệu và tài liệu không bị thay đổi kể từ đó. Khác với chữ ký vẽ tay (chỉ là một hình ảnh), chữ ký số dùng chứng chỉ X.509 và chuẩn PKCS#7 để cung cấp tính xác thực và toàn vẹn có thể kiểm chứng.
|
||||
|
||||
BentoPDF áp dụng chữ ký số hoàn toàn trong trình duyệt của bạn. Khóa riêng của bạn không bao giờ rời khỏi thiết bị.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Tải lên tệp chứng chỉ của bạn (.pfx, .p12 hoặc .pem).
|
||||
3. Nhập mật khẩu chứng chỉ để mở khóa. Công cụ hiển thị chủ thể, nhà phát hành và thời hạn hiệu lực của chứng chỉ.
|
||||
4. Có thể cấu hình metadata chữ ký (lý do, địa điểm, thông tin liên hệ).
|
||||
5. Có thể bật **chữ ký hiển thị** với tùy chỉnh vị trí, kích thước, hình ảnh và văn bản.
|
||||
6. Nhấp **Ký PDF**.
|
||||
|
||||
## Định dạng chứng chỉ được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Mô tả |
|
||||
| ----------- | ------------ | ----------------------------------------------------------------------------------------------------- |
|
||||
| **PKCS#12** | .pfx, .p12 | Gói chuẩn công nghiệp chứa khóa riêng và chuỗi chứng chỉ. Định dạng phổ biến nhất. |
|
||||
| **PEM** | .pem | Định dạng văn bản. Phải chứa cả chứng chỉ và khóa riêng trong một tệp. Hỗ trợ khóa riêng được mã hóa. |
|
||||
|
||||
## Tùy chọn chữ ký hiển thị
|
||||
|
||||
Khi bật, một khối chữ ký hiển thị được vẽ trên trang PDF:
|
||||
|
||||
- **Vị trí**: Tọa độ X/Y và chiều rộng/chiều cao tính bằng point
|
||||
- **Trang**: Trang đầu, trang cuối, tất cả các trang hoặc một số trang cụ thể
|
||||
- **Hình ảnh**: Tải lên ảnh PNG, JPG hoặc WebP (chữ ký tay, con dấu công ty, v.v.)
|
||||
- **Văn bản**: Văn bản tùy chỉnh với màu và cỡ chữ có thể cấu hình. Nếu không có hình ảnh hoặc văn bản, công cụ tự tạo văn bản từ tên chung (common name) của chứng chỉ và ngày hiện tại.
|
||||
|
||||
## Metadata chữ ký
|
||||
|
||||
- **Lý do**: Vì sao tài liệu được ký (ví dụ: "Đã phê duyệt", "Đã xem xét")
|
||||
- **Địa điểm**: Nơi việc ký diễn ra (ví dụ: "New York, NY")
|
||||
- **Thông tin liên hệ**: Cách liên lạc với người ký (ví dụ: địa chỉ email)
|
||||
|
||||
## Lưu ý về kết nối Internet
|
||||
|
||||
Việc ký có thể cần kết nối Internet. Thư viện ký tải chuỗi chứng chỉ từ các URL nhúng trong phần mở rộng Authority Information Access (AIA) của chứng chỉ. Nếu không truy cập được các máy chủ đó, việc ký sẽ thất bại với các chứng chỉ cần xác thực chuỗi.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Ký hợp đồng, đề xuất và thỏa thuận bằng chữ ký số có giá trị pháp lý
|
||||
- Chứng thực tài liệu chính thức trong quy trình yêu cầu xác thực dựa trên PKI
|
||||
- Ký hóa đơn PDF để tuân thủ quy định (nhiều nước EU yêu cầu hóa đơn điện tử có chữ ký số)
|
||||
- Thêm phê duyệt của tổ chức vào bản vẽ kỹ thuật hoặc tài liệu chất lượng
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Chứng chỉ tự ký dùng được để thử nghiệm nhưng sẽ hiện cảnh báo trong Adobe Reader. Hãy dùng chứng chỉ từ một Tổ chức cấp chứng chỉ (CA) đáng tin cậy cho tài liệu chính thức.
|
||||
- Chữ ký hiển thị chỉ mang tính trực quan. Chữ ký mật mã luôn được nhúng dù khối hiển thị có được bật hay không.
|
||||
- Hãy xác minh PDF đã ký bằng công cụ Xác thực chữ ký để chắc chắn chữ ký còn nguyên vẹn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Xác thực chữ ký](./validate-signature-pdf): xác minh chữ ký số trong PDF đã ký
|
||||
- [Làm phẳng PDF](./flatten-pdf): làm phẳng biểu mẫu trước khi ký để ngăn chỉnh sửa
|
||||
- [Mã hóa PDF](./protect-pdf): thêm bảo vệ bằng mật khẩu lên trên chữ ký số
|
||||
- [Xóa metadata](./remove-metadata): loại bỏ metadata trước khi ký
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Chia trang
|
||||
description: Chia các trang PDF theo chiều ngang hoặc dọc thành các trang con nhỏ hơn.
|
||||
---
|
||||
|
||||
# Chia trang
|
||||
|
||||
Cắt từng trang PDF thành hai nửa bằng cách chia theo chiều ngang hoặc dọc. Công cụ này hữu ích khi một trang chứa nội dung cần tách thành các trang riêng, ví dụ bố cục hai cột được quét thành một trang rộng.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Chọn hướng chia: **Dọc** (nửa trái/phải) hoặc **Ngang** (nửa trên/dưới).
|
||||
3. Có thể chỉ định phạm vi trang để giới hạn các trang được chia. Để trống để chia tất cả các trang.
|
||||
4. Nhấp nút xử lý để tạo PDF đã chia.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Chia dọc: chia mỗi trang thành nửa trái và nửa phải
|
||||
- Chia ngang: chia mỗi trang thành nửa trên và nửa dưới
|
||||
- Bộ lọc phạm vi trang để chia có chọn lọc các trang cụ thể
|
||||
- Các trang không được chọn được giữ nguyên
|
||||
- Giữ chất lượng nội dung mà không cần kết xuất lại
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tách các trang quét hai mặt trên một tờ (ví dụ: bản quét sách có trang trái và phải trên cùng một tờ)
|
||||
- Chia PDF ngang có nội dung đặt cạnh nhau thành các trang dọc riêng lẻ
|
||||
- Chia infographic hoặc áp phích cao thành các phần trên và dưới riêng biệt
|
||||
- Chuẩn bị tài liệu khổ rộng để in trên giấy tiêu chuẩn
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu nội dung trên trang phân bố không đều, việc chia vẫn diễn ra đúng tại điểm giữa. Với cách chia không đối xứng, hãy cân nhắc dùng [Cắt PDF](./crop-pdf).
|
||||
- Kết hợp công cụ này với [Xoay PDF](./rotate-pdf) nếu các trang cần xoay trước hoặc sau khi chia.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Chia PDF](./split-pdf)
|
||||
- [Cắt PDF](./crop-pdf)
|
||||
- [N-Up PDF](./n-up-pdf)
|
||||
- [Chia PDF thành poster](./posterize-pdf)
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Sắp xếp bản quét hai mặt
|
||||
description: Sắp xếp lại PDF quét hai mặt có các trang mặt trước và mặt sau nằm trong các khối riêng thành đúng thứ tự trước/sau.
|
||||
---
|
||||
|
||||
# Sắp xếp bản quét hai mặt
|
||||
|
||||
Sắp xếp quét hai mặt được thiết kế cho quy trình quét ADF, nơi một PDF chứa hai khối trang:
|
||||
|
||||
- tất cả mặt trước trước
|
||||
- tất cả mặt sau sau
|
||||
|
||||
Thay vì tách và ghép lại thủ công, công cụ này xen kẽ hai khối thành thứ tự đọc tự nhiên: mặt trước 1, mặt sau 1, mặt trước 2, mặt sau 2, và cứ thế.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một PDF được tạo từ việc quét xấp giấy hai mặt.
|
||||
2. Đặt điểm chia nơi khối mặt trước kết thúc.
|
||||
3. Chọn cách xử lý khối mặt sau:
|
||||
- **Đảo ngược khối mặt sau** (thường dùng khi xấp giấy được lật trước khi quét mặt sau)
|
||||
- **Giữ nguyên khối mặt sau**
|
||||
4. Nhấp **Sắp xếp PDF** để tải xuống kết quả đã sắp xếp lại.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Tự động phát hiện điểm chia (một nửa)**: đặt điểm chia là `ceil(totalPages / 2)`.
|
||||
- **Cảnh báo số trang lẻ**: cảnh báo khi tổng số trang là số lẻ (thường là do quét lệch).
|
||||
- **Xác nhận khối không đều**: yêu cầu xác nhận khi kích thước khối mặt trước/mặt sau khác nhau.
|
||||
- **Xuất theo nhóm**: chia đầu ra đã sắp xếp thành các PDF riêng dựa trên số trang của tài liệu gốc và tải xuống dưới dạng ZIP.
|
||||
|
||||
## Hành vi đầu ra
|
||||
|
||||
- **Mặc định**: một PDF đầu ra (một PDF đầu vào, một PDF đầu ra).
|
||||
- **Chế độ theo nhóm**: đầu ra được chia khúc theo giá trị số trang mỗi tài liệu của bạn; nếu tạo ra nhiều khúc, chúng được tải xuống dưới dạng một ZIP, ngược lại tải xuống một PDF.
|
||||
|
||||
Nếu kích thước các khối không đều, các trang đã ghép cặp được sắp xếp trước, và các trang còn lại chưa ghép cặp được nối vào cuối.
|
||||
|
||||
## Trường hợp sử dụng phổ biến
|
||||
|
||||
- Khôi phục thứ tự sau khi quét một chồng biểu mẫu hai mặt trong hai lượt.
|
||||
- Dựng lại các bộ mặt trước/mặt sau từ máy quét văn phòng xuất tất cả mặt trước rồi đến tất cả mặt sau.
|
||||
- Hậu xử lý bản quét lưu trữ trước khi chia thành các tệp theo từng tài liệu.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hầu hết các lô quét hai mặt nên có tổng số trang chẵn.
|
||||
- Nếu mặt sau trông bị ngược, hãy chuyển giữa **Đảo ngược khối mặt sau** và **Giữ nguyên khối mặt sau**.
|
||||
- Với bản gốc 2 trang (mặt trước + mặt sau), hãy dùng xuất theo nhóm với `2` trang mỗi tài liệu.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Xen kẽ và trộn trang](./alternate-merge)
|
||||
- [Chia PDF](./split-pdf)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Sắp xếp và nhân bản](./organize-pdf)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Chỉnh sửa tệp đính kèm
|
||||
description: Xem và xóa có chọn lọc các tệp đính kèm nhúng trong tài liệu PDF.
|
||||
---
|
||||
|
||||
# Chỉnh sửa tệp đính kèm
|
||||
|
||||
Kiểm tra và quản lý các tệp đính kèm bên trong PDF. Công cụ liệt kê mọi tệp nhúng cùng tên và cấp đính kèm, sau đó cho phép bạn đánh dấu từng tệp để xóa hoặc xóa tất cả cùng lúc.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Công cụ tự động quét các tệp đính kèm và hiển thị chúng trong danh sách.
|
||||
3. Mỗi tệp đính kèm hiển thị tên tệp và cho biết đó là tệp đính kèm cấp tài liệu hay cấp trang.
|
||||
4. Nhấp biểu tượng thùng rác bên cạnh một tệp đính kèm để đánh dấu xóa (nhấp lại để bỏ đánh dấu).
|
||||
5. Dùng nút **Xóa tất cả tệp đính kèm** để chọn tất cả cùng lúc, hoặc **Bỏ chọn tất cả** để xóa các lựa chọn.
|
||||
6. Nhấp nút xử lý để lưu PDF mới với các tệp đính kèm đã chọn bị xóa.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Liệt kê tất cả tệp đính kèm cấp tài liệu và cấp trang
|
||||
- Xóa từng tệp hoặc hàng loạt
|
||||
- Bật/tắt lựa chọn trước khi áp dụng thay đổi
|
||||
- Gạch ngang và giảm độ đậm trực quan trên các mục được đánh dấu xóa
|
||||
- Tải xuống PDF đã sửa với các tệp đính kèm đã chọn bị loại bỏ
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xóa các tệp lỗi thời hoặc sai được nhúng trong tài liệu trước khi phân phối lại
|
||||
- Loại bỏ các tệp đính kèm nhạy cảm (dữ liệu tài chính, thông tin cá nhân) khỏi PDF trước khi chia sẻ
|
||||
- Giảm dung lượng PDF bằng cách xóa các tệp nhúng lớn không còn cần thiết
|
||||
- Kiểm tra nội dung nhúng và dọn dẹp tài liệu trước khi lưu trữ
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Các tệp đính kèm được đánh dấu xóa được hiển thị với đường gạch ngang. Bạn có thể bật lại chúng trước khi xử lý nếu đổi ý.
|
||||
- Nếu không tìm thấy tệp đính kèm nào, công cụ hiển thị thông báo rõ ràng "Không tìm thấy tệp đính kèm": PDF đơn giản là không chứa tệp nhúng.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Thêm tệp đính kèm](./add-attachments)
|
||||
- [Trích xuất tệp đính kèm](./extract-attachments)
|
||||
- [Xem Metadata](./view-metadata)
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: Chỉnh sửa Metadata
|
||||
description: Xem và sửa các trường metadata của PDF gồm tiêu đề, tác giả, từ khóa, ngày tháng và thuộc tính tùy chỉnh.
|
||||
---
|
||||
|
||||
# Chỉnh sửa Metadata
|
||||
|
||||
Chỉnh sửa metadata nhúng trong tệp PDF. Công cụ điền sẵn một biểu mẫu với metadata hiện có của tài liệu, cho phép bạn sửa bất kỳ trường nào và lưu thay đổi vào một PDF mới.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF. Công cụ đọc metadata hiện tại và điền vào biểu mẫu.
|
||||
2. Chỉnh sửa bất kỳ trường chuẩn nào: Tiêu đề, Tác giả, Chủ đề, Từ khóa, Creator, Producer.
|
||||
3. Điều chỉnh Ngày tạo và Ngày sửa đổi bằng bộ chọn ngày giờ.
|
||||
4. Thêm trường metadata tùy chỉnh bằng cách nhấp nút thêm và nhập một cặp khóa-giá trị.
|
||||
5. Nhấp nút xử lý để lưu PDF đã sửa.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Điền sẵn toàn bộ metadata hiện có từ PDF đã tải lên
|
||||
- Trường chuẩn: Tiêu đề, Tác giả, Chủ đề, Từ khóa, Creator, Producer
|
||||
- Bộ chọn ngày giờ cho Ngày tạo và Ngày sửa đổi
|
||||
- Trường metadata khóa-giá trị tùy chỉnh cho các thuộc tính tùy ý
|
||||
- Lưu thay đổi trực tiếp vào từ điển thông tin tài liệu của PDF
|
||||
|
||||
## Các trường có thể chỉnh sửa
|
||||
|
||||
| Trường | Mô tả |
|
||||
| -------------------- | -------------------------------------------------------------- |
|
||||
| **Tiêu đề** | Tiêu đề tài liệu hiển thị trong trình đọc PDF |
|
||||
| **Tác giả** | Người hoặc tổ chức đã tạo tài liệu |
|
||||
| **Chủ đề** | Mô tả ngắn về chủ đề của tài liệu |
|
||||
| **Từ khóa** | Các thuật ngữ phân tách bằng dấu phẩy để tìm kiếm và phân loại |
|
||||
| **Ứng dụng tạo** | Ứng dụng đã tạo nội dung ban đầu |
|
||||
| **Trình tạo PDF** | Ứng dụng đã tạo ra PDF |
|
||||
| **Ngày tạo** | Thời điểm tài liệu được tạo ban đầu |
|
||||
| **Ngày sửa đổi** | Thời điểm tài liệu được sửa đổi lần cuối |
|
||||
| **Trường tùy chỉnh** | Mọi cặp khóa-giá trị bổ sung do bạn định nghĩa |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đặt tiêu đề và tác giả phù hợp trước khi xuất bản tài liệu
|
||||
- Thêm từ khóa để cải thiện khả năng tìm kiếm trong hệ thống quản lý tài liệu
|
||||
- Cập nhật ngày sửa đổi để phản ánh bản chỉnh sửa hiện tại
|
||||
- Thêm các trường metadata tùy chỉnh như Phòng ban, Mã dự án hoặc Phân loại
|
||||
- Dọn dẹp metadata do phần mềm soạn thảo gốc để lại
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Trường tùy chỉnh được ghi trực tiếp vào từ điển info của PDF. Một số trình đọc PDF có thể không hiển thị trường tùy chỉnh, nhưng chúng vẫn được giữ trong tệp.
|
||||
- Để trống một trường để xóa nó khỏi metadata. Nút xử lý lưu mọi thứ đang có trong biểu mẫu.
|
||||
- Để xem metadata mà không chỉnh sửa, hãy dùng [Xem Metadata](./view-metadata). Để xóa toàn bộ metadata, hãy dùng Xóa metadata.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Xem Metadata](./view-metadata)
|
||||
- [Lớp PDF (OCG)](./pdf-layers)
|
||||
- [Nén PDF](./compress-pdf)
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Trình chỉnh sửa PDF
|
||||
description: Chú thích, đánh dấu, che thông tin, thêm hình khối và hình ảnh, tìm kiếm và xem PDF ngay trong trình duyệt.
|
||||
---
|
||||
|
||||
# Trình chỉnh sửa PDF
|
||||
|
||||
Trình chỉnh sửa PDF của BentoPDF cho phép bạn chú thích, đánh dấu, che thông tin, bình luận, thêm hình khối và hình ảnh, và tìm kiếm trong PDF. Nó tải một trình chỉnh sửa đầy đủ tính năng ngay trong trình duyệt mà không cần tải lên máy chủ.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải PDF lên bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Trình chỉnh sửa PDF nhúng tự động mở với tài liệu của bạn đã được tải.
|
||||
3. Dùng thanh công cụ để chú thích, đánh dấu, che thông tin, thêm văn bản, vẽ hình khối hoặc chèn hình ảnh.
|
||||
4. Nhấp **Tải xuống PDF đã chỉnh sửa** để lưu thay đổi.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Thanh công cụ chú thích đầy đủ với đánh dấu, gạch chân, gạch ngang và vẽ tay tự do
|
||||
- Chèn văn bản và bình luận
|
||||
- Công cụ che thông tin xóa vĩnh viễn nội dung đã đánh dấu sau khi bạn áp dụng. Nếu còn dấu nào chưa được áp dụng khi bạn nhấp **Tải xuống PDF đã chỉnh sửa**, trình chỉnh sửa sẽ đề nghị áp dụng chúng trước.
|
||||
- Công cụ hình khối cho hình chữ nhật, hình tròn, đường thẳng và mũi tên
|
||||
- Chèn hình ảnh lên các trang PDF
|
||||
- Tìm kiếm văn bản tích hợp trong tài liệu
|
||||
- Hỗ trợ nhiều tài liệu với các tab (tối đa 10 tài liệu mở cùng lúc)
|
||||
- Tải tệp bằng kéo và thả
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xem xét hợp đồng và đánh dấu các thay đổi bằng highlight và bình luận
|
||||
- Che thông tin mật như số an sinh xã hội hoặc dữ liệu tài chính trước khi chia sẻ
|
||||
- Thêm chú thích vào bản vẽ kiến trúc hoặc kỹ thuật
|
||||
- Chèn logo công ty hoặc con dấu lên các trang tài liệu
|
||||
- Tìm kiếm các thuật ngữ cụ thể trong tài liệu pháp lý dài
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Bạn có thể mở nhiều PDF cùng lúc và chuyển giữa chúng bằng thanh tab ở đầu trình chỉnh sửa.
|
||||
- Trình chỉnh sửa giữ nguyên cấu trúc PDF gốc, nên phông chữ, bố cục và trường biểu mẫu vẫn nguyên vẹn.
|
||||
- Đánh dấu văn bản hoặc một vùng để che thông tin sẽ không xóa gì cho đến khi việc che được áp dụng. Khi bạn che văn bản đã chọn, các bản sao của nó trong thuộc tính tệp, dấu trang, bình luận và tệp đính kèm cũng bị xóa khỏi bản tải xuống, trừ khi tệp được mã hóa.
|
||||
- Với việc thêm watermark hoặc đánh số trang hàng loạt, hãy dùng các công cụ chuyên dụng để kiểm soát định dạng tốt hơn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Thêm watermark](./add-watermark)
|
||||
- [Ký PDF](./sign-pdf)
|
||||
- [Thêm con dấu](./add-stamps)
|
||||
- [Xóa chú thích](./remove-annotations)
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: Email sang PDF
|
||||
description: Chuyển đổi tệp email EML và MSG sang PDF ngay trong trình duyệt. Giữ nguyên tiêu đề, nội dung và danh sách tệp đính kèm.
|
||||
---
|
||||
|
||||
# Email sang PDF
|
||||
|
||||
Chuyển các tệp email đã lưu thành PDF gọn gàng, có thể in. Công cụ phân tích tệp EML và MSG, trích xuất toàn bộ thư (tiêu đề, nội dung và metadata tệp đính kèm) và hiển thị tất cả thành một PDF có cấu trúc. Hữu ích cho thu thập chứng cứ pháp lý, lưu hồ sơ, hoặc đơn giản là in một email quan trọng.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :-------- | :----------- | :---------------------------------------------------------- |
|
||||
| EML | `.eml` | Định dạng email MIME chuẩn (xuất từ hầu hết ứng dụng email) |
|
||||
| MSG | `.msg` | Định dạng độc quyền của Microsoft Outlook |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo thả các tệp EML hoặc MSG. Bạn có thể trộn cả hai định dạng trong một lô.
|
||||
2. Xem lại danh sách tệp. Xóa các mục không cần bằng biểu tượng thùng rác, hoặc nhấp **Thêm tệp** để thêm email.
|
||||
3. Cấu hình các tùy chọn chuyển đổi (xem bên dưới).
|
||||
4. Nhấp **Chuyển đổi sang PDF**. Công cụ phân tích từng email, hiển thị nội dung dưới dạng HTML có định dạng và chuyển sang PDF qua engine PyMuPDF.
|
||||
5. Một email được tải xuống trực tiếp dưới dạng PDF. Nhiều email được đóng gói vào `emails-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mặc định | Mô tả |
|
||||
| :--------------------------------- | :------- | :--------------------------------------------------------------------------------------------- |
|
||||
| **Khổ giấy** | A4 | Chọn giữa kích thước A4, Letter hoặc Legal. |
|
||||
| **Bao gồm CC và BCC** | Bật | Khi bật, danh sách người nhận CC và BCC xuất hiện trong phần tiêu đề email của PDF. |
|
||||
| **Bao gồm danh sách tệp đính kèm** | Bật | Khi bật, danh sách các tệp đính kèm của email (kèm tên tệp và kích thước) xuất hiện trong PDF. |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Lưu trữ thư từ kinh doanh quan trọng dưới dạng PDF để tuân thủ hoặc kiểm toán
|
||||
- In chuỗi email cho thủ tục pháp lý hoặc yêu cầu cung cấp chứng cứ
|
||||
- Tạo hồ sơ vĩnh viễn cho xác nhận đơn hàng, biên lai hoặc hợp đồng nhận qua email
|
||||
- Sao lưu tệp Outlook MSG ở định dạng không cần Outlook để đọc
|
||||
- Ghi lại các tương tác hỗ trợ khách hàng từ các tệp EML đã xuất
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Cả EML (dùng bởi Thunderbird, Apple Mail và hầu hết ứng dụng email) lẫn tệp Outlook MSG đều được hỗ trợ. Hãy xuất email từ ứng dụng email của bạn và thả thẳng vào công cụ.
|
||||
- Email định dạng HTML giữ nguyên kiểu dáng trong PDF. Email văn bản thuần được hiển thị với định dạng gọn gàng, dễ đọc.
|
||||
- Danh sách tệp đính kèm hiển thị tên tệp và kích thước nhưng không nhúng chính các tệp đính kèm vào PDF.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [XML sang PDF](./xml-to-pdf)
|
||||
- [XPS sang PDF](./xps-to-pdf)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: EPUB sang PDF
|
||||
description: Chuyển đổi sách điện tử EPUB sang PDF ngay trong trình duyệt. Miễn phí, không cần tải lên, ưu tiên quyền riêng tư.
|
||||
---
|
||||
|
||||
# EPUB sang PDF
|
||||
|
||||
Chuyển sách điện tử EPUB thành tệp PDF mà không cần rời trình duyệt. EPUB là chuẩn mở cho sách kỹ thuật số, nhưng đôi khi bạn cần một PDF bố cục cố định để in, chú thích hoặc chia sẻ với người không có trình đọc sách điện tử.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :-------- | :----------- | :------------------- |
|
||||
| EPUB | `.epub` | Tệp EPUB 2 và EPUB 3 |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo thả các tệp EPUB. Hỗ trợ chọn nhiều tệp.
|
||||
2. Xem lại các tệp đã tải lên. Xóa các mục không cần bằng biểu tượng thùng rác, hoặc nhấp **Thêm tệp** để mở rộng lô.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Engine PyMuPDF kết xuất nội dung EPUB (văn bản, hình ảnh và định dạng) thành PDF được chia trang.
|
||||
4. Một tệp EPUB được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp được đóng gói vào kho ZIP tên là `epub-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Việc chuyển đổi chạy với các mặc định hợp lý và không cần cấu hình. Văn bản được dàn lại theo kích thước trang tiêu chuẩn, phông chữ và hình ảnh nhúng được giữ trong PDF.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- In sách điện tử không DRM để đọc khi không dùng màn hình
|
||||
- Nộp bản thảo EPUB dưới dạng PDF bố cục cố định để xem xét
|
||||
- Lưu trữ sách kỹ thuật số ở định dạng mà hệ điều hành nào cũng mở được
|
||||
- Chia sẻ một chương với đồng nghiệp không có trình đọc EPUB
|
||||
- Chuyển tài liệu kỹ thuật phân phối dưới dạng EPUB thành PDF có thể chú thích
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Các tính năng EPUB 3 như âm thanh và video nhúng sẽ không được giữ trong PDF, nhưng toàn bộ văn bản, hình ảnh và bảng được chuyển đổi gọn gàng.
|
||||
- Để có kết quả tốt nhất với EPUB có nhiều kiểu dáng, hãy kiểm tra vài trang đầu của đầu ra để xác nhận bố cục đúng.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [MOBI sang PDF](./mobi-to-pdf)
|
||||
- [FB2 sang PDF](./fb2-to-pdf)
|
||||
- [CBZ sang PDF](./cbz-to-pdf)
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Excel sang PDF
|
||||
description: Chuyển đổi bảng tính Excel (XLS, XLSX), ODS và CSV sang PDF với định dạng được giữ nguyên.
|
||||
---
|
||||
|
||||
# Excel sang PDF
|
||||
|
||||
Chuyển đổi tệp bảng tính sang PDF. Công cụ xử lý tệp Excel hiện đại, định dạng XLS cũ, bảng tính OpenDocument, thậm chí cả CSV, tất cả được kết xuất qua engine LibreOffice chạy trong trình duyệt, giữ nguyên định dạng ô, công thức (dưới dạng giá trị đã tính), biểu đồ và bố cục nhiều trang tính.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :----------------------- | :----------- |
|
||||
| Excel (hiện đại) | `.xlsx` |
|
||||
| Excel (cũ) | `.xls` |
|
||||
| OpenDocument Spreadsheet | `.ods` |
|
||||
| CSV | `.csv` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo thả các tệp bảng tính.
|
||||
2. Xem lại danh sách tệp. Thêm tệp hoặc xóa những tệp không cần.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Engine LibreOffice khởi tạo ở lần dùng đầu tiên, sau đó xử lý từng tệp.
|
||||
4. Một tệp được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp được cung cấp dưới dạng `excel-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có cấu hình bổ sung. Engine LibreOffice quyết định bố cục trang, tỷ lệ và vùng in dựa trên cài đặt sẵn có của bảng tính.
|
||||
|
||||
## Đầu ra
|
||||
|
||||
| Số tệp đầu vào | Đầu ra |
|
||||
| :------------- | :------------------------------------------------------- |
|
||||
| 1 tệp | Tải xuống một PDF (tên tệp gốc với phần mở rộng `.pdf`) |
|
||||
| 2+ tệp | Kho ZIP (`excel-converted.zip`) chứa một PDF cho mỗi tệp |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển báo cáo tài chính hoặc ngân sách từ Excel sang PDF để phân phối
|
||||
- Tạo PDF sẵn sàng in từ bảng tính hàng tồn kho hoặc danh mục sản phẩm
|
||||
- Chia sẻ kết quả phân tích dữ liệu với các bên liên quan không cài Excel
|
||||
- Lưu trữ báo cáo hằng quý ở định dạng không thể chỉnh sửa
|
||||
- Chuyển tệp ODS từ LibreOffice Calc sang PDF
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Biểu đồ nhúng trong bảng tính được kết xuất trong PDF. Hãy đảm bảo chúng hiển thị đúng trong tệp nguồn trước khi chuyển đổi.
|
||||
- Nếu bảng tính có nhiều trang tính, tất cả đều được đưa vào PDF đầu ra.
|
||||
- Với dữ liệu CSV đơn giản không có định dạng, công cụ [CSV sang PDF](./csv-to-pdf) cho cách chuyển đổi nhẹ hơn. Dùng Excel sang PDF khi bạn cần giữ nguyên định dạng, biểu đồ hoặc nhiều trang tính.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [CSV sang PDF](./csv-to-pdf)
|
||||
- [Word sang PDF](./word-to-pdf)
|
||||
- [PowerPoint sang PDF](./powerpoint-to-pdf)
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Trích xuất tệp đính kèm
|
||||
description: Trích xuất tất cả tệp đính kèm nhúng từ một hoặc nhiều PDF và tải xuống dưới dạng kho ZIP.
|
||||
---
|
||||
|
||||
# Trích xuất tệp đính kèm
|
||||
|
||||
Lấy ra mọi tệp đính kèm nhúng từ một hoặc nhiều tệp PDF. Tất cả tệp được trích xuất được gói vào một kho ZIP duy nhất để tải xuống.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều tệp PDF có chứa tệp đính kèm nhúng.
|
||||
2. Nhấp **Trích xuất tệp đính kèm**.
|
||||
3. Công cụ quét từng PDF để tìm tệp đính kèm cấp tài liệu và cấp trang.
|
||||
4. Tất cả tệp tìm thấy được đóng gói vào kho ZIP và tải xuống tự động.
|
||||
5. Một thông báo trạng thái xác nhận số lượng tệp đính kèm tìm thấy và tổng dung lượng của chúng.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Trích xuất hàng loạt từ nhiều PDF cùng lúc
|
||||
- Trích xuất cả tệp đính kèm cấp tài liệu và cấp trang
|
||||
- Xuất một tệp ZIP duy nhất chứa mọi tệp đã trích xuất
|
||||
- Hiển thị tổng số tệp đính kèm và tổng dung lượng
|
||||
- Thông báo trạng thái rõ ràng nếu không tìm thấy tệp đính kèm
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Khôi phục tệp dữ liệu nhúng trong PDF báo cáo
|
||||
- Lấy tài nguyên hình ảnh ra khỏi hồ sơ năng lực hoặc tài liệu đặc tả
|
||||
- Trích xuất tài liệu bổ sung từ PDF đào tạo hoặc tuân thủ
|
||||
- Kiểm tra những tệp nào được nhúng trong một loạt PDF
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu công cụ báo không có tệp đính kèm, PDF có thể chứa hình ảnh nhúng hoặc dữ liệu biểu mẫu thay vì tệp đính kèm: những thứ đó không phải tệp đính kèm. Hãy dùng [Trích xuất hình ảnh](./extract-images) cho hình ảnh nhúng.
|
||||
- Khi xử lý nhiều PDF, tất cả tệp đính kèm từ mọi tệp nằm trong một ZIP. Tên tệp được giữ nguyên từ lúc nhúng ban đầu.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Thêm tệp đính kèm](./add-attachments)
|
||||
- [Chỉnh sửa tệp đính kèm](./edit-attachments)
|
||||
- [Trích xuất hình ảnh](./extract-images)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Trích xuất hình ảnh
|
||||
description: Trích xuất tất cả hình ảnh nhúng từ tệp PDF. Xem trước trong lưới và tải xuống từng ảnh hoặc dưới dạng kho ZIP.
|
||||
---
|
||||
|
||||
# Trích xuất hình ảnh
|
||||
|
||||
Lấy ra mọi hình ảnh nhúng từ một hoặc nhiều tệp PDF. Các hình ảnh đã trích xuất được hiển thị trong lưới xem trước, nơi bạn có thể tải xuống từng ảnh hoặc lấy tất cả cùng lúc dưới dạng ZIP. Được cung cấp bởi PyMuPDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó. Thêm tệp hoặc xóa từng tệp khi cần.
|
||||
2. Nhấp **Trích xuất** để bắt đầu xử lý.
|
||||
3. Công cụ quét mọi trang của mọi PDF đã tải lên, tìm và trích xuất các hình ảnh nhúng.
|
||||
4. Các hình ảnh đã trích xuất xuất hiện trong lưới với ảnh thu nhỏ. Mỗi hình ảnh có một nút tải xuống.
|
||||
5. Nhấp **Tải xuống tất cả** để lưu mọi thứ dưới dạng kho ZIP.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Tất cả hình ảnh nhúng được trích xuất ở định dạng gốc (thường là PNG, JPEG hoặc định dạng nào được dùng khi hình ảnh được nhúng vào PDF).
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- Hình ảnh hiển thị trong lưới xem trước với tên `image_1.png`, `image_2.jpg`, v.v.
|
||||
- **Tải xuống tất cả** tạo ra `extracted-images.zip` chứa mọi hình ảnh.
|
||||
- Có thể tải xuống từng hình ảnh một từ lưới.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Khôi phục ảnh hoặc đồ họa từ PDF để dùng lại trong dự án khác.
|
||||
- Trích xuất ảnh sản phẩm từ PDF danh mục cho danh sách thương mại điện tử.
|
||||
- Lấy sơ đồ từ tài liệu kỹ thuật để dùng trong bài thuyết trình.
|
||||
- Kiểm tra những hình ảnh nào được nhúng trong tài liệu trước khi chia sẻ.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Công cụ trích xuất hình ảnh đúng như được lưu trong PDF. Nó không kết xuất lại các trang thành hình ảnh: để làm vậy, hãy dùng [PDF sang PNG](./pdf-to-png) hoặc [PDF sang JPG](./pdf-to-jpg).
|
||||
- Nếu công cụ báo "Không tìm thấy hình ảnh", PDF có thể dùng đồ họa vector thay vì hình ảnh raster nhúng, hoặc là tài liệu quét mà cả trang là một hình ảnh lớn.
|
||||
- Xử lý hàng loạt hoạt động trên nhiều PDF. Tất cả hình ảnh từ mọi tệp được gộp vào một lưới và một ZIP.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
- [Trình tạo quy trình PDF](./pdf-workflow)
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: Trích xuất trang
|
||||
description: Lưu một phạm vi trang cụ thể từ PDF thành tài liệu mới.
|
||||
---
|
||||
|
||||
# Trích xuất trang
|
||||
|
||||
Lấy một nhóm trang ra khỏi PDF và lưu thành tệp mới. Chỉ định chính xác các trang bạn muốn bằng cú pháp phạm vi, và công cụ tạo ra một PDF gọn gàng chỉ chứa những trang đó.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF. Công cụ hiển thị tên tệp, dung lượng và tổng số trang.
|
||||
2. Nhập các trang bạn muốn trích xuất bằng cú pháp phạm vi (ví dụ: `1-5`, `3, 7, 10-12`).
|
||||
3. Có thể chọn tải xuống từng phạm vi dưới dạng PDF riêng trong kho ZIP.
|
||||
4. Nhấp nút xử lý. Các trang đã trích xuất được tải xuống dưới dạng PDF mới (hoặc ZIP).
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Cú pháp phạm vi trang linh hoạt: từng trang, phạm vi hoặc tổ hợp phân tách bằng dấu phẩy
|
||||
- Hiển thị tổng số trang sau khi tải lên để dễ tham khảo
|
||||
- Tùy chọn xuất thành một PDF gộp hoặc các tệp riêng trong ZIP
|
||||
- Giữ nguyên nội dung và định dạng trang gốc
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Lấy phần tóm tắt điều hành (vài trang đầu) ra khỏi báo cáo dài
|
||||
- Trích xuất một chương từ PDF sách giáo khoa
|
||||
- Lưu các trang cụ thể từ bộ biểu mẫu thành tài liệu độc lập
|
||||
- Tạo tài liệu mẫu từ các trang chọn lọc của một tệp lớn hơn
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Số trang bắt đầu từ 1. Dùng `1` cho trang đầu tiên, không phải `0`.
|
||||
- Để xóa trang thay vì trích xuất, hãy dùng [Xóa trang](./delete-pages): đây là thao tác ngược lại.
|
||||
- Nếu bạn cần chọn trang trực quan bằng ảnh thu nhỏ, hãy dùng [Chia PDF](./split-pdf) ở chế độ Chọn trực quan.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Chia PDF](./split-pdf)
|
||||
- [Xóa trang](./delete-pages)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Trích xuất bảng
|
||||
description: Phát hiện và trích xuất bảng từ tài liệu PDF. Xuất ra CSV, JSON hoặc Markdown theo từng bảng.
|
||||
---
|
||||
|
||||
# Trích xuất bảng
|
||||
|
||||
Phát hiện tất cả bảng trong PDF và cho phép bạn xuất chúng ở định dạng tùy chọn: CSV, JSON hoặc Markdown. Mỗi bảng được trích xuất riêng kèm metadata về trang và vị trí. Được cung cấp bởi engine phát hiện bảng của PyMuPDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải PDF lên bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Chọn **định dạng xuất** ưa thích: CSV, JSON hoặc Markdown.
|
||||
3. Nhấp **Trích xuất** để bắt đầu xử lý.
|
||||
4. Nếu tìm thấy một bảng, nó được tải xuống dưới dạng một tệp. Nhiều bảng tạo ra kho ZIP với một tệp cho mỗi bảng.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Định dạng xuất**: chọn giữa:
|
||||
- **CSV**: giá trị phân tách bằng dấu phẩy với dấu trích dẫn đúng cho các trường chứa dấu phẩy, dấu ngoặc kép hoặc xuống dòng. Phù hợp cho bảng tính và cơ sở dữ liệu.
|
||||
- **JSON**: cấu trúc mảng của các mảng, in đẹp với thụt lề 2 dấu cách. Phù hợp để xử lý bằng chương trình.
|
||||
- **Markdown**: định dạng bảng phân tách bằng dấu gạch đứng do PyMuPDF tạo ra. Phù hợp cho tài liệu và tệp README.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một bảng**: `filename_table.csv` (hoặc `.json` / `.md`)
|
||||
- **Nhiều bảng**: `filename_tables.zip` chứa các tệp tên `table_1_page3.csv`, `table_2_page5.csv`, v.v.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Trích xuất các bảng cụ thể từ báo cáo PDF dài mà không lấy dữ liệu của cả tài liệu.
|
||||
- Lấy bảng ở định dạng Markdown để dán trực tiếp vào issue GitHub, wiki hoặc tài liệu.
|
||||
- Lấy dữ liệu JSON có cấu trúc từ bảng PDF cho tích hợp API hoặc script.
|
||||
- So sánh bảng giữa các phiên bản PDF khác nhau bằng cách xuất cả hai ra CSV rồi diff.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Công cụ này cho bạn quyền kiểm soát theo từng bảng. Nếu bạn chỉ muốn dồn tất cả bảng vào một CSV, hãy dùng [PDF sang CSV](./pdf-to-csv). Để có cả sổ làm việc Excel, hãy dùng [PDF sang Excel](./pdf-to-excel).
|
||||
- Các bảng trải dài nhiều trang có thể bị phát hiện thành các bảng riêng cho mỗi trang. Bạn có thể cần nối chúng thủ công.
|
||||
- Nếu không phát hiện bảng nào, PDF có thể là ảnh quét. Hãy chạy OCR trước để thêm lớp văn bản.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang CSV](./pdf-to-csv)
|
||||
- [PDF sang Excel](./pdf-to-excel)
|
||||
- [PDF sang văn bản](./pdf-to-text)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: FB2 sang PDF
|
||||
description: Chuyển đổi tệp sách điện tử FictionBook (FB2) sang PDF ngay trong trình duyệt. Miễn phí, riêng tư, không tải lên máy chủ.
|
||||
---
|
||||
|
||||
# FB2 sang PDF
|
||||
|
||||
Chuyển đổi tệp FictionBook 2 (FB2) thành tài liệu PDF. FB2 là định dạng sách điện tử dựa trên XML, phổ biến ở Nga và Đông Âu. Định dạng này được hỗ trợ tốt trên một số nền tảng nhưng gần như không ai biết đến ở nơi khác. Chuyển sang PDF giúp sách của bạn đọc được ở mọi nơi.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :------------ | :----------- | :---------------------------------- |
|
||||
| FictionBook 2 | `.fb2` | Định dạng sách điện tử dựa trên XML |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp FB2 của bạn. Có thể chọn nhiều tệp cùng lúc.
|
||||
2. Xem lại danh sách tệp. Dùng biểu tượng thùng rác để xóa từng mục, hoặc **Thêm tệp** để bổ sung thêm.
|
||||
3. Nhấp **Chuyển sang PDF**. Công cụ PyMuPDF phân tích cấu trúc XML của FB2 và hiển thị thành nội dung PDF có phân trang.
|
||||
4. Một tệp sẽ được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp được gói trong `fb2-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không cần cấu hình. Bộ chuyển đổi tự động xử lý cấu trúc XML của FB2, giữ nguyên các ngắt chương, định dạng và mọi hình ảnh được nhúng.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đọc sách FB2 trên thiết bị hoặc ứng dụng chỉ hỗ trợ PDF
|
||||
- In văn học tiếng Nga được phát hành ở định dạng FB2
|
||||
- Lưu trữ thư viện FB2 sang một định dạng được hỗ trợ rộng rãi
|
||||
- Chia sẻ sách với người có trình đọc không hỗ trợ FictionBook
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp FB2 là XML thuần nên thường nhỏ và chuyển đổi nhanh, ngay cả trong trình duyệt.
|
||||
- Nếu tệp FB2 của bạn được nén dạng `.fb2.zip`, hãy giải nén trước khi tải lên.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [EPUB sang PDF](./epub-to-pdf)
|
||||
- [MOBI sang PDF](./mobi-to-pdf)
|
||||
- [XML sang PDF](./xml-to-pdf)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Sửa kích thước trang
|
||||
description: Chuẩn hóa mọi trang trong PDF về cùng một kích thước. Chọn khổ giấy tiêu chuẩn hoặc đặt kích thước tùy chỉnh.
|
||||
---
|
||||
|
||||
# Sửa kích thước trang
|
||||
|
||||
PDF ghép từ nhiều nguồn thường có kích thước trang không đồng nhất: trang Letter, trang A4, trang có khổ hoàn toàn khác thường. Công cụ này ép mọi trang về một kích thước đích, co giãn nội dung cho vừa hoặc lấp đầy tùy ý.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Chọn **Kích thước trang đích** từ danh sách thả xuống (A4, Letter, Legal, A3, A5, Tabloid hoặc Tùy chỉnh).
|
||||
3. Chọn **Hướng trang**: Tự động giữ nguyên hướng gốc của từng trang, hoặc bạn có thể ép hướng dọc hoặc ngang.
|
||||
4. Chọn chế độ **Co giãn nội dung**: Vừa khít (giữ toàn bộ nội dung, có thể thêm lề) hoặc Lấp đầy (phủ kín trang, có thể cắt mép).
|
||||
5. Tùy chọn đặt **Màu nền** cho phần lề được thêm vào.
|
||||
6. Nhấp **Sửa kích thước trang**.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Kích thước tiêu chuẩn**: A4, Letter, Legal, A3, A5, Tabloid
|
||||
- **Kích thước tùy chỉnh**: Nhập chiều rộng và chiều cao theo inch hoặc milimét
|
||||
- **Hướng trang**: Tự động, Dọc, Ngang
|
||||
- **Chế độ co giãn**: Vừa khít hoặc Lấp đầy (Cắt)
|
||||
- **Màu nền**: Màu bất kỳ cho phần lề đệm
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuẩn hóa PDF đã gộp mà các trang đến từ những máy quét khác nhau
|
||||
- Chuyển tài liệu US Letter sang A4 để phân phối quốc tế
|
||||
- Chuẩn bị PDF sẵn sàng để in, yêu cầu kích thước cắt xén nhất quán
|
||||
- Sửa các trang lệch chuẩn đôi chút (ví dụ 8.49 x 11.02 inch thay vì 8.5 x 11)
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Dùng chế độ Vừa khít để đảm bảo không mất nội dung. Chế độ Lấp đầy trông gọn hơn nhưng có thể cắt mất mép.
|
||||
- Kiểm tra kết quả bằng công cụ Kích thước trang để xác nhận mọi trang khớp với kích thước đích.
|
||||
- Màu nền mặc định là trắng; hãy chuyển sang màu tối nếu tài liệu của bạn có lề tối.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Kích thước trang](./page-dimensions): kiểm tra kích thước trang trước và sau khi sửa
|
||||
- [Nén PDF](./compress-pdf): giảm dung lượng tệp sau khi chuẩn hóa
|
||||
- [Cắt PDF](./crop-pdf): cắt trang thủ công thay vì tự động co giãn
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: Làm phẳng PDF
|
||||
description: Làm phẳng form tương tác và ghi chú thành nội dung tĩnh. Khiến trường form không thể chỉnh sửa và gộp ghi chú vào trang.
|
||||
---
|
||||
|
||||
# Làm phẳng PDF
|
||||
|
||||
Làm phẳng là gộp các thành phần tương tác (trường form, danh sách thả xuống, hộp kiểm, ghi chú, đánh dấu, ghi chú dán) trực tiếp vào nội dung trang. Hình thức hiển thị giữ nguyên, nhưng không còn gì có thể chỉnh sửa hay trích xuất. Nó giống như in một form đã điền rồi quét lại, chỉ khác là chất lượng vẫn hoàn hảo.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều tệp PDF.
|
||||
2. Nhấp **Làm phẳng PDF**.
|
||||
3. Một tệp sẽ được tải xuống trực tiếp. Nhiều tệp sẽ tạo thành một tệp ZIP.
|
||||
|
||||
Công cụ dùng pdf-lib để làm phẳng trường form (qua `form.flatten()`) và một bộ làm phẳng ghi chú riêng để gộp ghi chú vào luồng nội dung của trang. Cả hai thao tác diễn ra trong một lượt.
|
||||
|
||||
## Những gì được làm phẳng
|
||||
|
||||
- **Trường form**: Ô nhập văn bản, hộp kiểm, nút radio, danh sách thả xuống, trường chữ ký
|
||||
- **Ghi chú**: Bình luận, đánh dấu, gạch ngang chữ, gạch chân, ghi chú dán, tem, ghi chú nét vẽ
|
||||
- **Thành phần tương tác**: Nút, trình kích hoạt hành động
|
||||
|
||||
## Những gì giữ nguyên
|
||||
|
||||
- Nội dung văn bản (vẫn chọn và tìm kiếm được)
|
||||
- Hình ảnh và đồ họa
|
||||
- Bố cục và kích thước trang
|
||||
- Bookmark và mục lục
|
||||
- Siêu liên kết (trừ khi chúng dựa trên ghi chú)
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Khóa một form đã hoàn thành để người nhận không thể thay đổi các câu trả lời đã gửi
|
||||
- Chuẩn bị PDF để lưu trữ khi không cần các thành phần tương tác
|
||||
- Khắc phục lỗi hiển thị do ghi chú được hiển thị khác nhau giữa các trình xem
|
||||
- Đảm bảo tài liệu đã ký không thể bị sửa đổi sau khi áp dụng chữ ký
|
||||
- Giảm dung lượng tệp bằng cách loại bỏ định nghĩa trường form và đối tượng ghi chú
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hãy làm phẳng sau khi mọi chỉnh sửa đã hoàn tất. Không có cách nào để hoàn tác việc làm phẳng PDF.
|
||||
- Nếu bạn cần làm phẳng đồng thời xóa metadata, JavaScript và tệp đính kèm, hãy dùng công cụ Làm sạch PDF, vì nó có làm phẳng như một trong các tùy chọn.
|
||||
- Một số PDF báo "không tìm thấy form". Điều này bình thường nếu tài liệu chỉ có ghi chú mà không có trường form.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Làm sạch PDF](./sanitize-pdf): làm phẳng form đồng thời xóa metadata, script và nhiều thứ khác
|
||||
- [Raster hóa PDF](./rasterize-pdf): chuyển thành PDF dạng ảnh để làm phẳng triệt để nhất
|
||||
- [Phông chữ thành đường viền](./font-to-outline): làm phẳng phông chữ thành đường vector
|
||||
- [Mã hóa PDF](./protect-pdf): khóa PDF đã làm phẳng bằng mật khẩu
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Phông chữ thành đường viền
|
||||
description: Chuyển mọi phông chữ trong PDF thành đường viền vector để hiển thị nhất quán trên mọi thiết bị. Loại bỏ vấn đề phụ thuộc phông chữ.
|
||||
---
|
||||
|
||||
# Phông chữ thành đường viền
|
||||
|
||||
Chuyển phông chữ thành đường viền sẽ biến mỗi ký tự từ glyph dựa trên phông chữ thành một đường vector. PDF không còn phụ thuộc vào bất kỳ phông chữ nào được cài đặt, nên hiển thị giống hệt nhau trên mọi thiết bị, mọi hệ điều hành và mọi máy in. Đây là bước tiêu chuẩn trong quy trình tiền in ấn.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều tệp PDF.
|
||||
2. Nhấp **Chuyển thành đường viền**.
|
||||
3. Ghostscript chuyển toàn bộ văn bản thành đường vector.
|
||||
4. Tải kết quả xuống. Nhiều tệp sẽ tạo thành một tệp ZIP.
|
||||
|
||||
Không có cài đặt nào cần cấu hình. Công cụ dùng Ghostscript (WebAssembly) để chuyển mọi tham chiếu phông chữ thành đường viền trong một lượt.
|
||||
|
||||
## Những gì thay đổi
|
||||
|
||||
- Ký tự văn bản trở thành đường cong vector (đường bezier)
|
||||
- Không cần nhúng phông chữ nữa, PDF tự chứa đầy đủ ở cấp độ glyph
|
||||
- Dung lượng tệp có thể tăng vì đường vector thường lớn hơn tham chiếu phông chữ
|
||||
- Hình thức hiển thị được giữ nguyên chính xác
|
||||
|
||||
## Những gì bạn mất
|
||||
|
||||
- Chọn và sao chép dán văn bản
|
||||
- Khả năng tìm kiếm văn bản (Ctrl+F không còn hoạt động)
|
||||
- Khả năng chỉnh sửa nội dung văn bản
|
||||
- Khả năng truy cập qua trình đọc màn hình
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Gửi PDF cho xưởng in yêu cầu phông chữ đã chuyển thành đường viền
|
||||
- Chia sẻ tài liệu dùng phông chữ tùy chỉnh hoặc có bản quyền với người không có các phông chữ đó
|
||||
- Ngăn việc thay thế phông chữ làm thay đổi diện mạo tài liệu trên hệ thống khác
|
||||
- Chuẩn bị PDF cho quy trình khắc laser hoặc cắt CNC cần đầu vào vector
|
||||
- Đảm bảo PDF nhiều logo hiển thị đúng trên mọi nền tảng
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hãy giữ lại PDF gốc. Chuyển thành đường viền là không thể hoàn tác, bạn không thể chuyển đường vector trở lại văn bản có thể chỉnh sửa.
|
||||
- Nếu cần văn bản vẫn tìm kiếm được, hãy cân nhắc dùng công cụ Raster hóa PDF rồi chạy OCR sau đó.
|
||||
- PDF đã chuyển thành đường viền thường lớn hơn. Hãy chạy Nén PDF sau đó nếu dung lượng tệp quan trọng.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Làm phẳng PDF](./flatten-pdf): làm phẳng form và ghi chú mà không động đến phông chữ
|
||||
- [Raster hóa PDF](./rasterize-pdf): chuyển thành PDF dạng ảnh thay vì đường viền vector
|
||||
- [Nén PDF](./compress-pdf): giảm dung lượng tệp sau khi chuyển thành đường viền
|
||||
- [PDF sang PDF/A](./pdf-to-pdfa): chuyển đổi để lưu trữ sau khi đảm bảo không phụ thuộc phông chữ
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: Tạo form PDF
|
||||
description: Xây dựng form PDF có thể điền với các trường văn bản, hộp kiểm, danh sách thả xuống, nút radio và nhiều hơn nữa bằng kéo và thả.
|
||||
---
|
||||
|
||||
# Tạo form PDF
|
||||
|
||||
Thiết kế form PDF có thể điền chuyên nghiệp từ đầu hoặc bằng cách thêm trường vào PDF có sẵn. Trình chỉnh sửa trực quan cho phép bạn kéo và thả các thành phần form (trường văn bản, hộp kiểm, danh sách thả xuống, nút radio, trường chữ ký và nhiều loại khác) trực tiếp lên bản xem trước trang. Cấu hình thuộc tính trường, thiết lập quy tắc hiển thị có điều kiện và xuất ra một PDF form hoàn toàn tương tác.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một PDF có sẵn **hoặc** nhấp **Tạo PDF trống** để bắt đầu từ đầu.
|
||||
2. Nếu tạo PDF trống, hãy chọn kích thước trang (Letter, A4, A5, Legal, Tabloid, A3 hoặc kích thước tùy chỉnh).
|
||||
3. Trình chỉnh sửa form mở ra với thanh công cụ các loại trường và vùng xem trước trang.
|
||||
4. Chọn một loại trường từ thanh công cụ, rồi nhấp vào trang để đặt nó.
|
||||
5. Kéo trường để đổi vị trí. Dùng tay nắm thay đổi kích thước để điều chỉnh kích cỡ.
|
||||
6. Nhấp vào một trường để mở bảng thuộc tính, nơi bạn có thể đặt tên trường, giá trị mặc định, cỡ chữ, căn lề và nhiều hơn nữa.
|
||||
7. Chuyển giữa các trang bằng điều khiển trang.
|
||||
8. Nhấp **Lưu** để tải xuống PDF có thể điền đã hoàn thiện.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Đặt trường bằng kéo và thả, có tay nắm trực quan để đổi kích thước
|
||||
- Loại trường: ô nhập văn bản, văn bản nhiều dòng, hộp kiểm, danh sách thả xuống, nút radio, chữ ký, ngày, số và mã vạch
|
||||
- Bảng thuộc tính để cấu hình tên, nhãn, giá trị mặc định, cỡ chữ, màu sắc, căn lề và xác thực của từng trường
|
||||
- Hành động trường và quy tắc hiển thị có điều kiện (hiện/ẩn trường dựa trên giá trị của trường khác)
|
||||
- Điều hướng trang cho form nhiều trang
|
||||
- Trích xuất trường có sẵn: tự động phát hiện và nhập các trường form từ PDF đã tải lên
|
||||
- Hỗ trợ cả PDF đã tải lên và trang trống làm nền cho form
|
||||
- Nhiều kích thước trang đặt sẵn cùng kích thước tùy chỉnh
|
||||
- Tạo mã vạch bằng bwip-js
|
||||
- Quản lý nhóm nút radio
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
**Kích thước trang đặt sẵn (cho PDF trống):**
|
||||
|
||||
- Letter (8.5" x 11")
|
||||
- A4 (210mm x 297mm)
|
||||
- A5 (148mm x 210mm)
|
||||
- Legal (8.5" x 14")
|
||||
- Tabloid (11" x 17")
|
||||
- A3 (297mm x 420mm)
|
||||
- Tùy chỉnh (chỉ định chiều rộng và chiều cao)
|
||||
|
||||
**Thuộc tính trường (khác nhau theo loại trường):**
|
||||
|
||||
- Tên, nhãn và văn bản gợi ý
|
||||
- Giá trị mặc định
|
||||
- Họ phông chữ, cỡ chữ và màu sắc
|
||||
- Căn lề văn bản (trái, giữa, phải)
|
||||
- Bật/tắt trường bắt buộc
|
||||
- Bật/tắt chỉ đọc
|
||||
- Độ dài tối đa cho trường văn bản
|
||||
- Danh sách lựa chọn cho danh sách thả xuống và nút radio
|
||||
- Hành động hiển thị có điều kiện
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xây dựng form tiếp nhận nhân viên mới với trường văn bản cho thông tin cá nhân và hộp kiểm xác nhận chính sách
|
||||
- Tạo bảng câu hỏi tiếp nhận khách hàng với danh sách thả xuống để chọn dịch vụ
|
||||
- Thiết kế phiếu đặt hàng với trường tính toán và mã vạch định danh
|
||||
- Xây dựng danh sách kiểm tra với nút radio cho đánh giá đạt/không đạt
|
||||
- Tạo form khảo sát với câu hỏi tiếp theo có điều kiện xuất hiện dựa trên câu trả lời
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu bạn tải lên PDF có sẵn, công cụ sẽ cố gắng trích xuất các trường form đã có, cho phép bạn chỉnh sửa hoặc bổ sung.
|
||||
- Dùng tính năng nhóm nút radio để tạo các lựa chọn loại trừ lẫn nhau. Các trường trong cùng một nhóm radio dùng chung một tên nhóm.
|
||||
- Hãy kiểm tra form bằng cách tải xuống và mở trong [Điền form PDF](./form-filler) để xác nhận hành vi của các trường.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Điền form PDF](./form-filler)
|
||||
- [Ký PDF](./sign-pdf)
|
||||
- [Trình chỉnh sửa PDF](./edit-pdf)
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: Điền form PDF
|
||||
description: Điền form PDF, kể cả form XFA, ngay trong trình duyệt bằng trình xem tích hợp.
|
||||
---
|
||||
|
||||
# Điền form PDF
|
||||
|
||||
Mở PDF có trường form và điền trực tiếp trong trình xem tích hợp. Công cụ hỗ trợ cả trường AcroForm tiêu chuẩn và form XFA (XML Forms Architecture) cũ. Khi đã hoàn thành form, bạn tải xuống bản đã điền chỉ với một cú nhấp.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một PDF có chứa trường form.
|
||||
2. Tài liệu mở trong trình xem PDF tích hợp, hiển thị các trường form dưới dạng ô nhập tương tác.
|
||||
3. Nhấp vào các trường văn bản, hộp kiểm, danh sách thả xuống và nút radio để điền.
|
||||
4. Nhấp **Lưu & Tải xuống form đã điền** để nhận PDF đã hoàn thành.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Trình xem PDF.js tích hợp, tương tác đầy đủ với trường form
|
||||
- Hỗ trợ trường AcroForm tiêu chuẩn (ô nhập văn bản, hộp kiểm, danh sách thả xuống, nút radio)
|
||||
- Hỗ trợ form XFA cho các form cũ dựa trên XML
|
||||
- Tự động điều chỉnh kích thước trình xem theo kích thước trang
|
||||
- Hiển thị tệp kèm tên và dung lượng
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không có tùy chọn cấu hình bổ sung. Tải form lên, điền và tải xuống.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Hoàn thành biểu mẫu thuế, đơn bảo hiểm hoặc giấy tờ hành chính
|
||||
- Điền đơn xin việc nhận được dưới dạng tệp đính kèm PDF
|
||||
- Hoàn thành form tiếp nhận nhà cung cấp hoặc bảng câu hỏi nhà cung cấp
|
||||
- Xác nhận danh sách kiểm tra tuân thủ bằng các trường hộp kiểm
|
||||
- Điền phiếu tiếp nhận y tế trước cuộc hẹn
|
||||
|
||||
## Mẹo
|
||||
|
||||
- XFA là định dạng cũ chỉ một số trình xem PDF hỗ trợ. Nếu bạn mở PDF XFA trong Chrome hoặc hầu hết công cụ khác và thấy trang trống, nghĩa là các trình xem đó không hỗ trợ XFA. Điền form PDF của BentoPDF và Firefox đều xử lý XFA đúng cách.
|
||||
- Với PDF chưa có trường form, hãy dùng công cụ [Tạo form PDF](./form-creator) để thêm trường trước, rồi điền tại đây.
|
||||
- Trình xem tự động điều chỉnh kích thước để khớp với kích thước trang của PDF.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Tạo form PDF](./form-creator)
|
||||
- [Ký PDF](./sign-pdf)
|
||||
- [Trình chỉnh sửa PDF](./edit-pdf)
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Đầu trang & Chân trang
|
||||
description: Thêm văn bản đầu trang và chân trang tùy chỉnh vào các trang PDF với biến số trang động.
|
||||
---
|
||||
|
||||
# Đầu trang & Chân trang
|
||||
|
||||
Thêm văn bản vào sáu vị trí trên các trang PDF: đầu trang trái, đầu trang giữa, đầu trang phải, chân trang trái, chân trang giữa và chân trang phải. Công cụ hỗ trợ biến động cho số trang và tổng số trang, nên bạn có thể tạo mẫu như "Trang 3 trên 10" tự động cập nhật theo từng trang.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Bảng tùy chọn xuất hiện với các điều khiển định dạng và sáu ô nhập văn bản.
|
||||
3. Nhập văn bản mong muốn vào bất kỳ vị trí đầu trang/chân trang nào.
|
||||
4. Dùng các biến giữ chỗ `{page}` và `{total}` để đánh số trang động.
|
||||
5. Điều chỉnh cỡ chữ, màu chữ và tùy chọn giới hạn trong một phạm vi trang cụ thể.
|
||||
6. Nhấp **Thêm đầu trang & chân trang** để xử lý và tải xuống.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Phạm vi trang**: Tùy chọn giới hạn các trang được thêm đầu trang và chân trang. Để trống để áp dụng cho mọi trang. Định dạng: "1-3, 5" (các phạm vi cách nhau bằng dấu phẩy).
|
||||
- **Cỡ chữ**: Từ 6 đến 24 điểm. Mặc định là 10.
|
||||
- **Màu chữ**: Chọn màu bất kỳ bằng bộ chọn màu.
|
||||
- **Đầu trang Trái / Giữa / Phải**: Các ô văn bản cho phần trên cùng của mỗi trang.
|
||||
- **Chân trang Trái / Giữa / Phải**: Các ô văn bản cho phần dưới cùng của mỗi trang.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Sáu vị trí văn bản độc lập trên mỗi trang
|
||||
- Biến động `{page}` chèn số trang hiện tại
|
||||
- Biến động `{total}` chèn tổng số trang
|
||||
- Lọc theo phạm vi trang để nhắm đến các trang cụ thể
|
||||
- Cỡ chữ và màu sắc tùy chỉnh
|
||||
- Phông chữ Helvetica cho kết quả gọn gàng, chuyên nghiệp
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Thêm "Trang {page} trên {total}" vào giữa chân trang của một báo cáo
|
||||
- Đặt tên công ty ở đầu trang bên trái và ngày tài liệu ở đầu trang bên phải
|
||||
- Thêm thông báo bảo mật vào chân trang của tài liệu pháp lý
|
||||
- Đóng dấu số phiên bản tài liệu lên các phạm vi trang cụ thể
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Kết hợp `{page}` và `{total}` trong một ô để có định dạng như "Trang {page} trên {total}" hoặc "{page}/{total}".
|
||||
- Bạn có thể để trống hầu hết các ô và chỉ điền những vị trí cần dùng. Các ô trống sẽ bị bỏ qua.
|
||||
- Với đầu trang phức tạp hơn có hình ảnh hoặc logo, hãy cân nhắc dùng công cụ [Thêm Watermark](./add-watermark) đặt ở đầu trang.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Số trang](./page-numbers)
|
||||
- [Thêm Watermark](./add-watermark)
|
||||
- [Đánh số Bates](./bates-numbering)
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: HEIC sang PDF
|
||||
description: Chuyển đổi ảnh HEIC và HEIF từ iPhone và iPad sang định dạng PDF ngay trong trình duyệt.
|
||||
---
|
||||
|
||||
# HEIC sang PDF
|
||||
|
||||
Chuyển đổi ảnh HEIC/HEIF sang PDF. HEIC là định dạng ảnh mặc định trên iPhone và iPad từ iOS 11. Công cụ này giúp bạn biến những bức ảnh đó thành PDF mà không cần cài phần mềm máy tính hay tải tệp lên máy chủ.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :-------- | :----------- |
|
||||
| HEIC | `.heic` |
|
||||
| HEIF | `.heif` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp HEIC/HEIF của bạn.
|
||||
2. Xem lại danh sách tệp và xóa những tệp không cần.
|
||||
3. Nhấp **Chuyển sang PDF**. Kết quả được tải xuống với tên `from_heic.pdf`.
|
||||
|
||||
Mỗi tệp HEIC được giải mã bằng thư viện heic2any, chuyển thành PNG với chất lượng 92%. Sau đó PNG được nhúng vào PDF bằng pdf-lib, mỗi ảnh nằm trên một trang riêng với độ phân giải đầy đủ.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có thêm cài đặt. Ảnh HEIC được chuyển thành PNG ở chất lượng cao (0.92) trước khi nhúng.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tạo PDF từ ảnh iPhone để đính kèm vào hồ sơ bồi thường bảo hiểm hoặc báo cáo
|
||||
- Chuyển ảnh HEIC của một tin đăng bất động sản thành một tài liệu có thể in
|
||||
- Biến ảnh chụp màn hình iPad (định dạng HEIF) thành PDF có thể chia sẻ
|
||||
- Chuyển đổi hàng loạt ảnh du lịch cho nhật ký hành trình
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Việc giải mã HEIC diễn ra hoàn toàn trong trình duyệt bằng WebAssembly. Lần chuyển đổi đầu tiên có thể mất một lúc để tải bộ giải mã.
|
||||
- Nếu cần kết hợp HEIC với các định dạng ảnh khác (JPG, PNG, v.v.), hãy dùng công cụ [Hình ảnh sang PDF](./image-to-pdf), hỗ trợ HEIC cùng mọi định dạng khác.
|
||||
- Tệp HEIC từ iPhone thường chứa dữ liệu EXIF, bao gồm tọa độ GPS. PDF đầu ra không mang theo metadata này.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
- [JPG sang PDF](./jpg-to-pdf)
|
||||
- [PNG sang PDF](./png-to-pdf)
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: Hình ảnh sang PDF
|
||||
description: Chuyển đổi JPG, PNG, BMP, GIF, TIFF, SVG, HEIC, WebP, PSD và hơn 10 định dạng ảnh khác thành một tệp PDF duy nhất.
|
||||
---
|
||||
|
||||
# Hình ảnh sang PDF
|
||||
|
||||
Bộ chuyển đổi ảnh sang PDF đa năng. Tải lên ảnh ở hầu hết mọi định dạng và gộp chúng thành một tài liệu PDF. Mỗi ảnh nằm trên một trang riêng, có kích thước khớp với kích thước gốc.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :-------------- | :------------------------------------- |
|
||||
| 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` |
|
||||
|
||||
Đây là phạm vi hỗ trợ định dạng rộng nhất trong số các bộ chuyển đổi ảnh của BentoPDF. Nếu bạn chỉ cần một định dạng cụ thể, hãy dùng công cụ chuyên biệt tương ứng.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp ảnh của bạn. Có thể chọn nhiều tệp cùng lúc.
|
||||
2. Xem lại danh sách tệp. Xóa tệp không cần bằng biểu tượng thùng rác, hoặc nhấp **Thêm tệp** để bổ sung ảnh.
|
||||
3. Chọn mức **Chất lượng PDF** từ danh sách thả xuống.
|
||||
4. Nhấp **Chuyển sang PDF**. Công cụ xử lý ảnh qua engine PyMuPDF và tải kết quả xuống với tên `images_to_pdf.pdf`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
**Chất lượng PDF** điều khiển mức nén ảnh áp dụng khi nhúng ảnh vào PDF:
|
||||
|
||||
- **Chất lượng cao**: nén tối thiểu, dung lượng tệp lớn hơn. Phù hợp nhất để in hoặc lưu trữ.
|
||||
- **Chất lượng trung bình** (mặc định): nén cân bằng. Tốt cho hầu hết mục đích.
|
||||
- **Chất lượng thấp**: nén mạnh, dung lượng nhỏ nhất. Phù hợp để gửi email hoặc chia sẻ nhanh.
|
||||
|
||||
Tệp HEIC và WebP được tự động chuyển thành PNG trước khi nhúng. Việc này diễn ra trong suốt và không cần thêm bước nào.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Gộp hóa đơn hoặc tài liệu quét từ camera điện thoại thành một PDF
|
||||
- Tạo hồ sơ ảnh hoặc lookbook từ các ảnh nhiều định dạng
|
||||
- Chuyển ảnh iPhone (HEIC) thành PDF có thể chia sẻ mà không cần cài phần mềm máy tính
|
||||
- Tập hợp bản mockup thiết kế từ tệp PSD xuất ra và ảnh chụp màn hình thành sản phẩm bàn giao cho khách hàng
|
||||
- Lưu trữ một thư mục các định dạng ảnh cũ (PNM, JXR, JP2) thành một PDF duy nhất
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Thứ tự ảnh trong PDF khớp với thứ tự trong danh sách tệp. Hãy tải lên theo đúng thứ tự bạn muốn.
|
||||
- Để có dung lượng tệp nhỏ nhất, hãy chọn Chất lượng thấp. Sự khác biệt về hình ảnh thường không đáng kể với các bản quét nhiều chữ.
|
||||
- Nếu bạn chỉ có một định dạng ảnh, các bộ chuyển đổi chuyên biệt (JPG sang PDF, PNG sang PDF, v.v.) cho cùng kết quả với giao diện đơn giản hơn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [JPG sang PDF](./jpg-to-pdf)
|
||||
- [PNG sang PDF](./png-to-pdf)
|
||||
- [HEIC sang PDF](./heic-to-pdf)
|
||||
- [WebP sang PDF](./webp-to-pdf)
|
||||
@@ -0,0 +1,183 @@
|
||||
# Tham khảo công cụ
|
||||
|
||||
BentoPDF cung cấp **hơn 130 công cụ** để làm việc với PDF. Mọi công cụ đều chạy hoàn toàn trong trình duyệt của bạn, tệp của bạn không bao giờ rời khỏi thiết bị.
|
||||
|
||||
---
|
||||
|
||||
## Chỉnh sửa & Chú thích
|
||||
|
||||
Chỉnh sửa, đánh dấu và nâng cao tài liệu PDF với bộ công cụ chỉnh sửa đầy đủ.
|
||||
|
||||
<div class="tool-grid">
|
||||
|
||||
- [**Trình chỉnh sửa PDF**](./edit-pdf): Chú thích, đánh dấu, che nội dung, bình luận, thêm hình dạng/hình ảnh, tìm kiếm và xem PDF.
|
||||
- [**Chỉnh sửa Bookmark**](./bookmark): Thêm, chỉnh sửa, nhập, xóa và trích xuất bookmark PDF.
|
||||
- [**Mục lục**](./table-of-contents): Tạo trang mục lục từ bookmark PDF.
|
||||
- [**Số trang**](./page-numbers): Chèn số trang vào tài liệu của bạn.
|
||||
- [**Thêm nhãn trang**](./add-page-labels): Áp dụng nhãn trang PDF với số La Mã, tiền tố và điểm bắt đầu tùy chỉnh.
|
||||
- [**Đánh số Bates**](./bates-numbering): Thêm số Bates tuần tự trên một hoặc nhiều tệp PDF.
|
||||
- [**Thêm Watermark**](./add-watermark): Đóng dấu văn bản hoặc hình ảnh lên các trang PDF.
|
||||
- [**Đầu trang & Chân trang**](./header-footer): Thêm văn bản vào đầu và cuối trang.
|
||||
- [**Đảo ngược màu**](./invert-colors): Tạo phiên bản chế độ tối của PDF.
|
||||
- [**Hiệu ứng máy quét**](./scanner-effect): Làm PDF trông như tài liệu được quét.
|
||||
- [**Điều chỉnh màu sắc**](./adjust-colors): Tinh chỉnh độ sáng, độ tương phản, độ bão hòa và hơn thế nữa.
|
||||
- [**Màu nền**](./background-color): Thay đổi màu nền của PDF.
|
||||
- [**Thay đổi màu văn bản**](./text-color): Thay đổi màu chữ trong PDF.
|
||||
- [**Ký PDF**](./sign-pdf): Vẽ, nhập hoặc tải lên chữ ký của bạn.
|
||||
- [**Thêm tem**](./add-stamps): Thêm tem hình ảnh vào PDF bằng thanh công cụ chú thích.
|
||||
- [**Xóa ghi chú**](./remove-annotations): Loại bỏ bình luận, đánh dấu và liên kết.
|
||||
- [**Cắt PDF**](./crop-pdf): Cắt bớt lề của mọi trang trong PDF.
|
||||
- [**Điền form PDF**](./form-filler): Điền form trực tiếp trong trình duyệt. Hỗ trợ cả form XFA.
|
||||
- [**Tạo form PDF**](./form-creator): Tạo form PDF có thể điền với các trường văn bản kéo và thả.
|
||||
- [**Xóa trang trống**](./remove-blank-pages): Tự động phát hiện và xóa các trang trống.
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Chuyển sang PDF
|
||||
|
||||
Biến hình ảnh, tài liệu, sách điện tử và các định dạng tệp khác thành PDF.
|
||||
|
||||
<div class="tool-grid">
|
||||
|
||||
- [**Hình ảnh sang PDF**](./image-to-pdf): Chuyển JPG, PNG, BMP, GIF, TIFF, SVG, HEIC, WebP và nhiều định dạng khác sang PDF.
|
||||
- [**JPG sang PDF**](./jpg-to-pdf): Tạo PDF từ một hoặc nhiều ảnh JPG.
|
||||
- [**PNG sang PDF**](./png-to-pdf): Tạo PDF từ một hoặc nhiều ảnh PNG.
|
||||
- [**WebP sang PDF**](./webp-to-pdf): Tạo PDF từ một hoặc nhiều ảnh WebP.
|
||||
- [**SVG sang PDF**](./svg-to-pdf): Tạo PDF từ một hoặc nhiều ảnh SVG.
|
||||
- [**BMP sang PDF**](./bmp-to-pdf): Tạo PDF từ một hoặc nhiều ảnh BMP.
|
||||
- [**HEIC sang PDF**](./heic-to-pdf): Tạo PDF từ một hoặc nhiều ảnh HEIC.
|
||||
- [**TIFF sang PDF**](./tiff-to-pdf): Tạo PDF từ một hoặc nhiều ảnh TIFF.
|
||||
- [**Văn bản sang PDF**](./txt-to-pdf): Chuyển tệp văn bản thuần thành PDF.
|
||||
- [**Markdown sang PDF**](./markdown-to-pdf): Chuyển Markdown sang PDF với xem trước trực tiếp và tô sáng cú pháp.
|
||||
- [**JSON sang PDF**](./json-to-pdf): Chuyển tệp JSON sang định dạng PDF.
|
||||
- [**ODT sang PDF**](./odt-to-pdf): Chuyển tệp ODT (OpenDocument Text) sang PDF.
|
||||
- [**CSV sang PDF**](./csv-to-pdf): Chuyển bảng tính CSV sang PDF.
|
||||
- [**RTF sang PDF**](./rtf-to-pdf): Chuyển tài liệu RTF (Rich Text Format) sang PDF.
|
||||
- [**Word sang PDF**](./word-to-pdf): Chuyển tài liệu Word (DOCX, DOC, ODT) sang PDF.
|
||||
- [**Excel sang PDF**](./excel-to-pdf): Chuyển bảng tính Excel (XLSX, XLS, ODS) sang PDF.
|
||||
- [**PowerPoint sang PDF**](./powerpoint-to-pdf): Chuyển bản trình bày PowerPoint (PPTX, PPT, ODP) sang PDF.
|
||||
- [**XPS sang PDF**](./xps-to-pdf): Chuyển tài liệu XPS/OXPS sang PDF.
|
||||
- [**MOBI sang PDF**](./mobi-to-pdf): Chuyển sách điện tử MOBI sang PDF.
|
||||
- [**EPUB sang PDF**](./epub-to-pdf): Chuyển sách điện tử EPUB sang PDF.
|
||||
- [**FB2 sang PDF**](./fb2-to-pdf): Chuyển sách điện tử FictionBook (FB2) sang PDF.
|
||||
- [**CBZ sang PDF**](./cbz-to-pdf): Chuyển kho lưu trữ truyện tranh (CBZ/CBR) sang PDF.
|
||||
- [**WPD sang PDF**](./wpd-to-pdf): Chuyển tài liệu WordPerfect (WPD) sang PDF.
|
||||
- [**WPS sang PDF**](./wps-to-pdf): Chuyển tài liệu WPS Office sang PDF.
|
||||
- [**XML sang PDF**](./xml-to-pdf): Chuyển tài liệu XML sang PDF.
|
||||
- [**ODG sang PDF**](./odg-to-pdf): Chuyển OpenDocument Graphics (ODG) sang PDF.
|
||||
- [**ODS sang PDF**](./ods-to-pdf): Chuyển OpenDocument Spreadsheet (ODS) sang PDF.
|
||||
- [**ODP sang PDF**](./odp-to-pdf): Chuyển OpenDocument Presentation (ODP) sang PDF.
|
||||
- [**PUB sang PDF**](./pub-to-pdf): Chuyển Microsoft Publisher (PUB) sang PDF.
|
||||
- [**VSD sang PDF**](./vsd-to-pdf): Chuyển Microsoft Visio (VSD, VSDX) sang PDF.
|
||||
- [**PSD sang PDF**](./psd-to-pdf): Chuyển tệp Adobe Photoshop (PSD) sang PDF.
|
||||
- [**Email sang PDF**](./email-to-pdf): Chuyển tệp email (EML, MSG) sang định dạng PDF.
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Chuyển từ PDF
|
||||
|
||||
Trích xuất nội dung từ PDF sang hình ảnh, tài liệu và các định dạng dữ liệu.
|
||||
|
||||
<div class="tool-grid">
|
||||
|
||||
- [**PDF sang JPG**](./pdf-to-jpg): Chuyển mỗi trang PDF thành một ảnh JPG.
|
||||
- [**PDF sang PNG**](./pdf-to-png): Chuyển mỗi trang PDF thành một ảnh PNG.
|
||||
- [**PDF sang WebP**](./pdf-to-webp): Chuyển mỗi trang PDF thành một ảnh WebP.
|
||||
- [**PDF sang BMP**](./pdf-to-bmp): Chuyển mỗi trang PDF thành một ảnh BMP.
|
||||
- [**PDF sang TIFF**](./pdf-to-tiff): Chuyển mỗi trang PDF thành một ảnh TIFF.
|
||||
- [**PDF sang CBZ**](./pdf-to-cbz): Chuyển PDF thành CBZ (Comic Book Archive) cho trình đọc truyện tranh và Calibre.
|
||||
- [**PDF sang SVG**](./pdf-to-svg): Chuyển mỗi trang PDF thành một đồ họa vector có thể co giãn.
|
||||
- [**PDF sang CSV**](./pdf-to-csv): Trích xuất bảng từ PDF và chuyển sang định dạng CSV.
|
||||
- [**PDF sang Excel**](./pdf-to-excel): Trích xuất bảng từ PDF và chuyển sang Excel (XLSX).
|
||||
- [**PDF sang thang xám**](./pdf-to-greyscale): Chuyển mọi màu sang đen trắng.
|
||||
- [**PDF sang JSON**](./pdf-to-json): Chuyển tệp PDF sang định dạng JSON.
|
||||
- [**PDF sang Word**](./pdf-to-word): Chuyển tệp PDF thành tài liệu Word có thể chỉnh sửa.
|
||||
- [**Trích xuất hình ảnh**](./extract-images): Trích xuất mọi ảnh được nhúng từ tệp PDF của bạn.
|
||||
- [**PDF sang Markdown**](./pdf-to-markdown): Chuyển văn bản và bảng trong PDF sang định dạng Markdown.
|
||||
- [**Chuẩn bị PDF cho AI**](./prepare-pdf-for-ai): Trích xuất nội dung PDF dưới dạng LlamaIndex JSON cho pipeline RAG/LLM.
|
||||
- [**PDF sang Văn bản**](./pdf-to-text): Trích xuất văn bản từ tệp PDF và lưu dưới dạng văn bản thuần.
|
||||
- [**Trích xuất bảng PDF**](./extract-tables): Trích xuất bảng từ PDF dưới dạng CSV, JSON hoặc Markdown.
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Sắp xếp & Quản lý
|
||||
|
||||
Sắp xếp lại, kết hợp, chia tách và quản lý các trang và tệp PDF của bạn.
|
||||
|
||||
<div class="tool-grid">
|
||||
|
||||
- [**Trình xây dựng quy trình PDF**](./pdf-workflow): Xây dựng pipeline xử lý PDF tùy chỉnh bằng trình chỉnh sửa node trực quan.
|
||||
- [**Công cụ đa năng PDF**](./pdf-multi-tool): Trình chỉnh sửa PDF đầy đủ tính năng với quản lý trang.
|
||||
- [**OCR PDF**](./ocr-pdf): Làm cho PDF có thể tìm kiếm và sao chép.
|
||||
- [**Gộp PDF**](./merge-pdf): Kết hợp nhiều PDF thành một tệp.
|
||||
- [**Xen kẽ & Trộn trang**](./alternate-merge): Gộp PDF bằng cách xen kẽ các trang từ từng PDF.
|
||||
- [**Sắp xếp bản quét hai mặt**](./duplex-collate): Sắp xếp lại các khối quét mặt trước/mặt sau thành thứ tự trang đúng.
|
||||
- [**Nhân đôi & Sắp xếp**](./organize-pdf): Nhân đôi, sắp xếp lại và xóa trang.
|
||||
- [**Thêm tệp đính kèm**](./add-attachments): Nhúng một hoặc nhiều tệp vào PDF của bạn.
|
||||
- [**Trích xuất tệp đính kèm**](./extract-attachments): Trích xuất mọi tệp được nhúng từ PDF dưới dạng ZIP.
|
||||
- [**Chỉnh sửa tệp đính kèm**](./edit-attachments): Xem hoặc xóa tệp đính kèm trong PDF của bạn.
|
||||
- [**Lớp PDF (OCG)**](./pdf-layers): Xem, bật/tắt, thêm và xóa các lớp OCG trong PDF của bạn.
|
||||
- [**Chia PDF**](./split-pdf): Trích xuất một phạm vi trang thành PDF mới.
|
||||
- [**Chia trang**](./divide-pages): Chia trang theo chiều ngang hoặc chiều dọc.
|
||||
- [**Trích xuất trang**](./extract-pages): Lưu một số trang đã chọn thành các tệp mới.
|
||||
- [**Xóa trang**](./delete-pages): Loại bỏ các trang cụ thể khỏi tài liệu.
|
||||
- [**Thêm trang trống**](./add-blank-page): Chèn một trang trống vào bất kỳ đâu trong PDF.
|
||||
- [**Đảo ngược trang**](./reverse-pages): Đảo thứ tự của mọi trang trong tài liệu.
|
||||
- [**Xoay PDF**](./rotate-pdf): Xoay trang theo bước 90 độ.
|
||||
- [**Xoay theo độ tùy chỉnh**](./rotate-custom): Xoay trang theo bất kỳ góc tùy chỉnh nào.
|
||||
- [**N-Up PDF**](./n-up-pdf): Sắp xếp nhiều trang lên một tờ.
|
||||
- [**Sách nhỏ PDF**](./pdf-booklet): Sắp xếp lại các trang để in sách nhỏ hai mặt.
|
||||
- [**Kết hợp thành một trang**](./combine-single-page): Ghép mọi trang thành một trang cuộn liên tục.
|
||||
- [**Xem Metadata**](./view-metadata): Kiểm tra các thuộc tính ẩn của PDF.
|
||||
- [**Chỉnh sửa Metadata**](./edit-metadata): Thay đổi tác giả, tiêu đề và các thuộc tính khác.
|
||||
- [**PDF sang ZIP**](./pdf-to-zip): Đóng gói nhiều tệp PDF thành một kho lưu trữ ZIP.
|
||||
- [**So sánh PDF**](./compare-pdfs): So sánh hai PDF cạnh nhau.
|
||||
- [**Chia PDF thành poster**](./posterize-pdf): Chia một trang lớn thành nhiều trang nhỏ hơn.
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Tối ưu & Sửa chữa
|
||||
|
||||
Nén, sửa và tối ưu PDF để có hiệu năng và khả năng tương thích tốt hơn.
|
||||
|
||||
<div class="tool-grid">
|
||||
|
||||
- [**Nén PDF**](./compress-pdf): Giảm dung lượng tệp PDF của bạn.
|
||||
- [**PDF sang PDF/A**](./pdf-to-pdfa): Chuyển PDF sang PDF/A để lưu trữ lâu dài.
|
||||
- [**Sửa kích thước trang**](./fix-page-size): Chuẩn hóa mọi trang về cùng một kích thước.
|
||||
- [**Tuyến tính hóa PDF**](./linearize-pdf): Tối ưu PDF để xem web nhanh.
|
||||
- [**Kích thước trang**](./page-dimensions): Phân tích kích thước trang, hướng và đơn vị.
|
||||
- [**Xóa hạn chế**](./remove-restrictions): Loại bỏ bảo vệ bằng mật khẩu và các hạn chế bảo mật.
|
||||
- [**Sửa chữa PDF**](./repair-pdf): Khôi phục dữ liệu từ tệp PDF bị hỏng hoặc hư hại.
|
||||
- [**Raster hóa PDF**](./rasterize-pdf): Chuyển PDF thành PDF dạng ảnh. Làm phẳng các lớp và loại bỏ văn bản có thể chọn.
|
||||
- [**Chỉnh nghiêng PDF**](./deskew-pdf): Tự động nắn thẳng các trang quét bị nghiêng bằng OpenCV.
|
||||
- [**Phông chữ thành đường viền**](./font-to-outline): Chuyển mọi phông chữ thành đường viền vector để hiển thị nhất quán.
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Bảo mật PDF
|
||||
|
||||
Bảo vệ, mã hóa và kiểm soát quyền truy cập vào tài liệu PDF của bạn.
|
||||
|
||||
<div class="tool-grid">
|
||||
|
||||
- [**Mã hóa PDF**](./protect-pdf): Khóa PDF bằng cách thêm mật khẩu.
|
||||
- [**Làm sạch PDF**](./sanitize-pdf): Loại bỏ metadata, ghi chú, script và nhiều thứ khác.
|
||||
- [**Giải mã PDF**](./unlock-pdf): Mở khóa PDF bằng cách gỡ bỏ bảo vệ mật khẩu.
|
||||
- [**Làm phẳng PDF**](./flatten-pdf): Khiến trường form và ghi chú không thể chỉnh sửa.
|
||||
- [**Xóa Metadata**](./remove-metadata): Loại bỏ dữ liệu ẩn khỏi PDF.
|
||||
- [**Thay đổi quyền**](./change-permissions): Đặt hoặc thay đổi quyền người dùng trên PDF.
|
||||
- [**Chữ ký số PDF**](./digital-sign-pdf): Thêm chữ ký số mật mã bằng chứng chỉ X.509.
|
||||
- [**Xác minh chữ ký PDF**](./validate-signature-pdf): Xác minh chữ ký số và xem chi tiết chứng chỉ.
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Đảo ngược màu
|
||||
description: Đảo ngược mọi màu trong PDF để tạo phiên bản chế độ tối của bất kỳ tài liệu nào.
|
||||
---
|
||||
|
||||
# Đảo ngược màu
|
||||
|
||||
Đảo mọi màu trong PDF sang màu nghịch đảo. Nền trắng thành đen, chữ đen thành trắng, và mọi màu khác chuyển sang màu bù tương ứng. Đây là cách nhanh nhất để tạo phiên bản "chế độ tối" của bất kỳ PDF nào.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Nhấp **Đảo ngược màu** để xử lý.
|
||||
3. PDF đã đảo màu được tải xuống tự động.
|
||||
|
||||
Không có cài đặt bổ sung. Công cụ hiển thị mỗi trang thành ảnh, đảo ngược màu của mọi điểm ảnh, rồi ghép lại thành PDF mới.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Đảo màu chỉ với một cú nhấp cho mọi trang
|
||||
- Xử lý mọi trang trong tài liệu
|
||||
- Giữ nguyên kích thước và bố cục trang gốc
|
||||
- Hoạt động với mọi PDF bất kể loại nội dung (văn bản, hình ảnh, hỗn hợp)
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tạo phiên bản chế độ tối của sách giáo khoa hoặc sách hướng dẫn để đọc thoải mái vào ban đêm
|
||||
- Chuẩn bị phiên bản tương phản cao của tài liệu để dễ tiếp cận hơn
|
||||
- Đảo ngược các tài liệu quét bị phơi sáng sai
|
||||
- Tạo phiên bản âm bản của PDF nhiều hình ảnh để phân tích trực quan
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Vì công cụ chuyển trang thành ảnh để áp dụng hiệu ứng nên đầu ra là dạng ảnh. Văn bản sẽ không còn chọn hay tìm kiếm được. Nếu cần văn bản tìm kiếm được sau khi đảo màu, hãy chạy kết quả qua công cụ OCR.
|
||||
- Để điều chỉnh màu chi tiết hơn (độ sáng, độ tương phản, độ bão hòa), hãy dùng công cụ [Điều chỉnh màu sắc](./adjust-colors).
|
||||
- PDF lớn có nhiều trang có thể mất nhiều thời gian hơn vì mỗi trang được hiển thị và đảo màu riêng lẻ.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Điều chỉnh màu sắc](./adjust-colors)
|
||||
- [Màu nền](./background-color)
|
||||
- [Hiệu ứng máy quét](./scanner-effect)
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: JPG sang PDF
|
||||
description: Chuyển đổi một hoặc nhiều ảnh JPG, JPEG và JPEG 2000 thành một tệp PDF duy nhất ngay trong trình duyệt.
|
||||
---
|
||||
|
||||
# JPG sang PDF
|
||||
|
||||
Biến ảnh JPG thành PDF gọn gàng. Tải lên một tệp hoặc nhiều ảnh JPG cùng lúc, mỗi ảnh trở thành một trang kích thước đầy đủ trong tài liệu đầu ra.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :-------- | :-------------- |
|
||||
| JPEG | `.jpg`, `.jpeg` |
|
||||
| JPEG 2000 | `.jp2`, `.jpx` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp JPG của bạn. Hỗ trợ chọn nhiều tệp.
|
||||
2. Xem lại các tệp đã tải lên. Dùng biểu tượng thùng rác để xóa từng tệp, hoặc nhấp **Thêm tệp** để bổ sung vào danh sách.
|
||||
3. Chọn mức **Chất lượng PDF**.
|
||||
4. Nhấp **Chuyển sang PDF**. Công cụ nén ảnh theo cài đặt chất lượng của bạn, chuyển đổi qua engine PyMuPDF và tải xuống `from_jpgs.pdf`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
**Chất lượng PDF** điều chỉnh mức nén áp dụng cho từng ảnh trước khi nhúng vào PDF:
|
||||
|
||||
- **Chất lượng cao**: giữ tối đa chi tiết. Dùng cho ảnh chụp hoặc in ấn.
|
||||
- **Chất lượng trung bình** (mặc định): cân bằng tốt giữa độ rõ nét và dung lượng tệp.
|
||||
- **Chất lượng thấp**: nén mạnh để có đầu ra nhỏ nhất.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển các tài liệu quét lưu dạng JPG thành một PDF duy nhất để nộp
|
||||
- Đóng gói ảnh sản phẩm thành catalog cho khách hàng
|
||||
- Biến ảnh y tế hoặc vệ tinh JPEG 2000 thành PDF dễ mang theo
|
||||
- Tạo album ảnh có thể in từ ảnh xuất ra từ máy ảnh
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp JPEG 2000 (`.jp2`, `.jpx`) được hỗ trợ đầy đủ, không chỉ JPEG tiêu chuẩn. Điều này hữu ích cho ảnh y tế và dữ liệu không gian địa lý.
|
||||
- Nếu ảnh JPG của bạn đến từ camera điện thoại, chất lượng Trung bình thường cho tệp nhỏ hơn 40-60% so với Cao mà không thấy khác biệt trên màn hình.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
- [PNG sang PDF](./png-to-pdf)
|
||||
- [WebP sang PDF](./webp-to-pdf)
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: JSON sang PDF
|
||||
description: Dựng lại tệp PDF từ định dạng JSON của BentoPDF. Chuyển các bản xuất JSON trở lại tài liệu PDF gốc.
|
||||
---
|
||||
|
||||
# JSON sang PDF
|
||||
|
||||
Dựng lại tài liệu PDF từ các tệp JSON đã được tạo trước đó bởi công cụ **PDF sang JSON** của BentoPDF. Đây là công cụ chuyển đổi hai chiều: nó lấy biểu diễn JSON có cấu trúc của PDF và xây dựng lại tài liệu gốc.
|
||||
|
||||
::: warning
|
||||
Công cụ này chỉ chấp nhận tệp JSON do bộ chuyển đổi PDF sang JSON của BentoPDF tạo ra. Tệp JSON thông thường từ API, cơ sở dữ liệu hoặc công cụ khác không được hỗ trợ.
|
||||
:::
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Đầu vào | Mô tả |
|
||||
| :------ | :-------------------------------------------------------- |
|
||||
| `.json` | Tệp JSON được xuất bởi công cụ PDF sang JSON của BentoPDF |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả một hoặc nhiều tệp JSON.
|
||||
2. Danh sách tệp hiển thị từng tệp đã chọn kèm dung lượng.
|
||||
3. Nhấp **Chuyển sang PDF**. Công cụ xử lý mọi tệp bằng Web Worker và engine CPDF.
|
||||
4. Kết quả được tải xuống dưới dạng `jsons-to-pdf.zip` chứa một PDF cho mỗi tệp JSON đầu vào.
|
||||
|
||||
Quá trình chuyển đổi chạy trong Web Worker nền, nên giao diện vẫn phản hồi mượt ngay cả với tệp lớn.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Cấu trúc JSON quyết định hoàn toàn PDF đầu ra.
|
||||
|
||||
## Đầu ra
|
||||
|
||||
Khi chuyển đổi nhiều tệp JSON, kết quả được giao dưới dạng kho lưu trữ ZIP. Mỗi PDF được đặt tên theo tệp JSON nguồn (ví dụ `report.json` thành `report.pdf`).
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Khôi phục PDF từ bản sao lưu hoặc pipeline lưu trữ dựa trên JSON
|
||||
- Chuyển PDF qua JSON để kiểm tra rồi chuyển lại thành PDF
|
||||
- Dựng lại tài liệu sau khi chỉnh sửa cấu trúc JSON bằng chương trình
|
||||
- Xác minh bản xuất PDF sang JSON đã ghi lại toàn bộ nội dung tài liệu bằng cách chuyển ngược lại
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu bạn cần chuyển dữ liệu JSON tùy ý (như phản hồi API hoặc tệp cấu hình) thành PDF được định dạng, công cụ [Văn bản sang PDF](./txt-to-pdf) phù hợp hơn. Dán JSON dưới dạng văn bản và nó sẽ được hiển thị với định dạng đúng.
|
||||
- Engine WebAssembly CPDF phải sẵn có để công cụ này hoạt động. Các bản tự lưu trữ cần cấu hình tệp CPDF WASM.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Văn bản sang PDF](./txt-to-pdf)
|
||||
- [Markdown sang PDF](./markdown-to-pdf)
|
||||
- [CSV sang PDF](./csv-to-pdf)
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Tuyến tính hóa PDF
|
||||
description: Tối ưu tệp PDF để xem web nhanh với tải dần. Còn được gọi là tối ưu "Fast Web View".
|
||||
---
|
||||
|
||||
# Tuyến tính hóa PDF
|
||||
|
||||
Tuyến tính hóa sắp xếp lại cấu trúc PDF để trang đầu tiên có thể hiển thị trước khi toàn bộ tệp tải xong. Adobe gọi đây là "Fast Web View". Nếu bạn đăng PDF trên website hoặc phục vụ qua cổng tài liệu, tuyến tính hóa giúp chúng mở nhanh hơn đáng kể.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều tệp PDF.
|
||||
2. Nhấp **Tuyến tính hóa PDF**.
|
||||
3. Tải kết quả xuống dưới dạng kho lưu trữ ZIP chứa mọi tệp đã tuyến tính hóa.
|
||||
|
||||
Không có cài đặt nào cần cấu hình. Công cụ dùng cờ `--linearize` của QPDF, sắp xếp lại cấu trúc nội bộ của PDF mà không thay đổi nội dung hiển thị.
|
||||
|
||||
## Tuyến tính hóa làm gì
|
||||
|
||||
- Sắp xếp lại các đối tượng PDF để dữ liệu của trang đầu nằm ở đầu tệp
|
||||
- Thêm từ điển tuyến tính hóa và bảng gợi ý để trình xem biết nơi tìm từng trang
|
||||
- Cho phép yêu cầu theo dải byte: trình duyệt có thể tải riêng trang đầu mà không cần tải cả tệp
|
||||
- Dọn dẹp bảng tham chiếu chéo để truy cập ngẫu nhiên hiệu quả
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Xử lý hàng loạt nhiều PDF trong một thao tác
|
||||
- Đầu ra giữ nguyên mọi nội dung, phông chữ, hình ảnh và thành phần tương tác
|
||||
- Dùng QPDF (WebAssembly) để tuyến tính hóa đáng tin cậy, đúng chuẩn
|
||||
- Kết quả được đóng gói vào ZIP để tải xuống dễ dàng
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đăng báo cáo PDF trên website nơi người dùng mong đợi trang hiển thị tức thì
|
||||
- Nhúng PDF vào ứng dụng web có trình xem trong trình duyệt
|
||||
- Xuất bản catalog hoặc sách hướng dẫn PDF được truy cập qua kết nối di động chậm
|
||||
- Chuẩn bị tài liệu cho mạng phân phối nội dung (CDN) hỗ trợ phục vụ theo dải byte
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hãy tuyến tính hóa sau khi mọi chỉnh sửa khác đã xong. Bất kỳ sửa đổi nào sau đó (gộp, thêm trang) sẽ phá vỡ tuyến tính hóa.
|
||||
- Kết hợp với Nén PDF để có PDF nhỏ nhất và tải nhanh nhất.
|
||||
- Tuyến tính hóa làm tăng một chút dung lượng tệp (thường dưới 1%).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Nén PDF](./compress-pdf): giảm dung lượng tệp trước khi tuyến tính hóa
|
||||
- [Sửa chữa PDF](./repair-pdf): sửa các vấn đề cấu trúc ngăn cản việc tuyến tính hóa
|
||||
- [Xóa Metadata](./remove-metadata): loại bỏ metadata trước khi đăng trực tuyến
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: Markdown sang PDF
|
||||
description: Viết hoặc dán Markdown và xuất thành PDF được định dạng chuyên nghiệp với xem trước trực tiếp và tô sáng cú pháp.
|
||||
---
|
||||
|
||||
# Markdown sang PDF
|
||||
|
||||
Trình soạn thảo Markdown đầy đủ tính năng với xem trước trực tiếp và xuất PDF chỉ với một cú nhấp. Viết từ đầu, tải lên tệp `.md` có sẵn hoặc dán nội dung từ clipboard. Trình soạn thảo hiển thị Markdown theo thời gian thực và xuất PDF có kiểu dáng bằng công cụ in tích hợp của trình duyệt.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Đầu vào | Mô tả |
|
||||
| :------------- | :------------------------------ |
|
||||
| Tệp `.md` | Tải lên bằng nút Tải lên |
|
||||
| Nhập trực tiếp | Gõ hoặc dán vào trình soạn thảo |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Mở công cụ Markdown sang PDF. Trình soạn thảo tải với chế độ chia đôi: mã nguồn Markdown bên trái, bản xem trước đã hiển thị bên phải.
|
||||
2. Viết Markdown của bạn, dán vào hoặc nhấp **Tải lên** để tải tệp `.md`.
|
||||
3. Chuyển giữa giao diện sáng và tối bằng thanh trượt giao diện trên thanh công cụ.
|
||||
4. Nhấp **Xuất PDF** (hoặc nhấn `Ctrl/Cmd + S`) để tạo PDF qua hộp thoại in của trình duyệt.
|
||||
|
||||
## Tính năng
|
||||
|
||||
Trình soạn thảo hỗ trợ nhiều tính năng Markdown ngoài phần cơ bản:
|
||||
|
||||
- **Markdown tiêu chuẩn**: tiêu đề, in đậm, in nghiêng, liên kết, hình ảnh, danh sách, trích dẫn, đường kẻ ngang
|
||||
- **Khối mã** với tô sáng cú pháp cho hơn 15 ngôn ngữ (JavaScript, TypeScript, Python, Go, Rust, SQL, Java, C#, C++, YAML, Bash và nhiều hơn nữa)
|
||||
- **Sơ đồ Mermaid**: lưu đồ, sơ đồ trình tự, sơ đồ ER và các loại biểu đồ Mermaid khác hiển thị trực tiếp trong bản xem trước
|
||||
- **Bảng** với cú pháp bảng Markdown tiêu chuẩn
|
||||
- **Danh sách công việc** với hộp kiểm
|
||||
- **Chú thích cuối trang**, **chỉ số dưới**, **chỉ số trên**
|
||||
- **Danh sách định nghĩa**, **từ viết tắt**
|
||||
- Hỗ trợ **Emoji** (`:smile:` hiển thị thành emoji)
|
||||
- **Đánh dấu** (`==marked text==`) và **chèn thêm** (`++inserted text++`)
|
||||
- **URL tự động liên kết**: URL thuần được chuyển thành liên kết nhấp được
|
||||
- Tạo **mục lục**
|
||||
- **Liên kết neo** trên tiêu đề
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Viết tài liệu dự án và xuất PDF hoàn chỉnh cho các bên liên quan
|
||||
- Tạo báo cáo kỹ thuật với mã mẫu và sơ đồ kiến trúc Mermaid
|
||||
- Chuyển README trên GitHub thành PDF để dùng ngoại tuyến hoặc in
|
||||
- Soạn đề xuất hoặc đặc tả với danh sách công việc và bảng
|
||||
- Tạo tài liệu phát tay có kiểu dáng từ ghi chú bài giảng viết bằng Markdown
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Đầu ra PDF dùng chức năng in ra PDF của trình duyệt. Trong Chrome, bạn có thể tùy chỉnh lề và tỷ lệ trong hộp thoại in trước khi lưu.
|
||||
- Sơ đồ Mermaid hiển thị trong bản xem trước nhưng có thể cần một lúc để khởi tạo ở lần dùng đầu.
|
||||
- Dùng `Ctrl/Cmd + S` làm phím tắt để xuất mà không cần với tới nút.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Văn bản sang PDF](./txt-to-pdf)
|
||||
- [Word sang PDF](./word-to-pdf)
|
||||
- [JSON sang PDF](./json-to-pdf)
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Gộp PDF
|
||||
description: Kết hợp nhiều tệp PDF thành một tài liệu với sắp xếp lại bằng kéo và thả và kiểm soát đến từng trang.
|
||||
---
|
||||
|
||||
# Gộp PDF
|
||||
|
||||
Kết hợp nhiều tệp PDF thành một tài liệu duy nhất. Bạn có thể gộp nguyên tệp theo thứ tự cụ thể, hoặc chuyển sang Chế độ trang để kiểm soát chi tiết từng trang riêng lẻ từ mọi PDF đã tải lên.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên hai hoặc nhiều tệp PDF bằng cách nhấp vào vùng thả hoặc kéo chúng vào.
|
||||
2. Chọn giữa **Chế độ tệp** và **Chế độ trang** bằng nút chuyển ở trên cùng.
|
||||
3. Trong Chế độ tệp, kéo các tệp để sắp xếp lại và tùy chọn chỉ định phạm vi trang (ví dụ `1-3, 5`) cho từng tệp. Để trống phạm vi để bao gồm mọi trang.
|
||||
4. Trong Chế độ trang, kéo và thả từng hình thu nhỏ của trang để xây dựng chính xác thứ tự trang bạn muốn.
|
||||
5. Nhấp **Gộp PDF** để kết hợp tất cả thành một tệp. PDF đã gộp được tải xuống tự động.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Hai chế độ gộp: Chế độ tệp để gộp nhanh nguyên tệp, Chế độ trang để kiểm soát từng trang
|
||||
- Sắp xếp lại bằng kéo và thả ở cả hai chế độ với hiệu ứng mượt
|
||||
- Cú pháp phạm vi trang (ví dụ `1-3, 5, 8-10`) cho phép chọn lọc trang mà không cần chuyển sang Chế độ trang
|
||||
- Hình thu nhỏ trang được tải lười giúp giao diện luôn phản hồi tốt ngay cả với tài liệu lớn
|
||||
- Không giới hạn số tệp hay tổng số trang
|
||||
- Giữ nguyên chất lượng PDF gốc, không mã hóa lại
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mô tả |
|
||||
| ---------------- | ------------------------------------------------------------------------------------------ |
|
||||
| **Chế độ tệp** | Gộp nguyên tệp theo thứ tự tùy chỉnh, với bộ lọc phạm vi trang tùy chọn cho từng tệp |
|
||||
| **Chế độ trang** | Lưới trực quan của mọi trang từ mọi tệp: kéo hình thu nhỏ để xây dựng đúng thứ tự bạn muốn |
|
||||
| **Ô nhập trang** | Ô văn bản cho từng tệp nhận các phạm vi như `1-3, 5` để chỉ bao gồm các trang cụ thể |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Kết hợp các PDF chương riêng lẻ thành một cuốn sách hoặc báo cáo
|
||||
- Gộp thư xin việc và sơ yếu lý lịch thành một tài liệu ứng tuyển
|
||||
- Lấy các trang cụ thể từ nhiều tài liệu nguồn vào một tệp tổng hợp
|
||||
- Tập hợp hóa đơn hoặc biên lai quét thành một PDF lưu trữ
|
||||
- Tạo tài liệu phát tay bài thuyết trình từ các slide trong nhiều bộ
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Dùng Chế độ trang khi bạn cần xen kẽ các trang từ các tệp khác nhau thay vì nối tệp này sau tệp kia.
|
||||
- Bạn có thể thêm tệp sau lần tải lên đầu bằng nút **Thêm tệp** mà không mất bố cục hiện tại.
|
||||
- Phạm vi trang được đánh số từ 1, nên `1` chỉ trang đầu tiên của tệp đó.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Chia PDF](./split-pdf)
|
||||
- [Nhân đôi & Sắp xếp](./organize-pdf)
|
||||
- [Xen kẽ & Trộn trang](./alternate-merge)
|
||||
- [Xóa trang](./delete-pages)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: MOBI sang PDF
|
||||
description: Chuyển đổi tệp sách điện tử MOBI sang PDF ngay trong trình duyệt. Miễn phí, riêng tư, không tải tệp lên.
|
||||
---
|
||||
|
||||
# MOBI sang PDF
|
||||
|
||||
Chuyển đổi sách điện tử MOBI của Amazon Kindle thành tài liệu PDF. Tệp MOBI gắn với thiết bị và ứng dụng Kindle nên khó đọc ở nơi khác. Chuyển sang PDF cho bạn bản di động có thể mở trên mọi thiết bị hoặc in ra.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :-------- | :----------- | :----------------------------------------- |
|
||||
| MOBI | `.mobi` | Định dạng sách điện tử Kindle (Mobipocket) |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả một hoặc nhiều tệp MOBI.
|
||||
2. Xem lại danh sách tệp. Xóa tệp không cần bằng biểu tượng thùng rác, hoặc dùng **Thêm tệp** để bổ sung sách điện tử.
|
||||
3. Nhấp **Chuyển sang PDF**. Engine PyMuPDF phân tích cấu trúc MOBI và hiển thị từng trang thành nội dung PDF.
|
||||
4. Một tệp được tải xuống dưới dạng PDF. Khi chuyển đổi nhiều tệp, bạn nhận một kho lưu trữ ZIP tên `mobi-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không cần cài đặt thêm. Quá trình chuyển đổi giữ nguyên nội dung văn bản, định dạng và hình ảnh được nhúng từ tệp MOBI gốc.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đọc nội dung mua từ Kindle trên máy đọc sách không phải Kindle chỉ hỗ trợ PDF
|
||||
- In các chương của sách điện tử để học hoặc ghi chú ngoại tuyến
|
||||
- Lưu trữ thư viện sách điện tử cá nhân ở định dạng phổ biến
|
||||
- Chia sẻ trích đoạn với người không cài ứng dụng Kindle
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp MOBI có bảo vệ DRM không thể chuyển đổi. Công cụ chỉ hoạt động với tệp MOBI không DRM.
|
||||
- Sách điện tử lớn có nhiều ảnh nhúng có thể mất thêm vài giây để xử lý vì mọi thứ diễn ra trong trình duyệt.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [EPUB sang PDF](./epub-to-pdf)
|
||||
- [FB2 sang PDF](./fb2-to-pdf)
|
||||
- [CBZ sang PDF](./cbz-to-pdf)
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: N-Up PDF
|
||||
description: Sắp xếp nhiều trang PDF lên một tờ theo bố cục lưới để in gọn.
|
||||
---
|
||||
|
||||
# N-Up PDF
|
||||
|
||||
Đặt nhiều trang lên một tờ theo bố cục lưới. Điều này giảm số trang in bằng cách đưa 2, 4, 6, 8, 9 hoặc 16 trang lên mỗi tờ. Công cụ xử lý việc co giãn, định vị và cấu hình kích thước trang tùy chọn.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Chọn số trang trên mỗi tờ (giá trị "N"): 2, 4, 6, 8, 9 hoặc 16.
|
||||
3. Chọn kích thước trang đầu ra (mặc định là A4) và hướng trang.
|
||||
4. Tùy chọn cấu hình khoảng cách, màu viền và màu nền.
|
||||
5. Nhấp nút xử lý. Công cụ co giãn từng trang và xếp chúng lên các tờ mới.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Bố cục lưới: 2-up, 4-up, 6-up, 8-up, 9-up và 16-up
|
||||
- Kích thước trang đầu ra và hướng trang có thể cấu hình
|
||||
- Khoảng cách tùy chọn giữa các trang được xếp
|
||||
- Cài đặt màu nền và màu viền
|
||||
- Giữ nguyên tỷ lệ khung hình của trang gốc khi co giãn cho vừa
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mô tả |
|
||||
| -------------------- | ---------------------------------------------------------- |
|
||||
| **Số trang mỗi tờ** | Số trang gốc đặt trên mỗi trang đầu ra (2, 4, 6, 8, 9, 16) |
|
||||
| **Kích thước trang** | Kích thước tờ đầu ra (A4, Letter, Legal, v.v.) |
|
||||
| **Hướng trang** | Dọc hoặc Ngang cho tờ đầu ra |
|
||||
| **Khoảng cách** | Khoảng trống tính bằng point giữa các trang được xếp |
|
||||
| **Màu nền** | Màu tô cho nền của tờ đầu ra |
|
||||
| **Màu viền** | Màu cho viền quanh mỗi trang được xếp |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- In tài liệu phát tay với 4 slide mỗi trang để tiết kiệm giấy
|
||||
- Tạo tờ ôn tập với nhiều trang tham khảo trên một tờ
|
||||
- Tạo kho lưu trữ tài liệu gọn nhẹ để lưu hồ sơ
|
||||
- Tạo tờ tổng quan dạng hình thu nhỏ cho một tài liệu dài
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hướng ngang thường phù hợp hơn cho bố cục 2-up, còn hướng dọc thường tốt nhất cho 4-up trở lên.
|
||||
- Tăng khoảng cách giúp dễ đọc hơn nhưng làm giảm diện tích dành cho mỗi trang được xếp.
|
||||
- Với thao tác ngược lại (chia một trang thành nhiều trang), xem [Chia PDF thành poster](./posterize-pdf).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Chia PDF thành poster](./posterize-pdf)
|
||||
- [Sách nhỏ PDF](./pdf-booklet)
|
||||
- [Kết hợp thành một trang](./combine-single-page)
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: OCR PDF
|
||||
description: Làm cho PDF quét có thể tìm kiếm và sao chép bằng Tesseract OCR với hỗ trợ đa ngôn ngữ và lọc ký tự.
|
||||
---
|
||||
|
||||
# OCR PDF
|
||||
|
||||
Biến tài liệu quét thành PDF có thể tìm kiếm và sao chép. Công cụ dùng Tesseract OCR để nhận dạng văn bản trong ảnh và phủ một lớp văn bản vô hình lên các trang gốc, giữ nguyên hình thức hiển thị trong khi làm cho nội dung hoàn toàn có thể tìm kiếm.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF quét hoặc PDF dạng ảnh.
|
||||
2. Chọn một hoặc nhiều ngôn ngữ có trong tài liệu từ danh sách ngôn ngữ có thể tìm kiếm.
|
||||
3. Tùy chọn điều chỉnh cài đặt nâng cao (độ phân giải, nhị phân hóa, danh sách ký tự cho phép).
|
||||
4. Nhấp **Bắt đầu OCR** và theo dõi tiến trình trên thanh tiến trình thời gian thực.
|
||||
5. Khi hoàn tất, xem lại văn bản đã trích xuất, rồi tải xuống PDF có thể tìm kiếm hoặc tệp `.txt` thuần.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- OCR đa ngôn ngữ với bộ chọn ngôn ngữ có thể tìm kiếm
|
||||
- Lớp văn bản vô hình giữ nguyên diện mạo tài liệu gốc
|
||||
- Thanh tiến trình thời gian thực và nhật ký đầu ra trong khi xử lý
|
||||
- Tải kết quả xuống dưới dạng PDF có thể tìm kiếm hoặc tệp văn bản thuần
|
||||
- Sao chép văn bản đã trích xuất trực tiếp vào clipboard
|
||||
- Ba mức độ phân giải để cân bằng giữa tốc độ và độ chính xác
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Cài đặt | Giá trị | Mặc định | Mục đích |
|
||||
| -------------------------------- | ----------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------- |
|
||||
| **Độ phân giải** | Chuẩn (192 DPI), Cao (288 DPI), Siêu cao (384 DPI) | Cao | Độ phân giải cao hơn cải thiện độ chính xác với chữ nhỏ nhưng mất nhiều thời gian hơn |
|
||||
| **Nhị phân hóa ảnh** | Bật / Tắt | Tắt | Tăng độ tương phản cho bản quét sạch bằng cách chuyển sang đen trắng |
|
||||
| **Mẫu danh sách ký tự cho phép** | Không, Chữ và số, Số + Tiền tệ, Chỉ chữ cái, Chỉ số, Hóa đơn, Form, Tùy chỉnh | Không | Giới hạn các ký tự được nhận dạng để cải thiện độ chính xác cho từng loại tài liệu |
|
||||
| **Danh sách ký tự cho phép** | Văn bản tự do | Trống | Bộ ký tự thủ công khi mẫu được đặt là Tùy chỉnh |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Làm cho hợp đồng và hóa đơn quét có thể tìm kiếm để bạn dùng Ctrl+F
|
||||
- Trích xuất văn bản từ tài liệu chụp ảnh hoặc hồ sơ giấy cũ
|
||||
- Xử lý biên lai với mẫu Hóa đơn để ghi nhận chính xác số tiền và ngày tháng
|
||||
- Tạo PDF dễ tiếp cận từ bản quét chỉ có ảnh để đáp ứng yêu cầu tuân thủ
|
||||
- Trích xuất hàng loạt nội dung văn bản từ sách hoặc hướng dẫn quét
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hãy chọn nhiều ngôn ngữ nếu tài liệu có nội dung pha trộn ngôn ngữ (ví dụ tiêu đề tiếng Anh với nội dung tiếng Nhật).
|
||||
- Dùng tùy chọn nhị phân hóa cho tài liệu có chữ mờ hoặc độ tương phản thấp, vì nó có thể cải thiện đáng kể độ chính xác nhận dạng.
|
||||
- Các mẫu danh sách cho phép Hóa đơn và Form giảm mạnh nhận dạng sai trên tài liệu có cấu trúc bằng cách bỏ qua các hình dạng ký tự không liên quan.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Trích xuất bảng PDF](./extract-tables)
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Nén PDF](./compress-pdf)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: ODG sang PDF
|
||||
description: Chuyển đổi tệp LibreOffice Draw (ODG) sang PDF trong trình duyệt. Miễn phí, không tải lên, hoàn toàn riêng tư.
|
||||
---
|
||||
|
||||
# ODG sang PDF
|
||||
|
||||
Chuyển đổi tệp OpenDocument Graphics sang PDF. ODG là định dạng gốc của LibreOffice Draw, dùng cho sơ đồ, lưu đồ và hình minh họa vector. Chuyển sang PDF giúp các bản vẽ này dễ chia sẻ, in và nhúng vào tài liệu khác.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :-------------------- | :----------- | :------------------------------------- |
|
||||
| OpenDocument Graphics | `.odg` | Tệp LibreOffice Draw / OpenOffice Draw |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp ODG của bạn. Có thể thêm nhiều tệp cùng lúc.
|
||||
2. Xem lại danh sách tệp. Xóa từng mục bằng biểu tượng thùng rác, hoặc nhấp **Thêm tệp** để thêm bản vẽ.
|
||||
3. Nhấp **Chuyển sang PDF**. Engine dựa trên LibreOffice được tải trong trình duyệt và chuyển đổi từng tệp ODG, giữ nguyên đồ họa vector, hình dạng và văn bản.
|
||||
4. Một tệp được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp tạo thành kho lưu trữ ZIP tên `odg-to-pdf.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không cần cài đặt thêm. Quá trình chuyển đổi giữ nguyên kích thước trang, hình dạng, đường nối và hộp văn bản gốc từ nguồn ODG.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chia sẻ sơ đồ LibreOffice Draw với khách hàng không cài LibreOffice
|
||||
- In lưu đồ và sơ đồ mạng được tạo trong Draw
|
||||
- Đưa hình minh họa ODG vào báo cáo hoặc bài thuyết trình dưới dạng PDF nhúng
|
||||
- Lưu trữ bản vẽ kỹ thuật ở định dạng vẫn đọc được trong nhiều thập kỷ
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Các thành phần vector vẫn là vector trong PDF đầu ra, nên kết quả co giãn mượt đến mọi kích thước in.
|
||||
- Engine LibreOffice cần một lúc để khởi tạo ở lần dùng đầu. Các lần chuyển đổi sau trong cùng phiên sẽ nhanh hơn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [ODS sang PDF](./ods-to-pdf)
|
||||
- [ODP sang PDF](./odp-to-pdf)
|
||||
- [VSD sang PDF](./vsd-to-pdf)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: ODP sang PDF
|
||||
description: Chuyển đổi bản trình bày LibreOffice Impress (ODP) sang PDF trong trình duyệt. Miễn phí, riêng tư, không tải lên.
|
||||
---
|
||||
|
||||
# ODP sang PDF
|
||||
|
||||
Chuyển đổi tệp OpenDocument Presentation sang PDF. ODP là định dạng gốc của LibreOffice Impress và là bản xuất tiêu chuẩn từ Google Slides. Biến bản trình bày thành PDF nghĩa là ai cũng có thể xem mà không cần phần mềm trình chiếu, và các slide in ra rất đẹp.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :------------------------ | :----------- | :------------------------------------------- |
|
||||
| OpenDocument Presentation | `.odp` | LibreOffice Impress / bản xuất Google Slides |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp ODP của bạn. Có thể chọn nhiều bản trình bày cùng lúc.
|
||||
2. Xem lại danh sách tệp. Xóa mục bằng biểu tượng thùng rác, hoặc dùng **Thêm tệp** để bổ sung bản trình bày.
|
||||
3. Nhấp **Chuyển sang PDF**. Engine dựa trên LibreOffice xử lý từng bản trình bày và tạo PDF trong đó mỗi slide thành một trang.
|
||||
4. Một tệp được tải xuống dưới dạng PDF. Nhiều tệp được giao trong kho lưu trữ ZIP tên `odp-to-pdf.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không có cài đặt nào cần cấu hình. Mỗi slide được hiển thị ở kích thước gốc, giữ nguyên văn bản, hình ảnh, hình dạng và nền slide.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Phân phát bản trình bày cho khán giả dưới dạng PDF tài liệu phát tay
|
||||
- Chia sẻ bản xuất Google Slides với người thích PDF hơn ODP
|
||||
- Lưu trữ các bài nói chuyện và bài giảng ở định dạng chỉ đọc
|
||||
- In bộ slide cho các hội thảo trực tiếp
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hiệu ứng chuyển slide và hoạt ảnh chỉ là tính năng hình ảnh nên không được đưa vào PDF, nhưng mọi nội dung tĩnh đều hiển thị đúng.
|
||||
- Ghi chú của người trình bày không có trong PDF đầu ra. Nếu cần ghi chú, hãy xuất riêng từ phần mềm trình chiếu của bạn.
|
||||
- Giống các công cụ dựa trên LibreOffice khác, engine được tải ở lần dùng đầu và được lưu đệm trong suốt phiên.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [ODG sang PDF](./odg-to-pdf)
|
||||
- [ODS sang PDF](./ods-to-pdf)
|
||||
- [PUB sang PDF](./pub-to-pdf)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: ODS sang PDF
|
||||
description: Chuyển đổi bảng tính LibreOffice Calc (ODS) sang PDF ngay trong trình duyệt. Miễn phí, riêng tư, không cần đăng ký.
|
||||
---
|
||||
|
||||
# ODS sang PDF
|
||||
|
||||
Chuyển đổi tệp OpenDocument Spreadsheet sang PDF. ODS là định dạng gốc của LibreOffice Calc và cũng là định dạng xuất phổ biến từ Google Sheets. Công cụ này kết xuất dữ liệu, định dạng và biểu đồ của bảng tính thành PDF có phân trang để bạn in hoặc chia sẻ.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :----------------------- | :----------- | :--------------------------------------- |
|
||||
| OpenDocument Spreadsheet | `.ods` | Xuất từ LibreOffice Calc / Google Sheets |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp ODS của bạn. Hỗ trợ nhiều tệp.
|
||||
2. Xem lại danh sách tệp. Dùng biểu tượng thùng rác để xóa tệp, hoặc nhấp **Thêm tệp** để mở rộng lô.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Công cụ dựa trên LibreOffice sẽ tải trong trình duyệt và kết xuất từng bảng tính thành các trang PDF.
|
||||
4. Một bảng tính sẽ được tải xuống dưới dạng PDF. Nhiều tệp sẽ được đóng gói thành `ods-to-pdf.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không cần cấu hình. Trình chuyển đổi áp dụng bố cục in, định dạng ô và độ rộng cột sẵn có của bảng tính vào PDF đầu ra.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chia sẻ bảng ngân sách hoặc báo cáo LibreOffice Calc với người chỉ nhận PDF
|
||||
- In bản xuất từ Google Sheets đã được tải xuống dưới dạng ODS
|
||||
- Lưu trữ hồ sơ tài chính ở định dạng không thể chỉnh sửa
|
||||
- Nộp biểu mẫu hoặc bảng chấm công dạng ODS dưới dạng tài liệu có bố cục cố định
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu bảng tính có nhiều trang tính, tất cả đều được đưa vào PDF đầu ra.
|
||||
- Bảng tính rất rộng có thể trải trên nhiều trang PDF theo chiều ngang. Hãy cân nhắc chỉnh độ rộng cột trong tệp gốc trước khi chuyển đổi nếu bố cục quan trọng.
|
||||
- Công cụ LibreOffice được khởi tạo trong lần dùng đầu tiên. Các lần chuyển đổi tiếp theo trong cùng phiên sẽ nhanh hơn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [ODG sang PDF](./odg-to-pdf)
|
||||
- [ODP sang PDF](./odp-to-pdf)
|
||||
- [XML sang PDF](./xml-to-pdf)
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: ODT sang PDF
|
||||
description: Chuyển đổi tệp OpenDocument Text (ODT) sang định dạng PDF ngay trong trình duyệt bằng công cụ chạy trên LibreOffice.
|
||||
---
|
||||
|
||||
# ODT sang PDF
|
||||
|
||||
Chuyển đổi tệp OpenDocument Text sang PDF. ODT là định dạng gốc của LibreOffice Writer, Apache OpenOffice và các trình soạn thảo văn bản mã nguồn mở khác. Công cụ này dùng engine LibreOffice chạy trong trình duyệt để chuyển đổi chính xác, giữ nguyên định dạng, bảng, hình ảnh và kiểu dáng.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :---------------- | :----------- |
|
||||
| OpenDocument Text | `.odt` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả một hoặc nhiều tệp ODT.
|
||||
2. Xem lại danh sách tệp. Thêm tệp hoặc xóa những tệp không cần.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Engine LibreOffice khởi tạo (có chỉ báo tiến trình hiển thị trạng thái tải), sau đó từng tệp được chuyển đổi.
|
||||
4. Một tệp được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp được đóng gói thành `odt-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có cấu hình bổ sung. Quá trình chuyển đổi giữ định dạng của tài liệu gốc sát nhất có thể.
|
||||
|
||||
## Kết quả đầu ra
|
||||
|
||||
| Số tệp đầu vào | Đầu ra |
|
||||
| :------------- | :----------------------------------------------------- |
|
||||
| 1 tệp | Tải xuống một PDF (ví dụ: `document.pdf`) |
|
||||
| 2+ tệp | Tệp ZIP (`odt-converted.zip`) chứa một PDF cho mỗi tệp |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển tài liệu LibreOffice Writer sang PDF để chia sẻ với người dùng Microsoft Office
|
||||
- Tạo PDF sẵn sàng để in từ các bài báo học thuật viết ở định dạng OpenDocument
|
||||
- Chuyển đổi hàng loạt một thư mục mẫu ODT thành PDF để phân phối
|
||||
- Tạo PDF từ các tệp ODT do hệ thống tạo tài liệu tự động sinh ra
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Engine LibreOffice tải trong lần dùng đầu tiên và được lưu đệm cho các lần chuyển đổi sau. Lần tải đầu mất vài giây; sau đó việc chuyển đổi rất nhanh.
|
||||
- Tài liệu phức tạp có đối tượng OLE nhúng hoặc phông chữ lạ có thể hiển thị hơi khác so với LibreOffice trên máy tính. Hãy thử với một mẫu trước khi chuyển đổi hàng loạt.
|
||||
- Với tài liệu Word (`.doc`, `.docx`), hãy dùng công cụ [Word sang PDF](./word-to-pdf), công cụ này cũng dùng engine LibreOffice nhưng nhận trực tiếp các định dạng của Microsoft.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Word sang PDF](./word-to-pdf)
|
||||
- [RTF sang PDF](./rtf-to-pdf)
|
||||
- [Văn bản sang PDF](./txt-to-pdf)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Nhân đôi & Sắp xếp
|
||||
description: Sắp xếp lại, nhân đôi và xóa trang PDF bằng hình thu nhỏ kéo thả và ô nhập thứ tự trang tùy chỉnh.
|
||||
---
|
||||
|
||||
# Nhân đôi & Sắp xếp
|
||||
|
||||
Sắp xếp lại, nhân đôi và xóa trang của PDF bằng giao diện kéo thả trực quan. Mỗi trang hiển thị dưới dạng hình thu nhỏ để bạn di chuyển, sao chép hoặc xóa trước khi lưu kết quả thành tệp mới.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Công cụ kết xuất lưới hình thu nhỏ hiển thị mọi trang.
|
||||
3. Kéo hình thu nhỏ để đổi thứ tự trang, nhấp nút nhân đôi màu xanh lá để sao chép một trang, hoặc nhấp nút xóa màu đỏ để xóa trang.
|
||||
4. Hoặc nhập thứ tự trang tùy chỉnh vào ô văn bản (ví dụ: `3, 1, 2, 4`) rồi nhấp **Áp dụng** để sắp xếp lại tất cả trang cùng lúc.
|
||||
5. Nhấp nút xử lý để tạo và tải xuống PDF đã sắp xếp lại.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Kéo thả để sắp xếp lại trang với hiệu ứng chuyển động
|
||||
- Nút nhân đôi và xóa cho từng trang
|
||||
- Ô nhập thứ tự trang tùy chỉnh để sắp xếp chính xác
|
||||
- Nhãn số trang tự động cập nhật sau mỗi thay đổi
|
||||
- Không cho xóa trang cuối cùng còn lại
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển một trang bị đặt sai về đúng vị trí trong báo cáo
|
||||
- Nhân đôi một trang biểu mẫu để có nhiều bản trống trong một tệp
|
||||
- Xóa các trang nháp hoặc trang giữ chỗ trước khi phân phối tài liệu
|
||||
- Đảo ngược hoặc xáo trộn thứ tự trang để chuẩn bị in
|
||||
- Tạo trình tự trang tùy chỉnh mà không cần gộp lại các tệp riêng lẻ
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Ô thứ tự trang tùy chỉnh nhận các số trang gốc cách nhau bằng dấu phẩy. Phải có đủ mọi trang, mỗi trang đúng một lần, không bỏ sót hay lặp lại.
|
||||
- Sau khi nhân đôi một trang, cả hai bản đều tham chiếu cùng chỉ số trang gốc. Việc sắp xếp lại từng bản hoạt động độc lập.
|
||||
- Với các thao tác hàng loạt trên nhiều tệp hoặc quy trình nâng cao hơn, hãy cân nhắc dùng [Công cụ đa năng PDF](./pdf-multi-tool).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Xóa trang](./delete-pages)
|
||||
- [Công cụ đa năng PDF](./pdf-multi-tool)
|
||||
- [Đảo ngược trang](./reverse-pages)
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Kích thước trang
|
||||
description: Phân tích kích thước trang PDF, hướng trang, tỷ lệ khung hình và độ xoay. Phát hiện tài liệu có nhiều kích thước và xuất dữ liệu ra CSV.
|
||||
---
|
||||
|
||||
# Kích thước trang
|
||||
|
||||
Công cụ chẩn đoán đọc từng trang trong PDF và báo cáo kích thước chính xác, hướng trang, tên khổ giấy chuẩn, tỷ lệ khung hình, diện tích và độ xoay. Hữu ích để phát hiện các trang khác kích thước trước khi in, hoặc để ghi lại thuộc tính của một PDF bạn nhận được.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF. Việc phân tích bắt đầu tự động, không cần nhấn nút nào.
|
||||
2. Bảng tóm tắt hiển thị tổng số trang, số kích thước trang khác nhau và liệu tài liệu có nhiều kích thước hay không.
|
||||
3. Duyệt bảng kết quả đầy đủ với chi tiết từng trang.
|
||||
4. Chuyển đơn vị hiển thị giữa Điểm (Points), Inch, Milimét hoặc Pixel.
|
||||
5. Nhấp **Xuất ra CSV** để lưu dữ liệu.
|
||||
|
||||
## Các trường được báo cáo
|
||||
|
||||
| Cột | Mô tả |
|
||||
| ---------------- | ------------------------------------------------ |
|
||||
| Trang số | Số thứ tự trang |
|
||||
| Kích thước | Chiều rộng x Chiều cao theo đơn vị đã chọn |
|
||||
| Khổ chuẩn | Tên khổ khớp (A4, Letter, v.v.) hoặc "Tùy chỉnh" |
|
||||
| Hướng | Dọc (Portrait) hoặc Ngang (Landscape) |
|
||||
| Tỷ lệ khung hình | Tỷ lệ rộng trên cao dưới dạng số thập phân |
|
||||
| Diện tích | Diện tích trang theo đơn vị đã chọn bình phương |
|
||||
| Góc xoay | Độ xoay của trang tính bằng độ |
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Tự động nhận diện khổ giấy chuẩn (A3, A4, A5, Letter, Legal, Tabloid và nhiều khổ khác)
|
||||
- Cảnh báo tài liệu nhiều kích thước kèm thống kê các kích thước xuất hiện và số trang dùng mỗi kích thước
|
||||
- Chuyển đổi đơn vị giữa điểm, inch, milimét và pixel (ở 96 PPI)
|
||||
- Xuất CSV để dùng trong bảng tính hoặc hệ thống tài liệu
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xác minh mọi trang đều là A4 trước khi gửi tài liệu cho tiệm in
|
||||
- Tìm nguyên nhân PDF đã gộp in ra lề bất ngờ ở một số trang
|
||||
- Ghi lại bố cục trang của kho lưu trữ PDF lớn cho hồ sơ metadata
|
||||
- Xác định các trang bị xoay cần chỉnh sửa
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu phần tóm tắt hiển thị "Nhiều khổ trang", hãy dùng công cụ Sửa kích thước trang để chuẩn hóa trước khi in.
|
||||
- Trường độ xoay giúp nhận ra các trang hiển thị đúng nhưng có thuộc tính xoay khác 0, điều có thể gây lỗi trong một số quy trình.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Sửa kích thước trang](./fix-page-size): chuẩn hóa các trang sau khi phát hiện kích thước không đồng nhất
|
||||
- [Nén PDF](./compress-pdf): tối ưu PDF sau khi sửa các vấn đề về trang
|
||||
- [Xoay PDF](./rotate-pdf): chỉnh lại các trang bị xoay
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Số trang
|
||||
description: Thêm số trang tùy chỉnh vào bất kỳ vị trí nào trên trang PDF với phông chữ, cỡ chữ và màu sắc có thể cấu hình.
|
||||
---
|
||||
|
||||
# Số trang
|
||||
|
||||
Thêm số trang hiển thị vào mọi trang của PDF. Bạn chọn vị trí, định dạng, cỡ chữ và màu sắc, phần còn lại công cụ lo.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên tệp PDF của bạn.
|
||||
2. Cấu hình cài đặt số trang trong bảng tùy chọn xuất hiện.
|
||||
3. Nhấp **Thêm số trang** để xử lý.
|
||||
4. PDF đã đánh số sẽ được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Vị trí**: Chọn nơi số trang xuất hiện: Giữa dưới, Trái dưới, Phải dưới, Giữa trên, Trái trên hoặc Phải trên.
|
||||
- **Định dạng**: Chọn giữa đánh số đơn giản (1, 2, 3...) hoặc định dạng "trang X trên Y" (1 / 5, 2 / 5...).
|
||||
- **Cỡ chữ**: Đặt kích thước của văn bản số trang. Mặc định là 12.
|
||||
- **Màu sắc**: Chọn bất kỳ màu nào cho văn bản số trang bằng bộ chọn màu.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Sáu tùy chọn vị trí bao gồm các góc và vị trí giữa
|
||||
- Hai định dạng đánh số: tuần tự đơn giản hoặc "trang X trên Y"
|
||||
- Cỡ chữ tùy chỉnh từ 6 đến 72 điểm
|
||||
- Bộ chọn màu đầy đủ cho màu văn bản
|
||||
- Tự động xử lý lề để số luôn nằm trong vùng an toàn bất kể kích thước trang
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuẩn bị tài liệu để in cần có số trang tham chiếu rõ ràng
|
||||
- Thêm số trang vào PDF đã gộp từ nhiều tệp nguồn
|
||||
- Đánh số tài liệu phát tay cho bài thuyết trình trước khi phân phối
|
||||
- Thêm số thứ tự vào tài liệu pháp lý hoặc hợp đồng
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Định dạng "trang X trên Y" hữu ích cho tài liệu mà người đọc cần biết tổng độ dài, như đề xuất hoặc báo cáo.
|
||||
- Nếu bạn cần kiểu đánh số khác nhau cho từng phần (như chữ số La Mã cho phần đầu sách), hãy dùng công cụ [Thêm nhãn trang](./add-page-labels).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Thêm nhãn trang](./add-page-labels)
|
||||
- [Đánh số Bates](./bates-numbering)
|
||||
- [Đầu trang & Chân trang](./header-footer)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Sách nhỏ PDF
|
||||
description: Sắp xếp lại các trang PDF theo thứ tự sách nhỏ (đóng ghim giữa) để gấp và bấm thành cuốn sách nhỏ thực tế.
|
||||
---
|
||||
|
||||
# Sách nhỏ PDF
|
||||
|
||||
Sắp xếp lại các trang của PDF theo thứ tự dàn trang sách nhỏ. Khi in hai mặt và gấp đôi, các trang sẽ theo đúng thứ tự đọc. Đây là bố cục dùng cho sách nhỏ đóng ghim giữa và zine.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Cấu hình cài đặt sách nhỏ: kích thước trang đầu ra và hướng trang.
|
||||
3. Nhấp **Tạo bản xem trước** để xem các trang sẽ được sắp xếp thế nào trên mỗi tờ.
|
||||
4. Xem lại bản xem trước, hiển thị từng tờ giấy với các trang mặt trước và mặt sau.
|
||||
5. Nhấp **Tải xuống** để lưu PDF đã dàn trang sách nhỏ.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Tự động sắp xếp lại trang cho kiểu đóng ghim giữa
|
||||
- Kích thước trang đầu ra có thể cấu hình
|
||||
- Xem trước trực quan bố cục sách nhỏ trước khi tải xuống
|
||||
- Xử lý số trang lẻ bằng cách chèn trang trống khi cần
|
||||
- Co giãn các trang nguồn cho vừa kích thước tờ sách nhỏ
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tạo sách nhỏ hoặc zine để in từ một PDF thông thường
|
||||
- Chuẩn bị chương trình hội nghị hoặc hướng dẫn sự kiện để tự in
|
||||
- Làm thiệp chúc mừng gấp hoặc catalogue nhỏ
|
||||
- Làm tập thơ hoặc sách mỏng để đóng thủ công
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Số trang của PDF nguồn lý tưởng nên là bội số của 4 để có cuốn sách gọn. Nếu không, trang trống sẽ được thêm tự động để lấp đầy tờ cuối.
|
||||
- In đầu ra hai mặt với cài đặt "lật theo cạnh ngắn" của máy in, sau đó gấp tất cả các tờ lại với nhau và bấm ghim ở gáy sách.
|
||||
- Nếu chỉ muốn đặt nhiều trang lên một tờ mà không theo thứ tự sách nhỏ, hãy dùng [N-Up PDF](./n-up-pdf).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [N-Up PDF](./n-up-pdf)
|
||||
- [Xoay PDF](./rotate-pdf)
|
||||
- [Thêm trang trống](./add-blank-page)
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Lớp PDF (OCG)
|
||||
description: Xem, bật tắt, thêm và xóa các lớp Optional Content Group (OCG) trong tài liệu PDF.
|
||||
---
|
||||
|
||||
# Lớp PDF (OCG)
|
||||
|
||||
Quản lý các Optional Content Group (OCG), thường gọi là "lớp", bên trong PDF. Bạn có thể bật tắt hiển thị lớp, thêm lớp mới (kể cả lớp con lồng nhau), xóa lớp và lưu PDF đã chỉnh sửa.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Nhấp nút xử lý để tải tài liệu bằng engine PyMuPDF.
|
||||
3. Công cụ hiển thị tất cả lớp hiện có cùng trạng thái hiển thị, trạng thái khóa và cấp bậc lồng nhau.
|
||||
4. Bật tắt các hộp kiểm để hiện hoặc ẩn lớp. Lớp bị khóa không thể bật tắt.
|
||||
5. Thêm lớp cấp cao nhất mới bằng cách nhập tên và nhấp nút thêm, hoặc thêm lớp con dưới một lớp cha hiện có.
|
||||
6. Xóa các lớp bạn không còn cần.
|
||||
7. Nhấp **Lưu** để tải xuống PDF đã chỉnh sửa với các thay đổi về lớp.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Hiển thị cấu trúc phân cấp lớp với thụt lề phù hợp cho lớp lồng nhau
|
||||
- Bật hoặc tắt hiển thị lớp
|
||||
- Biểu tượng khóa giúp tránh thay đổi nhầm
|
||||
- Thêm lớp cấp cao nhất hoặc lớp con với tên tùy chỉnh
|
||||
- Xóa từng lớp riêng lẻ
|
||||
- Lưu mọi thay đổi vào một tệp PDF mới
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Bật tắt hiển thị các lớp ghi chú trong bản vẽ kiến trúc hoặc kỹ thuật
|
||||
- Thêm lớp chú thích mới vào tài liệu thiết kế nhiều lớp
|
||||
- Xóa các lớp lỗi thời khỏi mẫu trước khi phân phối
|
||||
- Kiểm tra những lớp nào tồn tại trong một PDF phức tạp nhận từ bên thứ ba
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu PDF không có lớp nào, công cụ hiển thị trạng thái trống kèm gợi ý thêm lớp. Không phải PDF nào cũng dùng lớp OCG, chúng phổ biến nhất trong tệp xuất từ CAD và tệp thiết kế.
|
||||
- Lớp con được thụt lề dưới lớp cha. Bạn có thể lồng lớp ở mọi cấp độ.
|
||||
- Lớp bị khóa hiển thị với biểu tượng khóa và hộp kiểm bị vô hiệu hóa. Các khóa này do người tạo PDF thiết lập.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Xem Metadata](./view-metadata)
|
||||
- [Chỉnh sửa Metadata](./edit-metadata)
|
||||
- [Nhân đôi & Sắp xếp](./organize-pdf)
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Công cụ đa năng PDF
|
||||
description: Trình quản lý trang tất cả trong một để gộp, chia, xoay, nhân đôi, xóa và sắp xếp lại các trang PDF.
|
||||
---
|
||||
|
||||
# Công cụ đa năng PDF
|
||||
|
||||
Không gian làm việc thống nhất cho mọi thao tác ở cấp độ trang PDF. Tải lên một hoặc nhiều PDF và làm việc với tất cả các trang trong một lưới trực quan duy nhất. Xoay, sắp xếp lại, nhân đôi, xóa, chèn PDF mới, thêm trang trống và chia kết quả, tất cả mà không rời khỏi công cụ.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp **Tải lên PDF** hoặc kéo tệp vào vùng tải lên. Hỗ trợ nhiều tệp.
|
||||
2. Tất cả trang từ mọi tệp đã tải lên xuất hiện trong lưới có thể cuộn kèm hình thu nhỏ.
|
||||
3. Dùng thanh công cụ hoặc các nút thao tác trên từng trang để chỉnh sửa trang.
|
||||
4. Chọn trang bằng hộp kiểm trên mỗi thẻ, sau đó áp dụng thao tác hàng loạt.
|
||||
5. Đánh dấu điểm chia bằng biểu tượng cái kéo để chia đầu ra thành các tệp riêng.
|
||||
6. Nhấp **Xuất PDF** để tải xuống kết quả cuối cùng. Nếu có điểm chia, đầu ra là tệp ZIP chứa nhiều PDF.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- **Gộp**: Tải lên nhiều PDF và chúng tự động được kết hợp vào một không gian làm việc
|
||||
- **Sắp xếp lại**: Kéo thả các thẻ trang để thay đổi trình tự
|
||||
- **Xoay**: Xoay từng trang hoặc hàng loạt theo bước 90 độ (trái hoặc phải)
|
||||
- **Nhân đôi**: Sao chép bất kỳ trang nào chỉ với một cú nhấp
|
||||
- **Xóa**: Xóa từng trang hoặc xóa hàng loạt các trang đã chọn
|
||||
- **Chèn PDF**: Thêm PDF mới sau bất kỳ trang cụ thể nào
|
||||
- **Thêm trang trống**: Nối một trang A4 trống vào cuối
|
||||
- **Chia**: Đặt điểm chia giữa các trang, sau đó xuất thành ZIP gồm các PDF riêng
|
||||
- **Chọn tất cả / Bỏ chọn tất cả**: Chọn nhanh cho các thao tác hàng loạt
|
||||
- **Hoàn tác / Làm lại**: Lịch sử hoàn tác/làm lại đầy đủ cho mọi thao tác
|
||||
- **Tải xuống mục đã chọn**: Chỉ xuất các trang đã chọn thành PDF độc lập
|
||||
- Tự động sửa PDF bị hỏng trước khi tải
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tạo tài liệu tùy chỉnh từ các trang của nhiều PDF nguồn
|
||||
- Dọn dẹp tài liệu quét bằng cách xóa trang trống, xoay các bản quét bị nghiêng và sắp xếp lại các phần
|
||||
- Chia PDF lớn tại ranh giới chương bằng điểm chia trực quan
|
||||
- Chỉnh sửa nhanh ở cấp độ trang mà không cần trình chỉnh sửa PDF đầy đủ
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hệ thống hoàn tác/làm lại ghi lại mọi thao tác. Cứ dùng thoải mái, bạn không thể vô tình làm mất công việc của mình.
|
||||
- Điểm chia xuất hiện dưới dạng đường đứt nét màu xanh giữa các trang. Đặt chúng trực quan ở nơi bạn muốn chia tài liệu, rồi xuất để nhận tệp ZIP.
|
||||
- Với các tác vụ gộp hoặc chia đơn giản, các công cụ chuyên dụng [Gộp PDF](./merge-pdf) hoặc [Chia PDF](./split-pdf) có thể nhanh hơn. Công cụ đa năng phát huy tác dụng khi bạn cần nhiều thao tác trong một phiên.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Chia PDF](./split-pdf)
|
||||
- [Nhân đôi & Sắp xếp](./organize-pdf)
|
||||
- [Xoay PDF](./rotate-pdf)
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: PDF sang BMP
|
||||
description: Chuyển đổi các trang PDF thành ảnh BMP không nén. Hữu ích cho hệ thống cũ và quy trình in yêu cầu đầu vào bitmap.
|
||||
---
|
||||
|
||||
# PDF sang BMP
|
||||
|
||||
Chuyển mỗi trang của PDF thành một ảnh BMP (Bitmap). BMP là định dạng không nén, nên đầu ra chính xác đến từng điểm ảnh, không mất chất lượng, nhưng tệp rất lớn.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Nhấp **Chuyển đổi** để xử lý tệp.
|
||||
3. Một tệp `.bmp` hoặc một tệp ZIP sẽ được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Các trang được kết xuất ở tỷ lệ cố định 2x, tạo ra ảnh có kích thước xấp xỉ gấp đôi kích thước gốc của trang PDF.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một trang**: `filename.bmp`
|
||||
- **Nhiều trang**: `filename_bmps.zip` chứa `page_1.bmp`, `page_2.bmp`, v.v.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đưa các trang PDF vào hệ thống hoặc phần cứng cũ chỉ nhận đầu vào BMP.
|
||||
- Chuẩn bị ảnh không nén cho một số quy trình in nhất định.
|
||||
- Dùng đầu ra bitmap làm đầu vào cho các công cụ xử lý ảnh cần dữ liệu điểm ảnh thô.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp BMP rất lớn vì lưu dữ liệu điểm ảnh thô không nén. Với hầu hết mục đích, [PDF sang PNG](./pdf-to-png) cho chất lượng không mất dữ liệu với tệp nhỏ hơn nhiều.
|
||||
- Nếu hệ thống đích chấp nhận PNG hoặc TIFF, hãy ưu tiên các định dạng đó để tiết kiệm dung lượng đĩa.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang TIFF](./pdf-to-tiff)
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
title: PDF sang CBZ
|
||||
description: Chuyển đổi PDF thành tệp CBZ (Comic Book Archive) cho các trình đọc truyện tranh như Komga, Kavita, CDisplayEx và Calibre.
|
||||
---
|
||||
|
||||
# PDF sang CBZ
|
||||
|
||||
Chuyển PDF thành tệp CBZ (Comic Book ZIP), định dạng tiêu chuẩn cho truyện tranh và manga kỹ thuật số. Mỗi trang PDF trở thành một ảnh trong kho lưu trữ. Công cụ tạo metadata ở ba định dạng để tương thích tối đa: ComicInfo.xml, metadata.opf và ComicBookInfo JSON.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Chọn định dạng ảnh, chất lượng, tỷ lệ và metadata tùy chọn.
|
||||
3. Nhấp **Chuyển đổi** để tạo tệp CBZ.
|
||||
4. Tệp `.cbz` được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Giá trị | Mặc định | Mô tả |
|
||||
| ---------------- | --------------- | -------- | ------------------------------------------------------------------------------------- |
|
||||
| Định dạng ảnh | JPEG, PNG, WebP | JPEG | JPEG cho truyện màu, PNG cho manga đen trắng không mất dữ liệu, WebP để nén tốt nhất. |
|
||||
| Chất lượng | 50–100% | 85% | Điều khiển mức nén JPEG/WebP. Ẩn với PNG (luôn không mất dữ liệu). |
|
||||
| Tỷ lệ | 1.0x–4.0x | 2.0x | Tỷ lệ cao hơn cho ảnh sắc nét hơn trên màn hình độ phân giải cao. |
|
||||
| Thang xám | Bật/Tắt | Tắt | Chuyển các trang sang thang xám. Giảm dung lượng tệp với nội dung đen trắng. |
|
||||
| Chế độ manga | Bật/Tắt | Tắt | Đặt hướng đọc từ phải sang trái trong metadata. |
|
||||
| Bao gồm metadata | Bật/Tắt | Bật | Nhúng ComicInfo.xml, metadata.opf và ComicBookInfo JSON. |
|
||||
|
||||
## Trường metadata
|
||||
|
||||
Khi bật metadata, bạn có thể điền:
|
||||
|
||||
- **Tiêu đề**: Tự động lấy từ tên tệp PDF.
|
||||
- **Bộ truyện**: Tên bộ truyện (ví dụ: "Naruto").
|
||||
- **Số (#)**: Số tập trong bộ truyện.
|
||||
- **Quyển (Vol.)**: Số quyển.
|
||||
- **Tác giả**: Tên người viết hoặc người sáng tạo.
|
||||
- **Nhà xuất bản**: Công ty xuất bản.
|
||||
- **Thẻ / Thể loại**: Các thẻ cách nhau bằng dấu phẩy (ví dụ: "Action, Adventure").
|
||||
- **Năm xuất bản**: Năm xuất bản (1900–2100).
|
||||
- **Đánh giá**: Điểm đánh giá cộng đồng từ 0 đến 5.
|
||||
|
||||
## Khả năng tương thích metadata
|
||||
|
||||
Công cụ ghi metadata ở ba định dạng để trình đọc nào cũng tìm thấy:
|
||||
|
||||
| Định dạng | Vị trí | Được hỗ trợ bởi |
|
||||
| ------------------ | -------------------- | ------------------------------------------- |
|
||||
| ComicInfo.xml | Tệp bên trong ZIP | Komga, Kavita, CDisplayEx, Mylar, ComicRack |
|
||||
| metadata.opf | Tệp bên trong ZIP | Calibre |
|
||||
| ComicBookInfo JSON | Trường chú thích ZIP | Calibre (dự phòng) |
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- `filename.cbz`: Kho ZIP chứa các ảnh trang được đánh số và các tệp metadata.
|
||||
|
||||
Ảnh trang được đặt tên bằng số có chữ số 0 đứng đầu (`01.jpg`, `02.jpg`, v.v.) để trình đọc hiển thị đúng thứ tự.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển PDF manga hoặc truyện tranh để dùng với trình đọc truyện tranh.
|
||||
- Xây dựng thư viện truyện tranh kỹ thuật số trong Komga, Kavita hoặc Calibre.
|
||||
- Chuyển truyện tranh quét sang định dạng thân thiện với trình đọc.
|
||||
- Chia sẻ truyện tranh ở định dạng giữ nguyên hướng đọc và metadata.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Dùng **JPEG** cho truyện màu và **PNG** cho manga đen trắng, vì PNG nén nội dung đen trắng rất hiệu quả.
|
||||
- Bật **Thang xám** cho manga để giảm đáng kể dung lượng tệp.
|
||||
- Điền các trường **Bộ truyện** và **Số** để các trình quản lý thư viện (Komga, Calibre) tự động sắp xếp bộ sưu tập của bạn.
|
||||
- **WebP** nén tốt nhất nhưng các trình đọc truyện tranh cũ có thể không hỗ trợ.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang TIFF](./pdf-to-tiff)
|
||||
- [Trích xuất hình ảnh](./extract-images)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: PDF sang CSV
|
||||
description: Trích xuất bảng từ tài liệu PDF và xuất thành một tệp CSV duy nhất. Xử lý PDF nhiều trang với khả năng tự động phát hiện bảng.
|
||||
---
|
||||
|
||||
# PDF sang CSV
|
||||
|
||||
Trích xuất bảng từ PDF và xuất thành tệp CSV. Công cụ quét từng trang để tìm dữ liệu dạng bảng bằng engine phát hiện bảng của PyMuPDF, rồi ghi mọi hàng tìm được vào một đầu ra duy nhất phân tách bằng dấu phẩy.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Nhấp **Chuyển đổi** để bắt đầu trích xuất bảng.
|
||||
3. Công cụ quét từng trang và tự động nhận diện bảng.
|
||||
4. Tệp `.csv` được tải xuống với toàn bộ dữ liệu bảng đã trích xuất.
|
||||
|
||||
Các bảng từ những trang khác nhau được ngăn cách bằng hàng trống trong đầu ra. Các ô chứa dấu phẩy, dấu ngoặc kép hoặc xuống dòng được thoát đúng theo RFC 4180.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Mọi bảng tìm thấy trong tài liệu đều được trích xuất và gộp vào một CSV duy nhất.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- Một tệp `filename.csv` duy nhất chứa tất cả bảng được phát hiện.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Lấy dữ liệu tài chính từ sao kê ngân hàng hoặc hóa đơn PDF vào bảng tính.
|
||||
- Trích xuất bảng giá từ báo giá của nhà cung cấp để so sánh.
|
||||
- Chuyển dữ liệu nghiên cứu dạng bảng từ bài báo PDF sang định dạng phù hợp với công cụ phân tích.
|
||||
- Di chuyển dữ liệu từ báo cáo PDF cũ vào cơ sở dữ liệu.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu không tìm thấy bảng nào, công cụ hiển thị thông báo "Không tìm thấy bảng". Điều này thường có nghĩa là PDF dùng bố cục văn bản trông giống bảng nhưng không được cấu trúc như một bảng thực sự.
|
||||
- Để kiểm soát từng bảng tốt hơn, hãy dùng [Trích xuất bảng PDF](./extract-tables), cho phép chọn giữa đầu ra CSV, JSON và Markdown.
|
||||
- Nếu bạn cần dữ liệu ở định dạng Excel với các trang tính riêng cho từng bảng, hãy dùng [PDF sang Excel](./pdf-to-excel).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Excel](./pdf-to-excel)
|
||||
- [Trích xuất bảng PDF](./extract-tables)
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: PDF sang Excel
|
||||
description: Trích xuất bảng từ tài liệu PDF vào bảng tính Excel. Mỗi bảng có một trang tính riêng kèm tham chiếu trang.
|
||||
---
|
||||
|
||||
# PDF sang Excel
|
||||
|
||||
Trích xuất bảng từ PDF và lưu thành bảng tính Excel (`.xlsx`). Mỗi bảng được phát hiện nằm trên một trang tính riêng, được gắn nhãn bằng số bảng và trang nguồn. Chạy bằng PyMuPDF để phát hiện bảng và thư viện SheetJS để tạo tệp Excel.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Nhấp **Chuyển đổi** để bắt đầu trích xuất bảng.
|
||||
3. Công cụ quét mọi trang để tìm bảng, sau đó tạo sổ làm việc Excel.
|
||||
4. Tệp `.xlsx` được tải xuống với mỗi bảng một trang tính.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Mọi bảng được phát hiện đều được trích xuất tự động.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- Một tệp `filename.xlsx` duy nhất.
|
||||
- **Một bảng**: một trang tính tên "Table".
|
||||
- **Nhiều bảng**: các trang tính tên "Table 1 (Page 3)", "Table 2 (Page 5)", v.v. Tên trang tính bị cắt còn 31 ký tự (giới hạn của Excel).
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển báo cáo tài chính PDF thành bảng tính có thể chỉnh sửa để phân tích thêm.
|
||||
- Trích xuất bảng tồn kho hoặc đơn hàng từ PDF của nhà cung cấp.
|
||||
- Đưa dữ liệu có cấu trúc từ biểu mẫu hoặc catalogue PDF vào Excel để sắp xếp và lọc.
|
||||
- Lưu trữ dữ liệu bảng PDF ở định dạng mà đồng nghiệp không chuyên kỹ thuật có thể sử dụng.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Nếu công cụ báo "Không tìm thấy bảng", PDF có thể dùng bố cục văn bản tự do thay vì bảng có cấu trúc. Hãy thử [PDF sang Văn bản](./pdf-to-text) để lấy nội dung thô.
|
||||
- Để có định dạng phẳng đơn giản hơn, hãy dùng [PDF sang CSV](./pdf-to-csv). Để tải từng bảng ở nhiều định dạng, hãy dùng [Trích xuất bảng PDF](./extract-tables).
|
||||
- Xem tên trang tính để biết mỗi bảng đến từ trang nào.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang CSV](./pdf-to-csv)
|
||||
- [Trích xuất bảng PDF](./extract-tables)
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: PDF sang thang xám
|
||||
description: Chuyển PDF màu thành phiên bản thang xám (đen trắng). Tạo PDF mới với toàn bộ màu sắc bị loại bỏ trên mọi trang.
|
||||
---
|
||||
|
||||
# PDF sang thang xám
|
||||
|
||||
Chuyển PDF màu thành phiên bản thang xám. Mỗi trang được kết xuất, giảm bão hòa màu và nhúng lại dưới dạng ảnh JPEG trong một PDF mới. Đầu ra giữ nguyên kích thước trang gốc.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Nhấp **Chuyển đổi** để xử lý tệp.
|
||||
3. Tệp `greyscale.pdf` mới được tải xuống với tất cả trang đã chuyển sang đen trắng.
|
||||
|
||||
Bên dưới, mỗi trang được kết xuất ở tỷ lệ 2x, dữ liệu điểm ảnh được đưa qua bộ lọc thang xám, sau đó mã hóa lại thành JPEG chất lượng 90% và đặt vào một tài liệu PDF mới.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Việc chuyển sang thang xám dùng công thức độ sáng tiêu chuẩn và chất lượng JPEG cố định ở 90%.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- Một tệp `greyscale.pdf` duy nhất chứa tất cả trang dưới dạng ảnh JPEG thang xám.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuẩn bị tài liệu để in đen trắng nhằm tiết kiệm chi phí mực màu.
|
||||
- Đáp ứng yêu cầu nộp hồ sơ pháp lý hoặc chính phủ bắt buộc dùng thang xám.
|
||||
- Giảm dung lượng tệp của PDF nhiều màu (ảnh JPEG thang xám nhỏ hơn ảnh màu).
|
||||
- Tạo phong cách hình ảnh nhất quán cho tài liệu có cả trang màu và đen trắng.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Vì mỗi trang được rasterize và nhúng lại dưới dạng JPEG, đầu ra dựa trên ảnh. Văn bản trong PDF gốc sẽ không còn chọn hay tìm kiếm được. Nếu cần văn bản có thể tìm kiếm sau đó, hãy chạy đầu ra qua công cụ OCR.
|
||||
- Để kiểm soát chỉnh màu tốt hơn (độ sáng, độ tương phản, độ bão hòa), hãy xem công cụ Điều chỉnh màu sắc hoặc nút Greyscale trong [Trình xây dựng quy trình PDF](./pdf-workflow).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [Trình xây dựng quy trình PDF](./pdf-workflow)
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: PDF sang JPG
|
||||
description: Chuyển đổi các trang PDF thành ảnh JPG với chất lượng có thể điều chỉnh. PDF một trang tải xuống trực tiếp; PDF nhiều trang xuất thành ZIP.
|
||||
---
|
||||
|
||||
# PDF sang JPG
|
||||
|
||||
Chuyển mỗi trang của PDF thành một ảnh JPG. Tài liệu một trang được tải xuống dưới dạng tệp `.jpg` riêng. PDF nhiều trang tạo ra kho ZIP chứa một JPG cho mỗi trang.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó. Công cụ hiển thị tên tệp, dung lượng và số trang.
|
||||
2. Điều chỉnh thanh trượt **Chất lượng** để kiểm soát mức nén JPG.
|
||||
3. Nhấp **Chuyển đổi** để bắt đầu xử lý.
|
||||
4. Kết quả được tải xuống tự động: một JPG cho PDF một trang, hoặc tệp ZIP cho tài liệu nhiều trang.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Chất lượng**: thanh trượt từ 0% đến 100% (mặc định 90%). Giá trị cao hơn cho ảnh sắc nét hơn với dung lượng lớn hơn. Giá trị thấp hơn nén mạnh hơn.
|
||||
|
||||
Các trang được kết xuất nội bộ ở tỷ lệ 2x, nên độ phân giải đầu ra gấp đôi kích thước trang PDF. Một trang cỡ letter tiêu chuẩn tạo ra ảnh khoảng 1.224 x 1.584 điểm ảnh.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một trang**: `filename.jpg`
|
||||
- **Nhiều trang**: `filename_jpgs.zip` chứa `page_1.jpg`, `page_2.jpg`, v.v.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Tạo hình thu nhỏ xem trước cho hệ thống quản lý tài liệu.
|
||||
- Chia sẻ một trang của báo cáo trong chat hoặc email không hỗ trợ PDF.
|
||||
- Tạo tài nguyên hình ảnh từ sơ đồ hoặc minh họa trong PDF.
|
||||
- Lưu trữ tài liệu quét dưới dạng từng ảnh riêng.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Để có đầu ra không mất dữ liệu, hãy dùng [PDF sang PNG](./pdf-to-png).
|
||||
- Mức chất lượng 80-90% cân bằng tốt giữa dung lượng tệp và độ trung thực hình ảnh.
|
||||
- Nếu bạn cần định dạng riêng cho từng trang, hãy cân nhắc [Trình xây dựng quy trình PDF](./pdf-workflow) có nút đầu ra PDF sang hình ảnh.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang WebP](./pdf-to-webp)
|
||||
- [PDF sang BMP](./pdf-to-bmp)
|
||||
- [PDF sang TIFF](./pdf-to-tiff)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: PDF sang JSON
|
||||
description: Chuyển đổi tệp PDF sang định dạng JSON có cấu trúc bằng CPDF. Xuất cấu trúc nội bộ của PDF thành dữ liệu JSON mà máy có thể đọc.
|
||||
---
|
||||
|
||||
# PDF sang JSON
|
||||
|
||||
Chuyển một hoặc nhiều tệp PDF sang định dạng JSON. Công cụ dùng CPDF (Coherent PDF) để tuần tự hóa cấu trúc nội bộ của từng PDF thành biểu diễn JSON mà máy có thể đọc. Đầu ra luôn được giao dưới dạng kho ZIP.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Chọn một hoặc nhiều tệp PDF bằng bộ chọn tệp.
|
||||
2. Nhấp **Chuyển đổi** để bắt đầu xử lý. Việc chuyển đổi chạy trong web worker nền.
|
||||
3. Kho ZIP được tải xuống chứa một tệp JSON cho mỗi PDF đầu vào.
|
||||
|
||||
Thanh trạng thái hiển thị tiến trình qua các giai đoạn chuyển đổi và tạo ZIP.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Mỗi PDF được chuyển thành biểu diễn JSON đầy đủ.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- Tệp `pdfs-to-json.zip` chứa `filename.json` cho mỗi PDF đầu vào.
|
||||
|
||||
Đầu ra JSON biểu diễn cấu trúc đối tượng nội bộ của PDF, bao gồm cây trang, tham chiếu phông chữ, metadata và luồng nội dung.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Kiểm tra cấu trúc nội bộ của PDF để gỡ lỗi hoặc xác thực.
|
||||
- Trích xuất metadata và thuộc tính trang có cấu trúc bằng lập trình.
|
||||
- Đưa dữ liệu cấu trúc PDF vào các quy trình xử lý tùy chỉnh.
|
||||
- Kiểm tra tuân thủ tài liệu PDF bằng cách phân tích cây đối tượng của chúng.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Công cụ này xuất cấu trúc đối tượng PDF thô, không phải nội dung văn bản đã trích xuất. Nếu cần văn bản trang ở định dạng JSON, hãy dùng [Chuẩn bị PDF cho AI](./prepare-pdf-for-ai).
|
||||
- Để trích xuất văn bản thuần, [PDF sang Văn bản](./pdf-to-text) đơn giản hơn.
|
||||
- PDF lớn có cấu trúc phức tạp tạo ra các tệp JSON rất lớn.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
- [Chuẩn bị PDF cho AI](./prepare-pdf-for-ai)
|
||||
- [Trích xuất bảng PDF](./extract-tables)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: PDF sang Markdown
|
||||
description: Chuyển đổi tài liệu PDF sang định dạng Markdown với tùy chọn trích xuất hình ảnh. Hỗ trợ chuyển đổi hàng loạt nhiều tệp.
|
||||
---
|
||||
|
||||
# PDF sang Markdown
|
||||
|
||||
Chuyển tệp PDF sang định dạng Markdown (`.md`), giữ nguyên tiêu đề, đoạn văn, danh sách và định dạng cơ bản. Có thể trích xuất và đưa vào các hình ảnh nhúng. Hỗ trợ chuyển đổi đơn lẻ và hàng loạt. Chạy bằng PyMuPDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Tùy chọn bật **Bao gồm hình ảnh** để nhúng các hình ảnh đã trích xuất vào đầu ra Markdown.
|
||||
3. Nhấp **Chuyển đổi** để bắt đầu xử lý.
|
||||
4. Một tệp được tải xuống dưới dạng `filename.md`. Nhiều tệp tạo ra `markdown-files.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Bao gồm hình ảnh**: khi được chọn, các hình ảnh nhúng trong PDF được trích xuất và tham chiếu trong đầu ra Markdown. Khi bỏ chọn, chỉ nội dung văn bản được chuyển đổi.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một tệp**: `filename.md`
|
||||
- **Nhiều tệp**: `markdown-files.zip` chứa một tệp `.md` cho mỗi PDF đầu vào.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển tài liệu PDF thành Markdown cho trình tạo trang tĩnh như VitePress, Hugo hoặc Jekyll.
|
||||
- Biến các bài nghiên cứu PDF thành Markdown có thể chỉnh sửa cho ứng dụng ghi chú như Obsidian.
|
||||
- Di chuyển kho kiến thức PDF cũ sang định dạng văn bản thân thiện với Git.
|
||||
- Trích xuất nội dung có cấu trúc từ sách điện tử PDF để định dạng lại.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tùy chọn Bao gồm hình ảnh hữu ích khi PDF chứa sơ đồ hoặc hình vẽ thiết yếu với nội dung. Hãy tắt nó với tài liệu nhiều chữ để giữ đầu ra gọn gàng.
|
||||
- Bố cục phức tạp có thanh bên, chú thích cuối trang hoặc văn bản nhiều cột có thể cho Markdown chưa hoàn hảo. Hãy xem lại và chỉnh sửa đầu ra khi cần.
|
||||
- Để lấy văn bản thô không có định dạng, hãy dùng [PDF sang Văn bản](./pdf-to-text).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
- [PDF sang Word](./pdf-to-word)
|
||||
- [Chuẩn bị PDF cho AI](./prepare-pdf-for-ai)
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: PDF sang PDF/A
|
||||
description: Chuyển PDF tiêu chuẩn sang định dạng PDF/A để lưu trữ lâu dài. Hỗ trợ các mức tuân thủ PDF/A-1b, PDF/A-2b và PDF/A-3b.
|
||||
---
|
||||
|
||||
# PDF sang PDF/A
|
||||
|
||||
PDF/A là tập con của PDF được tiêu chuẩn hóa theo ISO, thiết kế cho việc bảo quản kỹ thuật số lâu dài. Công cụ này chuyển PDF tiêu chuẩn của bạn thành tài liệu tuân thủ PDF/A bằng Ghostscript chạy trực tiếp trong trình duyệt.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều tệp PDF.
|
||||
2. Chọn **Phiên bản PDF/A** từ danh sách thả xuống.
|
||||
3. Tùy chọn bật **Làm phẳng PDF trước** cho các tệp phức tạp không chuyển đổi được theo cách thông thường.
|
||||
4. Nhấp **Chuyển đổi sang PDF/A**. Nhiều tệp sẽ tạo ra kho ZIP.
|
||||
|
||||
## Các phiên bản PDF/A
|
||||
|
||||
| Phiên bản | Hạn chế | Phù hợp nhất cho |
|
||||
| ------------ | ----------------------------------------------- | ------------------------------------------ |
|
||||
| **PDF/A-1b** | Nghiêm ngặt nhất. Không trong suốt, không lớp. | Tương thích tối đa với hệ thống lưu trữ cũ |
|
||||
| **PDF/A-2b** | Cho phép trong suốt và JPEG2000. | Lưu trữ đa dụng (khuyến nghị) |
|
||||
| **PDF/A-3b** | Cho phép tệp đính kèm nhúng ở bất kỳ định dạng. | Lưu trữ tài liệu kèm tệp dữ liệu nguồn |
|
||||
|
||||
PDF/A-2b được chọn mặc định và phù hợp với đại đa số nhu cầu lưu trữ.
|
||||
|
||||
## Tùy chọn làm phẳng trước
|
||||
|
||||
Một số PDF chứa tính năng ngăn việc chuyển sang PDF/A suôn sẻ: mã hóa phông chữ bất thường, chồng trong suốt phức tạp hoặc cấu trúc nội bộ bị hỏng. Bật **Làm phẳng trước** sẽ rasterize PDF ở 300 DPI trước khi chuyển đổi, đảm bảo tuân thủ nhưng đổi lại văn bản không còn chọn được. Hãy dùng nó như phương án dự phòng khi chuyển đổi thông thường báo lỗi.
|
||||
|
||||
Làm phẳng trước yêu cầu engine PyMuPDF WASM.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Đáp ứng yêu cầu lưu trữ của chính phủ hoặc pháp lý (nhiều khu vực pháp lý bắt buộc PDF/A cho hồ sơ tòa án)
|
||||
- Nộp tài liệu cho kho lưu trữ của tổ chức hoặc thư viện số
|
||||
- Bảo quản hồ sơ doanh nghiệp khi phần mềm gốc có thể không còn tồn tại sau mười năm
|
||||
- Chuẩn bị hóa đơn cho các tiêu chuẩn hóa đơn điện tử yêu cầu PDF/A-3b kèm tệp XML đính kèm
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hãy thử chuyển đổi không làm phẳng trước. Chỉ bật khi gặp lỗi.
|
||||
- PDF/A nhúng tất cả phông chữ, nên tệp đầu ra thường lớn hơn bản gốc.
|
||||
- Hãy xác thực đầu ra bằng công cụ xác thực PDF/A chuyên dụng nếu quy trình của bạn yêu cầu tuân thủ nghiêm ngặt.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Nén PDF](./compress-pdf): giảm dung lượng tệp sau khi chuyển đổi
|
||||
- [Làm phẳng PDF](./flatten-pdf): làm phẳng biểu mẫu trước khi chuyển sang PDF/A
|
||||
- [Xóa Metadata](./remove-metadata): loại bỏ metadata trước khi lưu trữ
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: PDF sang PNG
|
||||
description: Chuyển đổi các trang PDF thành ảnh PNG không mất dữ liệu với tỷ lệ có thể điều chỉnh. Lý tưởng cho ảnh chụp chất lượng cao và nền trong suốt.
|
||||
---
|
||||
|
||||
# PDF sang PNG
|
||||
|
||||
Chuyển mỗi trang của PDF thành một ảnh PNG. PNG dùng nén không mất dữ liệu, nên đầu ra giữ nguyên mọi chi tiết của trang gốc. PDF một trang được tải xuống dưới dạng tệp `.png`; PDF nhiều trang tạo ra ZIP.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Đặt thanh trượt **Tỷ lệ** để điều khiển độ phân giải đầu ra.
|
||||
3. Nhấp **Chuyển đổi** để bắt đầu xử lý.
|
||||
4. Một PNG hoặc một kho ZIP được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Tỷ lệ**: từ 1.0x đến 3.0x (mặc định 2.0x). Ở 2.0x, một trang cỡ letter tiêu chuẩn được kết xuất khoảng 1.224 x 1.584 điểm ảnh. Tỷ lệ cao hơn cho ảnh lớn và sắc nét hơn, đổi lại dung lượng tệp và thời gian xử lý tăng.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một trang**: `filename.png`
|
||||
- **Nhiều trang**: `filename_pngs.zip` chứa `page_1.png`, `page_2.png`, v.v.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chụp ảnh các trang PDF với độ trung thực cao cho bài thuyết trình.
|
||||
- Trích xuất biểu đồ hoặc sơ đồ cần cạnh sắc nét và không có lỗi nén.
|
||||
- Chuẩn bị tài nguyên thiết kế web từ bản mockup PDF.
|
||||
- Tạo ảnh trang không mất dữ liệu để tiền xử lý OCR.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp PNG lớn hơn JPG đáng kể. Nếu dung lượng quan trọng hơn chất lượng hoàn hảo, hãy dùng [PDF sang JPG](./pdf-to-jpg) hoặc [PDF sang WebP](./pdf-to-webp).
|
||||
- Ở tỷ lệ 1.0x, đầu ra khớp với độ phân giải gốc của PDF. Tăng lên 3.0x để xuất chất lượng in.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
- [PDF sang WebP](./pdf-to-webp)
|
||||
- [PDF sang SVG](./pdf-to-svg)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: PDF sang SVG
|
||||
description: Chuyển đổi các trang PDF thành đồ họa vector SVG co giãn được. Giữ văn bản và hình dạng dưới dạng đường vector để phóng to vô hạn.
|
||||
---
|
||||
|
||||
# PDF sang SVG
|
||||
|
||||
Chuyển mỗi trang của PDF thành một tệp SVG (Scalable Vector Graphics). Khác với các định dạng raster, SVG giữ nguyên đường vector, văn bản và hình dạng nên đầu ra co giãn ở mọi kích thước mà không bị vỡ hạt. Chạy bằng PyMuPDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó. Bạn có thể thêm nhiều tệp và quản lý từng tệp riêng.
|
||||
2. Nhấp **Chuyển đổi** để xử lý tất cả tệp đã tải lên.
|
||||
3. Chuyển đổi một tệp một trang được tải xuống dưới dạng `.svg` riêng. Mọi trường hợp khác được tải xuống dưới dạng kho ZIP.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Mỗi trang được chuyển sang SVG bằng chức năng xuất vector gốc của PyMuPDF.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một tệp, một trang**: `filename.svg`
|
||||
- **Một tệp, nhiều trang**: `filename_svg.zip` chứa `page_1.svg`, `page_2.svg`, v.v.
|
||||
- **Nhiều tệp**: `pdf_to_svg.zip` với các tệp được sắp xếp theo tên tài liệu nguồn.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Trích xuất sơ đồ, biểu đồ hoặc hình minh họa vector từ báo cáo PDF để dùng trên trang web.
|
||||
- Chỉnh sửa nội dung trang PDF trong trình chỉnh sửa vector như Inkscape hoặc Illustrator.
|
||||
- Nhúng bản xem trước trang co giãn được vào ứng dụng web responsive.
|
||||
- Trích xuất logo hoặc đồ họa từ brochure PDF mà vẫn giữ cạnh sắc nét.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- SVG hoạt động tốt nhất với PDF chứa nội dung vector. Tài liệu quét hoặc PDF nhiều ảnh sẽ tạo ra tệp SVG lớn chứa dữ liệu raster nhúng.
|
||||
- Để có đầu ra raster cho PDF nhiều ảnh, hãy dùng [PDF sang PNG](./pdf-to-png) hoặc [PDF sang JPG](./pdf-to-jpg).
|
||||
- Công cụ này hỗ trợ chuyển đổi hàng loạt: tải lên nhiều PDF cùng lúc để chuyển tất cả trong một lần chạy.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
- [PDF sang Markdown](./pdf-to-markdown)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: PDF sang văn bản
|
||||
description: Trích xuất nội dung văn bản thuần từ tệp PDF. Hỗ trợ trích xuất hàng loạt nhiều PDF với đầu ra là tệp TXT.
|
||||
---
|
||||
|
||||
# PDF sang văn bản
|
||||
|
||||
Trích xuất toàn bộ nội dung văn bản từ tệp PDF và lưu thành tệp `.txt` thuần. Hỗ trợ xử lý hàng loạt: tải lên nhiều PDF và trích xuất văn bản của từng tệp trong một thao tác. Chạy bằng PyMuPDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó. Quản lý danh sách tệp bằng các nút Thêm tệp và Xóa hết.
|
||||
2. Nhấp **Trích xuất** để bắt đầu xử lý.
|
||||
3. Một tệp được tải xuống dưới dạng `filename.txt`. Nhiều tệp tạo ra kho `pdf-to-text.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Toàn bộ nội dung văn bản được trích xuất từ mọi trang theo thứ tự đọc.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một tệp**: `filename.txt`
|
||||
- **Nhiều tệp**: `pdf-to-text.zip` chứa một tệp `.txt` cho mỗi PDF đầu vào.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Trích xuất nội dung chính từ báo cáo PDF để lập chỉ mục tìm kiếm toàn văn.
|
||||
- Chuyển sách điện tử hoặc bài viết PDF sang văn bản thuần để đọc trên thiết bị e-ink.
|
||||
- Lấy văn bản từ hợp đồng hoặc tài liệu pháp lý để phân tích từ khóa.
|
||||
- Loại bỏ định dạng khỏi PDF để có văn bản sạch cho các script xử lý dữ liệu.
|
||||
- Chuẩn bị kho ngữ liệu văn bản từ kho lưu trữ PDF cho xử lý ngôn ngữ tự nhiên.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- PDF quét (chỉ có ảnh) sẽ tạo ra tệp văn bản trống vì không có lớp văn bản để trích xuất. Hãy chạy tài liệu quét qua OCR trước.
|
||||
- Đầu ra giữ thứ tự đọc theo cách PyMuPDF diễn giải, thường là từ trái sang phải, từ trên xuống dưới. Bố cục nhiều cột có thể tạo ra văn bản bị xen kẽ.
|
||||
- Để có đầu ra có cấu trúc với tiêu đề và định dạng, hãy thử [PDF sang Markdown](./pdf-to-markdown). Để có JSON có cấu trúc sẵn sàng cho AI, hãy dùng [Chuẩn bị PDF cho AI](./prepare-pdf-for-ai).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Markdown](./pdf-to-markdown)
|
||||
- [Chuẩn bị PDF cho AI](./prepare-pdf-for-ai)
|
||||
- [PDF sang Word](./pdf-to-word)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: PDF sang TIFF
|
||||
description: Chuyển đổi các trang PDF thành ảnh TIFF, thường dùng trong in ấn, fax và lưu trữ. Tự động chuyển sang PNG nếu mã hóa thất bại.
|
||||
---
|
||||
|
||||
# PDF sang TIFF
|
||||
|
||||
Chuyển mỗi trang của PDF thành một ảnh TIFF. TIFF là định dạng tiêu chuẩn cho sản xuất in, hệ thống fax và lưu trữ tài liệu. Công cụ dùng nén PackBits để mã hóa TIFF và chuyển sang PNG nếu một trang mã hóa thất bại.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Nhấp **Chuyển đổi** để xử lý tệp.
|
||||
3. Một tệp TIFF hoặc một kho ZIP được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Các trang được kết xuất ở tỷ lệ cố định 2x.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một trang**: `filename.tiff`
|
||||
- **Nhiều trang**: `filename_tiffs.zip` chứa `page_1.tiff`, `page_2.tiff`, v.v.
|
||||
|
||||
Nếu mã hóa TIFF thất bại ở một trang cụ thể (do vấn đề nén), trang đó sẽ được lưu thành tệp `.png`. Khi đó ZIP sẽ chứa cả tệp TIFF lẫn PNG.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Nộp tài liệu cho cơ quan chính phủ hoặc hệ thống pháp lý yêu cầu định dạng TIFF.
|
||||
- Chuẩn bị các trang để gửi fax qua dịch vụ fax kỹ thuật số.
|
||||
- Lưu trữ tài liệu quét ở định dạng không mất dữ liệu được hỗ trợ rộng rãi.
|
||||
- Đưa các trang vào hệ thống quản lý tài liệu doanh nghiệp.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp TIFF lớn. Nếu bạn chỉ cần chất lượng không mất dữ liệu cho web hoặc màn hình, [PDF sang PNG](./pdf-to-png) là lựa chọn tốt hơn.
|
||||
- Hãy kiểm tra nội dung ZIP nếu một số trang phải dùng PNG dự phòng, bạn có thể muốn chuyển đổi riêng những trang đó.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang BMP](./pdf-to-bmp)
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: PDF sang WebP
|
||||
description: Chuyển đổi các trang PDF thành ảnh WebP với chất lượng có thể điều chỉnh. Dung lượng nhỏ hơn JPG ở chất lượng hình ảnh tương đương.
|
||||
---
|
||||
|
||||
# PDF sang WebP
|
||||
|
||||
Chuyển mỗi trang của PDF thành một ảnh WebP. WebP thường tạo ra tệp nhỏ hơn JPG 25-35% ở cùng chất lượng cảm nhận, là lựa chọn tốt cho web.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Điều chỉnh thanh trượt **Chất lượng**.
|
||||
3. Nhấp **Chuyển đổi** để xử lý tệp.
|
||||
4. Một tệp `.webp` hoặc một kho ZIP được tải xuống tự động.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
- **Chất lượng**: thanh trượt từ 0% đến 100% (mặc định 85%). Điều khiển mức nén có mất dữ liệu. Giá trị cao hơn giữ nhiều chi tiết hơn.
|
||||
|
||||
Các trang được kết xuất nội bộ ở tỷ lệ 2x, tạo ra ảnh có kích thước khoảng gấp đôi kích thước gốc của PDF.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một trang**: `filename.webp`
|
||||
- **Nhiều trang**: `filename_webps.zip` chứa `page_1.webp`, `page_2.webp`, v.v.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuẩn bị bản xem trước trang cho các website cần tiết kiệm băng thông.
|
||||
- Tạo phiên bản ảnh nhẹ của tờ rơi hoặc brochure cho mạng xã hội.
|
||||
- Chuyển hàng loạt tài liệu nhiều trang thành bộ ảnh tối ưu cho web.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- WebP được hỗ trợ trên mọi trình duyệt hiện đại. Để tương thích với hệ thống cũ, hãy dùng [PDF sang JPG](./pdf-to-jpg).
|
||||
- Chất lượng 80-85% thường không thể phân biệt với bản gốc trên màn hình mà vẫn giữ dung lượng nhỏ.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang JPG](./pdf-to-jpg)
|
||||
- [PDF sang PNG](./pdf-to-png)
|
||||
- [PDF sang BMP](./pdf-to-bmp)
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: PDF sang Word
|
||||
description: Chuyển đổi tệp PDF thành tài liệu Word (DOCX) có thể chỉnh sửa. Hỗ trợ chuyển đổi hàng loạt nhiều PDF cùng lúc.
|
||||
---
|
||||
|
||||
# PDF sang Word
|
||||
|
||||
Chuyển tệp PDF thành tài liệu Word (`.docx`) có thể chỉnh sửa. Công cụ dùng PyMuPDF để dựng lại nội dung tài liệu, giữ nguyên văn bản, định dạng cơ bản và bố cục. Hỗ trợ chuyển đổi đơn lẻ và hàng loạt.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó. Bạn có thể thêm tệp hoặc xóa từng tệp khỏi danh sách.
|
||||
2. Nhấp **Chuyển đổi** để bắt đầu xử lý.
|
||||
3. Một tệp được tải xuống dưới dạng `filename.docx`. Nhiều tệp được đóng gói thành `converted-documents.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Mỗi PDF được chuyển sang DOCX bằng engine chuyển đổi tích hợp của PyMuPDF.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một tệp**: `filename.docx`
|
||||
- **Nhiều tệp**: `converted-documents.zip` chứa một tệp `.docx` cho mỗi PDF đầu vào.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chỉnh sửa văn bản trong PDF bạn nhận được và cần sửa đổi.
|
||||
- Chuyển báo cáo PDF lưu trữ sang định dạng mà đồng nghiệp có thể chỉnh sửa trong Microsoft Word hoặc Google Docs.
|
||||
- Đưa nội dung từ hợp đồng hoặc đề xuất PDF vào Word để chỉnh sửa có theo dõi.
|
||||
- Di chuyển tài liệu PDF cũ sang định dạng có thể chỉnh sửa.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Bố cục phức tạp với văn bản nhiều cột, biểu mẫu nhúng hoặc nhiều đồ họa có thể không chuyển đổi hoàn hảo. Hãy xem lại đầu ra và chỉnh định dạng trong trình soạn thảo văn bản của bạn.
|
||||
- PDF quét (chỉ có ảnh) sẽ tạo ra tệp DOCX trống hoặc rất ít nội dung. Hãy chạy chúng qua OCR trước để thêm lớp văn bản.
|
||||
- Chế độ hàng loạt hiệu quả để chuyển cả thư mục PDF: tải lên tất cả cùng lúc.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
- [PDF sang Markdown](./pdf-to-markdown)
|
||||
- [Trình xây dựng quy trình PDF](./pdf-workflow)
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: PDF sang ZIP
|
||||
description: Đóng gói nhiều tệp PDF thành một kho ZIP duy nhất để dễ chia sẻ và lưu trữ.
|
||||
---
|
||||
|
||||
# PDF sang ZIP
|
||||
|
||||
Gói nhiều tệp PDF thành một kho ZIP duy nhất. Đây là công cụ đóng gói đơn giản, không chuyển đổi, nén hay sửa đổi bản thân các PDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên nhiều tệp PDF bằng vùng thả.
|
||||
2. Xem lại danh sách tệp. Xóa những tệp bạn không muốn đưa vào.
|
||||
3. Nhấp nút xử lý.
|
||||
4. Kho ZIP chứa tất cả PDF đã tải lên được tải xuống ngay lập tức.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Nhận số lượng tệp PDF bất kỳ
|
||||
- Xóa từng tệp trước khi tạo kho
|
||||
- Giữ nguyên tên tệp gốc bên trong ZIP
|
||||
- Không sửa đổi nội dung PDF, các tệp được đóng gói nguyên trạng
|
||||
- Hiển thị tên và dung lượng của từng PDF đã tải lên
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Gói một bộ hóa đơn hoặc biên lai để đính kèm email
|
||||
- Đóng gói sản phẩm bàn giao của dự án (nhiều báo cáo PDF) để chuyển giao
|
||||
- Tạo một tệp tải xuống duy nhất cho tập hợp biểu mẫu hoặc mẫu
|
||||
- Lưu trữ một loạt tài liệu vào một tệp nén
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Tệp ZIP dùng tên tệp PDF gốc. Nếu có các tệp trùng tên, hãy đổi tên trước khi tải lên để tránh xung đột.
|
||||
- Công cụ này không nén bản thân các PDF. Để giảm dung lượng tệp, hãy chạy chúng qua Nén PDF trước, rồi đóng gói bằng công cụ này.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Gộp PDF](./merge-pdf)
|
||||
- [Chia PDF](./split-pdf)
|
||||
- [Nén PDF](./compress-pdf)
|
||||
@@ -0,0 +1,95 @@
|
||||
---
|
||||
title: Trình xây dựng quy trình PDF
|
||||
description: Xây dựng quy trình xử lý PDF tùy chỉnh một cách trực quan bằng cách nối các nút trên canvas. Kết hợp các thao tác như gộp, nén, watermark và xuất.
|
||||
---
|
||||
|
||||
# Trình xây dựng quy trình PDF
|
||||
|
||||
Trình xây dựng quy trình cho phép bạn nối nhiều thao tác PDF thành một quy trình tự động duy nhất. Thay vì chạy từng công cụ một, bạn nối một đồ thị trực quan gồm các nút (đầu vào, xử lý, đầu ra) và thực thi tất cả chỉ với một cú nhấp. Tệp của bạn không bao giờ rời khỏi trình duyệt.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
Giao diện chia thành ba bảng: **hộp công cụ nút** ở bên trái, **canvas** ở giữa và **bảng cài đặt** ở bên phải xuất hiện khi bạn chọn một nút.
|
||||
|
||||
1. **Thêm nút** bằng cách nhấp vào chúng ở thanh bên trái, hoặc kéo trực tiếp lên canvas. Dùng thanh tìm kiếm ở đầu hộp công cụ để lọc theo tên.
|
||||
2. **Nối các nút** bằng cách kéo từ ổ cắm đầu ra (cuối nút) tới ổ cắm đầu vào (đầu nút khác). Kết nối chạy từ trên xuống dưới.
|
||||
3. **Cấu hình cài đặt** bằng cách nhấp vào một nút để mở bảng cài đặt ở bên phải. Mỗi loại nút có tùy chọn riêng (phạm vi trang, thanh trượt chất lượng, mật khẩu, v.v.).
|
||||
4. **Chạy quy trình** bằng cách nhấp nút **Chạy** trên thanh công cụ. Engine thực thi các nút theo thứ tự tô-pô, xử lý lần lượt từng nút. Thanh trạng thái ở dưới cùng theo dõi tiến trình.
|
||||
5. **Tải xuống kết quả**: nút Tải xuống cuối cùng lưu PDF kết quả (hoặc ZIP nếu tạo ra nhiều tệp).
|
||||
|
||||
## Các nhóm nút
|
||||
|
||||
Các nút được tổ chức thành sáu nhóm, mỗi nhóm có màu riêng trên canvas:
|
||||
|
||||
- **Đầu vào** (xanh dương): Nhập PDF, Đầu vào hình ảnh, Word/Excel/PowerPoint sang PDF và hơn 15 bộ chuyển đổi định dạng khác đưa tệp vào quy trình.
|
||||
- **Chỉnh sửa & Chú thích** (chàm): Cắt PDF, PDF sang thang xám, Đảo ngược màu, Thêm Watermark, Số trang, Đầu trang & Chân trang, Hiệu ứng máy quét, Điều chỉnh màu sắc, Màu nền, Xóa trang trống, Xóa ghi chú.
|
||||
- **Sắp xếp & Quản lý** (tím): Gộp PDF, Chia PDF, Trích xuất trang, Xoay PDF, Xóa trang, Đảo ngược trang, Thêm trang trống, Chia trang, N-Up PDF, Sửa kích thước trang, Kết hợp thành một trang, Sách nhỏ PDF, Chia PDF thành poster, Chỉnh sửa Metadata, Mục lục, OCR PDF.
|
||||
- **Tối ưu & Sửa chữa** (hổ phách): Nén PDF, Raster hóa PDF, Tuyến tính hóa PDF, Chỉnh nghiêng PDF, PDF sang PDF/A, Phông chữ thành đường viền, Sửa chữa PDF.
|
||||
- **Bảo mật PDF** (hồng): Mã hóa, Giải mã, Làm sạch PDF, Làm phẳng PDF, Ký số, Che nội dung.
|
||||
- **Đầu ra** (xanh mòng két): Tải xuống (tự động nhận biết một PDF hay ZIP), PDF sang hình ảnh, PDF sang văn bản, PDF sang DOCX, PDF sang XLSX, PDF sang CSV, PDF sang SVG, PDF sang Markdown, Trích xuất hình ảnh.
|
||||
|
||||
## Lưu và tải quy trình
|
||||
|
||||
Thanh công cụ cung cấp bốn tùy chọn lưu trữ:
|
||||
|
||||
- **Lưu**: lưu quy trình hiện tại thành mẫu có tên trong bộ nhớ cục bộ của trình duyệt. Bạn có thể lưu nhiều mẫu.
|
||||
- **Tải**: mở hộp thoại liệt kê tất cả mẫu đã lưu. Nhấp Tải để khôi phục một mẫu, hoặc xóa những mẫu bạn không còn cần.
|
||||
- **Xuất**: tải quy trình xuống dưới dạng tệp `.json` để bạn chia sẻ hoặc sao lưu.
|
||||
- **Nhập**: tải tệp quy trình `.json` từ ổ đĩa, khôi phục toàn bộ nút, vị trí và kết nối.
|
||||
|
||||
Các mẫu được giữ lại qua các phiên trong bộ nhớ cục bộ. Tệp JSON đã xuất có thể chuyển giữa các trình duyệt và máy.
|
||||
|
||||
## Mô hình thực thi
|
||||
|
||||
Engine xây dựng đồ thị phụ thuộc từ các kết nối của bạn và thực thi các nút theo thứ tự tô-pô. Nếu một nút thất bại, quá trình thực thi dừng lại và nút lỗi được đánh dấu màu đỏ. Một vài quy tắc cần nhớ:
|
||||
|
||||
- Mọi quy trình cần ít nhất một nút **Đầu vào** và một nút **Đầu ra**.
|
||||
- Engine phát hiện phụ thuộc vòng và chặn thực thi kèm thông báo lỗi.
|
||||
- Nút **Mã hóa** phải là bước xử lý cuối cùng trước nút đầu ra. Đặt nó sớm hơn sẽ gây cảnh báo xác thực vì các nút phía sau không thể xử lý dữ liệu đã mã hóa.
|
||||
- PDF được bảo vệ bằng mật khẩu sẽ yêu cầu nhập mật khẩu trong lúc thực thi.
|
||||
- Hỗ trợ đầu vào nhiều PDF: nút Gộp PDF có thể kết hợp chúng, hoặc các nút xử lý hàng loạt sẽ xử lý từng PDF riêng.
|
||||
|
||||
## Các loại ổ cắm
|
||||
|
||||
Kết nối dùng ổ cắm có kiểu để ngăn nối sai:
|
||||
|
||||
- **PDF** (chàm): một tài liệu PDF.
|
||||
- **MultiPDF** (hổ phách): nhiều tài liệu PDF được gộp lại.
|
||||
- **Image** (xanh lá): một blob hình ảnh.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Mỗi nút có cấu hình riêng, truy cập qua bảng cài đặt bên phải. Một số mẫu thường gặp:
|
||||
|
||||
- **Phạm vi trang** ở các nút Chia PDF, Trích xuất trang, Xóa trang
|
||||
- **Thanh trượt chất lượng** ở các nút đầu ra chuyển đổi hình ảnh
|
||||
- **Trường mật khẩu** ở các nút Mã hóa và Giải mã
|
||||
- **Ô nhập văn bản** cho Thêm Watermark, Đầu trang & Chân trang, Chỉnh sửa Metadata
|
||||
- **Góc xoay** ở nút Xoay PDF
|
||||
- **Mức nén** ở nút Nén PDF
|
||||
- **Chọn ngôn ngữ OCR** ở nút OCR PDF
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- **Quy trình xử lý hóa đơn**: Nhập PDF -> OCR PDF -> Trích xuất bảng PDF -> Tải xuống dưới dạng CSV.
|
||||
- **Chuẩn hóa báo cáo**: Word sang PDF -> Sửa kích thước trang -> Số trang -> Thêm Watermark -> Nén PDF -> Tải xuống.
|
||||
- **Chuẩn bị lưu trữ**: Nhập PDF -> Sửa chữa PDF -> Làm phẳng PDF -> Làm sạch PDF -> PDF sang PDF/A -> Tải xuống.
|
||||
- **Trích xuất hình ảnh hàng loạt**: Nhập PDF (nhiều tệp) -> Trích xuất hình ảnh -> Tải xuống ZIP.
|
||||
- **Sách nhỏ sẵn sàng in**: Nhập PDF -> Sách nhỏ PDF -> Cắt PDF -> Nén PDF -> Tải xuống.
|
||||
- **Phân phối an toàn**: Nhập PDF -> Che nội dung -> Xóa ghi chú -> Mã hóa -> Tải xuống.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Dùng **Delete** hoặc **Backspace** để xóa nút đang chọn khỏi canvas.
|
||||
- Nhấp nút **X** trên thanh trạng thái của nút để xóa nó trực tiếp.
|
||||
- Kéo canvas bằng cách nhấp và kéo trên vùng trống. Con trỏ đổi thành biểu tượng bàn tay nắm khi kéo.
|
||||
- Trên di động, dùng nút **+** trên thanh công cụ để bật tắt hộp công cụ nút.
|
||||
- Nếu quy trình tạo ra nhiều tệp đầu ra, nút Tải xuống tự động gói chúng thành ZIP.
|
||||
- Hãy bắt đầu đơn giản: xây dựng và thử quy trình hai nút trước khi thêm độ phức tạp.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
- [PDF sang Excel](./pdf-to-excel)
|
||||
- [Trích xuất hình ảnh](./extract-images)
|
||||
- [PDF sang Markdown](./pdf-to-markdown)
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: PNG sang PDF
|
||||
description: Chuyển một hoặc nhiều ảnh PNG thành tài liệu PDF với chất lượng có thể điều chỉnh, hoàn toàn trong trình duyệt của bạn.
|
||||
---
|
||||
|
||||
# PNG sang PDF
|
||||
|
||||
Chuyển ảnh PNG sang PDF mà vẫn giữ nguyên độ phân giải gốc. Mỗi PNG trở thành một trang riêng, có kích thước khớp với kích thước ảnh gốc. Độ trong suốt được xử lý tự động.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :-------- | :----------- |
|
||||
| PNG | `.png` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp PNG. Bạn có thể chọn nhiều tệp cùng lúc.
|
||||
2. Quản lý danh sách tệp: xóa tệp không cần hoặc thêm tệp.
|
||||
3. Chọn mức **Chất lượng PDF** từ danh sách thả xuống.
|
||||
4. Nhấp **Chuyển đổi sang PDF**. Đầu ra được tải xuống với tên `from_jpgs.pdf`.
|
||||
|
||||
Công cụ dùng pdf-lib để nhúng trực tiếp từng ảnh. Nếu một PNG không thể nhúng gốc (ví dụ do hồ sơ màu bất thường), công cụ sẽ chuyển sang kết xuất lại qua canvas dưới dạng JPEG.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
**Chất lượng PDF** điều khiển mức nén áp dụng trước khi nhúng:
|
||||
|
||||
- **Chất lượng cao**: nén tối thiểu, dung lượng lớn nhất.
|
||||
- **Chất lượng trung bình** (mặc định): cân bằng tốt giữa dung lượng và độ rõ nét.
|
||||
- **Chất lượng thấp**: nén tối đa, đầu ra nhỏ nhất.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển ảnh chụp màn hình thành PDF nhiều trang cho báo cáo lỗi hoặc tài liệu
|
||||
- Đóng gói các bản xuất thiết kế UI thành một tệp để xem xét
|
||||
- Biến bản xuất sơ đồ (draw.io, Excalidraw) thành PDF có thể chia sẻ
|
||||
- Tập hợp một bộ ảnh biểu đồ thành báo cáo
|
||||
|
||||
## Mẹo
|
||||
|
||||
- PNG có độ trong suốt sẽ có nền trắng trong PDF. Nếu cần nền khác, hãy chỉnh sửa ảnh trước.
|
||||
- Với ảnh chụp màn hình và sơ đồ có cạnh sắc nét và văn bản, chất lượng Cao tránh được lỗi nén JPEG. Chất lượng Trung bình hoặc Thấp có thể chuyển sang JPEG nội bộ.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
- [JPG sang PDF](./jpg-to-pdf)
|
||||
- [SVG sang PDF](./svg-to-pdf)
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Chia PDF thành poster
|
||||
description: Chia các trang PDF thành lưới các trang nhỏ hơn để in khổ lớn trên nhiều tờ giấy.
|
||||
---
|
||||
|
||||
# Chia PDF thành poster
|
||||
|
||||
Chia mỗi trang của PDF thành một lưới các trang con nhỏ hơn. Đây là công cụ dùng để in một trang trên nhiều tờ giấy, sau đó ghép các tờ lại với nhau thành áp phích hoặc băng rôn cỡ lớn.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Đặt số **hàng** và **cột** để xác định lưới (ví dụ: 2 hàng x 2 cột chia mỗi trang thành 4 trang con).
|
||||
3. Tùy chọn chỉ định phạm vi trang để giới hạn những trang được posterize.
|
||||
4. Canvas xem trước hiển thị lớp phủ lưới trên trang hiện tại để bạn hình dung các đường cắt.
|
||||
5. Chuyển qua lại giữa các trang để kiểm tra lớp phủ trên từng trang.
|
||||
6. Nhấp vào nút xử lý. Mỗi ô lưới trở thành một trang riêng trong PDF đầu ra.
|
||||
|
||||
## Tính năng
|
||||
|
||||
- Số hàng và số cột có thể cấu hình, cho kích thước lưới linh hoạt
|
||||
- Xem trước trực tiếp với lớp phủ lưới cho thấy chính xác nơi các trang sẽ được chia
|
||||
- Bộ lọc phạm vi trang để chỉ posterize các trang cụ thể
|
||||
- Điều hướng từng trang trong phần xem trước
|
||||
- Ảnh chụp trang được lưu đệm để chuyển trang xem trước nhanh
|
||||
- Các đường lưới đỏ nét đứt đánh dấu rõ ranh giới cắt
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
| Tùy chọn | Mô tả |
|
||||
| ----------------- | ------------------------------------------------- |
|
||||
| **Hàng** | Số phần chia ngang (mặc định: 1) |
|
||||
| **Cột** | Số phần chia dọc (mặc định: 1) |
|
||||
| **Phạm vi trang** | Các trang cần posterize (để trống = tất cả trang) |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- In PDF cỡ áp phích trên các tờ A4 hoặc Letter tiêu chuẩn để ghép lên tường
|
||||
- Tạo băng rôn lớn từ một thiết kế PDF một trang
|
||||
- Chia các bản vẽ kỹ thuật quá khổ thành các mảnh có thể in
|
||||
- In khổ lớn mà không cần máy in khổ rộng
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Lưới 2x2 biến một trang thành 4 trang. Lưới 3x3 biến một trang thành 9. Hãy lập kế hoạch lưới dựa trên kích thước bạn muốn cho thành phẩm sau khi ghép.
|
||||
- Lớp phủ xem trước giúp bạn kiểm tra nội dung quan trọng không nằm trên đường cắt. Hãy điều chỉnh số hàng/cột nếu cần.
|
||||
- Để thực hiện thao tác ngược lại (xếp nhiều trang lên một tờ), hãy dùng [N-Up PDF](./n-up-pdf).
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [N-Up PDF](./n-up-pdf)
|
||||
- [Chia trang](./divide-pages)
|
||||
- [Chia PDF](./split-pdf)
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: PowerPoint sang PDF
|
||||
description: Chuyển đổi bản trình bày PowerPoint (PPT, PPTX) và tệp ODP sang PDF với định dạng slide được giữ nguyên.
|
||||
---
|
||||
|
||||
# PowerPoint sang PDF
|
||||
|
||||
Chuyển đổi tệp bản trình bày sang PDF. Mỗi slide trở thành một trang trong tài liệu đầu ra, với văn bản, hình ảnh, hình khối và hiệu ứng chuyển cảnh được hiển thị bằng engine LibreOffice chạy trong trình duyệt. Hỗ trợ cả định dạng PowerPoint hiện đại lẫn cũ, cùng định dạng OpenDocument Presentation.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng |
|
||||
| :------------------------ | :----------- |
|
||||
| PowerPoint (hiện đại) | `.pptx` |
|
||||
| PowerPoint (cũ) | `.ppt` |
|
||||
| OpenDocument Presentation | `.odp` |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp bản trình bày của bạn.
|
||||
2. Xem lại danh sách tệp. Thêm hoặc xóa tệp nếu cần.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Engine LibreOffice được tải ở lần dùng đầu tiên, sau đó chuyển đổi từng tệp.
|
||||
4. Một tệp duy nhất được tải xuống trực tiếp dưới dạng PDF. Nhiều tệp được đóng gói vào `powerpoint-converted.zip`.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có cài đặt bổ sung. Các slide được hiển thị ở kích thước gốc.
|
||||
|
||||
## Đầu ra
|
||||
|
||||
| Số tệp đầu vào | Đầu ra |
|
||||
| :------------- | :------------------------------------------------------------ |
|
||||
| 1 tệp | Tải xuống một PDF (tên tệp gốc với phần mở rộng `.pdf`) |
|
||||
| 2 tệp trở lên | Tệp ZIP (`powerpoint-converted.zip`) chứa một PDF cho mỗi tệp |
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuyển bản trình bày sang PDF trước khi chia sẻ với khán giả có thể không có PowerPoint
|
||||
- Tạo bản tài liệu in được từ bộ slide cho hội nghị hoặc hội thảo
|
||||
- Lưu trữ bản trình bày ở định dạng hiển thị giống hệt trên mọi thiết bị
|
||||
- Chuyển đổi hàng loạt thư viện bản trình bày ODP từ LibreOffice Impress sang PDF
|
||||
- Tạo phiên bản PDF của bộ slide giới thiệu để đính kèm email
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Hiệu ứng động và chuyển cảnh của slide không được thể hiện trong PDF. Mỗi slide được ghi lại thành một trang tĩnh.
|
||||
- Video nhúng sẽ không xuất hiện trong đầu ra. Hãy thay bằng ảnh chụp màn hình hoặc hình giữ chỗ nếu cần.
|
||||
- Ghi chú của người trình bày không có trong bản xuất PDF mặc định. Nếu cần ghi chú, hãy cân nhắc xuất từ chế độ xem "Print Notes" gốc của PowerPoint trước.
|
||||
- Engine LibreOffice được lưu đệm sau lần tải đầu, nên chuyển đổi bản trình bày thứ hai trong cùng phiên sẽ nhanh hơn nhiều.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Word sang PDF](./word-to-pdf)
|
||||
- [Excel sang PDF](./excel-to-pdf)
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: Chuẩn bị PDF cho AI
|
||||
description: Trích xuất nội dung PDF thành JSON có cấu trúc, tối ưu cho LLM và các pipeline AI như LlamaIndex. Hỗ trợ xử lý hàng loạt.
|
||||
---
|
||||
|
||||
# Chuẩn bị PDF cho AI
|
||||
|
||||
Trích xuất nội dung từ các tệp PDF và cấu trúc hóa thành JSON, tối ưu để đưa vào các mô hình ngôn ngữ lớn (LLM) và các framework AI như LlamaIndex. Nội dung của từng trang được trích xuất và sắp xếp theo định dạng có cấu trúc, sẵn sàng cho pipeline RAG, chatbot hoặc hệ thống tìm kiếm ngữ nghĩa.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một hoặc nhiều PDF bằng cách nhấp vào vùng thả hoặc kéo tệp vào đó.
|
||||
2. Nhấp **Trích xuất** để bắt đầu xử lý.
|
||||
3. Một tệp được tải xuống dưới dạng `filename_llm.json`. Nhiều tệp tạo ra tệp nén `pdf-for-ai.zip`.
|
||||
|
||||
Công cụ dùng tích hợp LlamaIndex của PyMuPDF để trích xuất nội dung theo từng trang kèm metadata, tạo ra đầu ra có thể nạp trực tiếp vào các framework AI.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Công cụ này không có tùy chọn cấu hình. Tất cả các trang được trích xuất với đầy đủ văn bản và metadata.
|
||||
|
||||
## Định dạng đầu ra
|
||||
|
||||
- **Một tệp**: `filename_llm.json`
|
||||
- **Nhiều tệp**: `pdf-for-ai.zip` chứa một tệp `_llm.json` cho mỗi PDF đầu vào.
|
||||
|
||||
Đầu ra JSON tuân theo schema tài liệu của LlamaIndex với nội dung văn bản của từng trang và các trường metadata.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Chuẩn bị tài liệu PDF cho các pipeline retrieval-augmented generation (RAG).
|
||||
- Xây dựng cơ sở tri thức có thể tìm kiếm từ kho PDF cho chatbot AI.
|
||||
- Đưa các báo cáo PDF vào quy trình phân tích dựa trên LLM.
|
||||
- Tiền xử lý bài báo nghiên cứu cho các hệ thống tìm kiếm ngữ nghĩa và hỏi đáp.
|
||||
- Tạo dữ liệu huấn luyện có cấu trúc từ các bộ sưu tập tài liệu PDF.
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Để trích xuất văn bản thuần không có định dạng dành riêng cho AI, hãy dùng [PDF sang Văn bản](./pdf-to-text).
|
||||
- Để có đầu ra Markdown giữ nguyên tiêu đề và cấu trúc, hãy dùng [PDF sang Markdown](./pdf-to-markdown).
|
||||
- PDF được quét sẽ cho đầu ra trống hoặc rất ít. Hãy chạy OCR trước để thêm lớp văn bản rồi mới trích xuất.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [PDF sang Văn bản](./pdf-to-text)
|
||||
- [PDF sang Markdown](./pdf-to-markdown)
|
||||
- [PDF sang JSON](./pdf-to-json)
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: Bảo vệ PDF
|
||||
description: Bảo vệ tệp PDF bằng mật khẩu với mã hóa AES 256-bit. Đặt mật khẩu người dùng và chủ sở hữu cùng các hạn chế sử dụng có thể cấu hình.
|
||||
---
|
||||
|
||||
# Bảo vệ PDF
|
||||
|
||||
Khóa PDF của bạn bằng mật khẩu để chỉ những người được ủy quyền mới mở được. BentoPDF dùng mã hóa AES 256-bit, cùng tiêu chuẩn mà ngân hàng và cơ quan chính phủ sử dụng, và được áp dụng hoàn toàn trong trình duyệt của bạn thông qua QPDF.
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Tải lên một tệp PDF.
|
||||
2. Nhập **Mật khẩu người dùng** (bắt buộc). Đây là mật khẩu mọi người cần để mở tệp.
|
||||
3. Tùy chọn nhập **Mật khẩu chủ sở hữu**. Khi được đặt, PDF sẽ có các hạn chế sử dụng ngăn việc in, chỉnh sửa, sao chép và ghi chú.
|
||||
4. Nhấp **Mã hóa PDF**.
|
||||
5. Tải xuống tệp đã mã hóa.
|
||||
|
||||
## Các loại mật khẩu
|
||||
|
||||
### Mật khẩu người dùng (bắt buộc)
|
||||
|
||||
Mật khẩu người dùng là thứ người nhận nhập để mở PDF. Không có nó, tài liệu hoàn toàn không thể truy cập. Mọi PDF được mã hóa đều phải có một mật khẩu này.
|
||||
|
||||
### Mật khẩu chủ sở hữu (tùy chọn)
|
||||
|
||||
Mật khẩu chủ sở hữu kiểm soát những gì người dùng được ủy quyền có thể làm sau khi mở tệp. Khi bạn đặt một mật khẩu chủ sở hữu khác biệt, BentoPDF tự động áp dụng bộ hạn chế nghiêm ngặt nhất:
|
||||
|
||||
- Tắt chỉnh sửa
|
||||
- Tắt trích xuất/sao chép
|
||||
- Tắt in
|
||||
- Tắt ghi chú
|
||||
- Tắt điền biểu mẫu
|
||||
- Tắt lắp ráp tài liệu
|
||||
|
||||
Nếu bạn để trống mật khẩu chủ sở hữu, PDF vẫn được mã hóa (vẫn cần mật khẩu người dùng để mở) nhưng không có hạn chế sử dụng sau khi mở.
|
||||
|
||||
## Chi tiết mã hóa
|
||||
|
||||
- **Thuật toán**: AES-256 (Advanced Encryption Standard 256-bit)
|
||||
- **Độ dài khóa**: 256 bit
|
||||
- **Tiêu chuẩn**: Mã hóa PDF 2.0 (triển khai của QPDF)
|
||||
|
||||
Với công nghệ hiện nay, việc dò AES-256 bằng vét cạn là không khả thi về mặt tính toán. Độ bảo mật của PDF đã mã hóa phụ thuộc hoàn toàn vào độ mạnh của mật khẩu.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Bảo vệ các báo cáo tài chính mật trước khi gửi qua email
|
||||
- Bảo mật tài liệu pháp lý chia sẻ với luật sư phía đối tác
|
||||
- Thêm mật khẩu cho hồ sơ y tế hoặc thông tin nhận dạng cá nhân
|
||||
- Phân phối nội dung trả phí (sách điện tử, báo cáo) có kiểm soát truy cập
|
||||
- Tuân thủ các chính sách bảo vệ dữ liệu yêu cầu mã hóa khi lưu trữ
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Dùng mật khẩu mạnh và duy nhất. Cụm mật khẩu từ 12 ký tự trở lên gồm chữ hoa, chữ thường, số và ký hiệu là lý tưởng.
|
||||
- Chia sẻ mật khẩu qua một kênh riêng (điện thoại, tin nhắn), đừng bao giờ gửi cùng email với PDF.
|
||||
- Nếu bạn chỉ cần hạn chế các hành động (không in, không sao chép) mà không yêu cầu mật khẩu để mở, hãy dùng công cụ Thay đổi quyền.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Giải mã PDF](./unlock-pdf): gỡ mã hóa khi bạn biết mật khẩu
|
||||
- [Thay đổi quyền](./change-permissions): sửa các hạn chế sử dụng cụ thể
|
||||
- [Xóa hạn chế](./remove-restrictions): loại bỏ toàn bộ bảo mật khỏi PDF
|
||||
- [Làm sạch PDF](./sanitize-pdf): xóa nội dung ẩn trước khi mã hóa
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: PSD sang PDF
|
||||
description: Chuyển đổi tệp Photoshop (PSD) sang PDF ngay trong trình duyệt. Miễn phí, riêng tư, không cần phần mềm Adobe.
|
||||
---
|
||||
|
||||
# PSD sang PDF
|
||||
|
||||
Chuyển đổi tệp Adobe Photoshop PSD thành tài liệu PDF. PSD là định dạng gốc của Photoshop, và thông thường để mở nó cần phần mềm Adobe đắt tiền. Công cụ này hiển thị ảnh tổng hợp đã làm phẳng của tệp PSD thành một trang PDF với độ phân giải đầy đủ.
|
||||
|
||||
## Định dạng được hỗ trợ
|
||||
|
||||
| Định dạng | Phần mở rộng | Ghi chú |
|
||||
| :-------------- | :----------- | :--------------------------------- |
|
||||
| Adobe Photoshop | `.psd` | Hiển thị ảnh tổng hợp đã làm phẳng |
|
||||
|
||||
## Cách hoạt động
|
||||
|
||||
1. Nhấp vào vùng tải lên hoặc kéo và thả các tệp PSD của bạn. Hỗ trợ nhiều tệp.
|
||||
2. Xem lại danh sách tệp. Xóa tệp không muốn bằng biểu tượng thùng rác, hoặc dùng **Thêm tệp** để bổ sung.
|
||||
3. Nhấp **Chuyển đổi sang PDF**. Engine PyMuPDF đọc tệp PSD và nhúng ảnh tổng hợp vào một trang PDF ở độ phân giải gốc.
|
||||
4. Một tệp PSD tạo ra một PDF. Khi bạn tải lên nhiều tệp PSD, chúng được gộp thành một PDF nhiều trang duy nhất tên `psd_to_pdf.pdf`, mỗi PSD là một trang.
|
||||
|
||||
## Tùy chọn
|
||||
|
||||
Không cần cài đặt. Bộ chuyển đổi dùng dữ liệu ảnh đã làm phẳng từ tệp PSD.
|
||||
|
||||
## Trường hợp sử dụng
|
||||
|
||||
- Xem trước thiết kế Photoshop mà không cần mở Photoshop
|
||||
- Gửi bản duyệt thiết kế cho khách hàng không có Adobe Creative Suite
|
||||
- In tác phẩm độ phân giải cao từ tệp PSD
|
||||
- Tạo hồ sơ năng lực PDF từ nhiều tệp thiết kế PSD, mỗi tệp trở thành một trang trong một tài liệu
|
||||
|
||||
## Mẹo
|
||||
|
||||
- Quá trình chuyển đổi hiển thị chế độ xem tổng hợp (đã làm phẳng) của PSD. Các layer riêng lẻ, layer điều chỉnh và hiệu ứng layer không được giữ lại như các thành phần riêng trong PDF.
|
||||
- Nhiều tệp PSD được gộp thành một PDF nhiều trang thay vì các PDF riêng lẻ. Điều này hữu ích khi xây dựng hồ sơ năng lực hoặc lookbook.
|
||||
- Tệp PSD có độ phân giải rất cao (tệp in 300+ DPI) sẽ tạo ra PDF lớn. Công cụ giữ nguyên toàn bộ độ phân giải.
|
||||
|
||||
## Công cụ liên quan
|
||||
|
||||
- [Hình ảnh sang PDF](./image-to-pdf)
|
||||
- [PNG sang PDF](./png-to-pdf)
|
||||
- [VSD sang 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
Reference in new issue
Block a user