PDF hoạt động như thế nào? Cấu trúc header, body, xref — tại sao khó edit
Giải thích cấu trúc file PDF: header, body, cross-reference table, trailer. Tại sao edit PDF khó hơn Word.
Chắc bạn từng thắc mắc: sửa file Word thì dễ, thêm 1 chữ vào giữa câu là text tự xuống dòng. Nhưng sửa PDF thì cực — thêm 1 chữ có khi tràn ra ngoài khung, xóa 1 đoạn thì để lại khoảng trống. Tại sao lại thế?
Lý do ngắn gọn: PDF không phải document để soạn thảo — nó là bản in điện tử. Mỗi ký tự được "đặt" vào tọa độ cố định trên trang, giống như dán sticker lên giấy. Không có "flow", không có "đoạn văn", không có "xuống dòng tự động".
Hiểu điều này, bạn sẽ đặt đúng kỳ vọng khi dùng tool PDF — và biết khi nào nên dùng tool nào.
PDF ra đời để làm gì?
Adobe tạo PDF năm 1993. Mục tiêu duy nhất: file mở ra phải trông giống hệt nhau trên mọi máy. Không phụ thuộc hệ điều hành, không phụ thuộc font cài sẵn, không phụ thuộc phần mềm mở.
Để đảm bảo "giống hệt", PDF lưu vị trí chính xác của từng ký tự trên trang — tọa độ (x, y), font, size, màu. Giống bạn dùng Photoshop đặt từng chữ lên canvas, chứ không phải gõ text trong Word.
Hệ quả:
- Hiển thị luôn giống nhau → tuyệt vời cho chia sẻ, in ấn
- Chỉnh sửa rất khó → vì không có "text flow"
- Mỗi element độc lập → ghép/cắt trang nhanh, nhưng sửa nội dung chậm
Bên trong file PDF có gì?
Mở 1 file PDF nhỏ bằng Notepad++ (thử đi, mở được), bạn sẽ thấy 4 phần:
1. Header — dòng đầu tiên
%PDF-1.7
Chỉ vậy thôi. Nói cho máy biết "đây là file PDF, version 1.7". Đa số file hiện nay là 1.4 đến 1.7. Version 2.0 tồn tại nhưng hiếm gặp ngoài đời.
2. Body — phần to nhất
Tất cả nội dung nằm ở đây: text, ảnh, font, bookmark, form. Mỗi thứ là 1 "object" được đánh số:
5 0 obj
<<
/Type /Page
/MediaBox [0 0 595 842]
/Contents 6 0 R
>>
endobj
Đoạn trên là 1 trang PDF — kích thước 595×842 points (= A4). Nội dung trang nằm ở object số 6 (cái 6 0 R là "reference" — trỏ sang object khác).
Và nội dung trang trông kiểu thế này:
BT
/F1 12 Tf
100 700 Td
(Xin chao) Tj
ET
Dịch ra: "Dùng font F1 size 12, đặt con trỏ ở tọa độ (100, 700), vẽ chữ 'Xin chao'". Không có line break, không có paragraph — chỉ có tọa độ và ký tự.
Chính vì thế, khi tool "edit PDF" thêm 1 chữ — nó phải tính toán tọa độ, chứ không thể "chèn vào giữa câu" như Word.
3. Cross-reference table (xref)
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000058 00000 n
...
Bảng tra cứu: object nào ở byte thứ mấy trong file. Giống mục lục cuối sách — PDF viewer đọc cái này trước, rồi nhảy thẳng đến object cần hiển thị. Không cần đọc từ đầu đến cuối.
Nhờ xref mà bạn mở file 500 trang vẫn nhanh — viewer chỉ load trang đang xem, không parse toàn bộ file.
4. Trailer — cuối file
trailer
<< /Size 8 /Root 1 0 R >>
startxref
1234
%%EOF
Trỏ đến: gốc của toàn bộ cây document và vị trí xref. Fun fact: PDF viewer đọc file từ cuối lên — tìm %%EOF trước, rồi nhảy đến trailer, rồi xref, rồi mới render trang.
Tại sao edit PDF khó — so với Word
| Thao tác | Trong Word | Trong PDF |
|---|---|---|
| Thêm 1 chữ vào giữa câu | Gõ → text tự reflow | Phải dời tất cả ký tự sau sang phải (tọa độ mới). Nếu tràn dòng → phải tính lại toàn bộ trang |
| Xóa 1 đoạn | Delete → đoạn dưới dồn lên | Xóa objects → để lại khoảng trống (vì elements khác vẫn giữ tọa độ cũ) |
| Đổi font | Select → đổi tên font | Phải embed font mới vào file, map lại glyph, tính lại width từng ký tự (vì font khác nhau có width khác nhau) |
| Thêm 1 trang | Page break tự động | Tạo page object mới + thêm vào page tree + rebuild xref. Nhưng thao tác này lại dễ vì không cần đọc nội dung |
Quy tắc: Thao tác ở cấp "trang" (ghép, cắt, xoay) → dễ, nhanh. Thao tác ở cấp "nội dung bên trong trang" (sửa text, di chuyển ảnh) → khó, chậm, dễ lỗi.
Các tool PDF xử lý ở mức nào?
Mức 1: Thao tác trang — dễ nhất
Ghép, cắt, xoay, sắp xếp. Chỉ cần thay đổi page tree — thêm/bớt/đổi thứ tự page objects. Không cần đọc nội dung bên trong trang.
Vì đơn giản → chạy được bằng JavaScript trên trình duyệt (AloPDF dùng pdf-lib cho nhóm này). Nhanh, an toàn, file không đi đâu.
Mức 2: Thêm layer mới — trung bình
Watermark, số trang, annotation. "Vẽ thêm" lên trên trang hiện tại — không sửa gì bên dưới. Giống dán sticker lên bức tranh.
Cũng chạy client-side được. Watermark = overlay text object với opacity thấp. Số trang = thêm text object ở header/footer.
Mức 3: Nén, chuyển đổi — cần engine server
Nén PDF cần re-encode ảnh (Ghostscript). Convert sang Word cần nhận dạng structure (LibreOffice). Convert sang JPG cần render pixel (Poppler).
Những thứ này JavaScript không làm nổi (hoặc làm rất chậm) → phải server-side.
Mức 4: OCR — phức tạp nhất
File scan chỉ có ảnh, không có text object. OCR phải: extract ảnh → pre-process → nhận dạng ký tự → tạo invisible text layer đặt đúng vị trí → rebuild PDF.
Tốn thời gian nhất, dễ sai nhất (phụ thuộc chất lượng scan). Dùng Tesseract engine.
Mấy thứ "ẩn" trong PDF mà ít người biết
- Metadata: Tên người tạo, tên máy tính, phần mềm tạo, ngày giờ. Mình từng gửi proposal cho khách — metadata ghi tên đối tác khác (vì copy từ file cũ). Hơi kỳ.
- Revision history: Khi bạn edit PDF rồi save, bản cũ vẫn nằm trong file (incremental save). Người có tool phù hợp có thể "undo" để xem nội dung bạn đã xóa.
- Embedded files: PDF có thể chứa file đính kèm bên trong (attachments). Đôi khi file nặng bất thường là vì có attachment ẩn.
Tip: Trước khi gửi file quan trọng cho bên ngoài — export lại thành PDF mới (File → Print → Save as PDF). File mới sẽ "sạch" metadata và history.
Tóm lại — quy tắc khi làm việc với PDF
- Giữ file nguồn (Word/Excel/InDesign). PDF là output cuối — không phải file để sửa đi sửa lại.
- Ghép/cắt/xoay thì cứ thoải mái. Nhanh, không ảnh hưởng chất lượng, chạy trên trình duyệt.
- Cần sửa nội dung nhiều → convert sang Word trước. Sửa xong export lại PDF. Đừng cố edit trực tiếp trong PDF — sẽ lệch layout.
- File từ scan = file ảnh. Không có text searchable. Cần OCR để "thêm" text vào.
- Nén ảnh hưởng ảnh, không ảnh hưởng text. File toàn text → nén mạnh thoải mái.
Muốn kiểm chứng? Mở 1 file PDF nhỏ bằng VS Code hoặc Notepad++. Tìm %PDF- ở đầu, %%EOF ở cuối, và xref ở giữa. Đếm số lần xuất hiện obj — đó là số objects trong file. Khá thú vị khi nhìn "bên trong" lần đầu.
Dùng ngay: Chỉnh sửa PDF — Thêm văn bản, ghi chú vào file PDF
Chỉnh sửa file PDF online miễn phí. Thêm chữ, ghi chú, chú thích vào PDF không cần phần mềm. Xử lý 100% trên trình duyệt, hỗ trợ tiếng Việt có dấu — bảo mật tuyệt đối.
Mở công cụ →