Chuyển Đổi PDF Sang Word DOCX Bằng Node.js
Hướng dẫn chuyển đổi tài liệu PDF thành file Word DOCX có thể chỉnh sửa bằng Node.js và LibreOffice headless. Code mẫu hoàn chỉnh và file test.
Chuyển đổi tài liệu PDF sang tệp Microsoft Word (.docx) có thể chỉnh sửa là yêu cầu phổ biến trong các cổng pháp lý, nền tảng xem xét hợp đồng và hệ thống quản lý tài liệu. Vì PDF về cơ bản là định dạng hiển thị (xác định tọa độ glyph tuyệt đối) chứ không phải cấu trúc ngữ nghĩa, việc chuyển đổi đòi hỏi tái cấu trúc.
Các Phương Pháp Chuyển Đổi Trong Node.js
- LibreOffice Headless (Tự lưu trữ): Độ trung thực cao, chuyển đổi bảng phức tạp và bố cục qua dòng lệnh.
- Cloud Converter API (ConvertAPI, CloudConvert): Không cần bảo trì, xử lý OCR và văn bản được rasterize.
- pdf2docx (Python bridge qua Node child_process): Chất lượng cao cho tài liệu vector và bảng biểu.
Tải file PDF mẫu 10MB để kiểm thử pipeline chuyển đổi PDF sang DOCX của bạn.
Tải File Mẫu 10MB PDF →Sử Dụng Headless LibreOffice Với Node.js
Chạy LibreOffice ở chế độ headless trong Docker container cung cấp khả năng chuyển đổi tài liệu miễn phí, đáng tin cậy:
import { exec } from 'child_process';
import util from 'util';
import path from 'path';
import fs from 'fs';
const execPromise = util.promisify(exec);
export async function convertPdfToDocx(inputPdfPath: string, outputDir: string): Promise<string> {
if (!fs.existsSync(inputPdfPath)) {
throw new Error('Tệp PDF đầu vào không tồn tại.');
}
// soffice là tên thực thi cho LibreOffice
const cmd = `soffice --headless --convert-to docx "${inputPdfPath}" --outdir "${outputDir}"`;
console.log('Đang thực thi chuyển đổi:', cmd);
const { stdout, stderr } = await execPromise(cmd);
if (stderr && !stderr.includes('Warning')) {
console.warn('Cảnh báo LibreOffice:', stderr);
}
const baseName = path.basename(inputPdfPath, path.extname(inputPdfPath));
const expectedOutputPath = path.join(outputDir, `${baseName}.docx`);
if (!fs.existsSync(expectedOutputPath)) {
throw new Error('Chuyển đổi hoàn tất nhưng tệp DOCX đầu ra không được tạo.');
}
return expectedOutputPath;
}
Các Thách Thức Chuyển Đổi Chính
- Font nhúng: Thiếu font hệ thống có thể gây ra lỗi chồng chữ và reflow. Cài đặt Microsoft Core Fonts chuẩn (
msttcorefonts) trên host Linux/Docker của bạn. - Trang được quét: PDF chỉ chứa ảnh raster đòi hỏi bước Nhận dạng Ký tự Quang học (OCR) bằng Tesseract trước khi chuyển đổi.
Nguyễn Đại Long
Tác GiảBackend Lead • Chuyên gia Kiến trúc Hệ thống Phân tán & Lưu trữ Đám mây
Hơn 4 năm kinh nghiệm thiết kế các hệ thống xử lý tệp tải lên thông lượng lớn, tối ưu hóa cơ sở dữ liệu và hạ tầng phân tán Cloudflare R2 / AWS S3. Người sáng lập FileDummy và Mạng lưới Hệ sinh thái NDL.
Bài viết này có hữu ích không?
Bấm Thích để ủng hộ tác giả và giúp bài viết lan tỏa tới cộng đồng lập trình viên.
Thảo Luận Kỹ Thuật & Đóng Góp Ý Kiến (0)
Chia sẻ kết quả benchmark, phản hồi các trường hợp biên hoặc đặt câu hỏi chuyên môn.
Chưa có bình luận nào. Hãy là lập trình viên đầu tiên bắt đầu cuộc thảo luận!
Câu Hỏi Thường Gặp (FAQ)
Why is PDF to DOCX conversion difficult?▾
PDF is a fixed-layout format storing glyphs at absolute coordinates with no concept of paragraphs or flowing text. Converting to DOCX requires reconstructing document structure from raw coordinates, which is inherently imperfect for complex layouts.
What is the best free tool for PDF to DOCX in Node.js?▾
LibreOffice in headless mode (libreoffice --headless --convert-to docx) is the most reliable free option. Call it from Node.js using child_process.exec(). For better accuracy, Adobe PDF Services and Aspose.Words offer commercial Node.js SDKs.
Can I convert a scanned PDF to DOCX in Node.js?▾
Scanned PDFs need OCR first. Use Tesseract.js (open source) or Google Cloud Vision / AWS Textract. After OCR, reconstruct the text as DOCX using the docx library.