Bạn đang gặp lỗi "File 'Roboto-Regular.ttf' not found in virtual file system" khi sử dụng pdfMake? Đừng lo lắng! Bài viết này sẽ cung cấp cho bạn các giải pháp chi tiết và dễ hiểu để khắc phục vấn đề này, bất kể bạn đang sử dụng Webpack, Gulp hay CDN. Chúng tôi sẽ đi sâu vào nguyên nhân gây ra lỗi và hướng dẫn bạn từng bước để đảm bảo pdfMake hoạt động trơn tru.
Lỗi này thường xảy ra khi pdfMake không tìm thấy font chữ Roboto-Regular.ttf trong hệ thống tệp ảo (virtual file system). Điều này có thể do một số nguyên nhân sau:
vfs_fonts.js
: File này chứa các font chữ mặc định mà pdfMake sử dụng.vfs_fonts.js
phải được include *sau* pdfmake.min.js
.vfs_fonts.js
đúng cách.Dưới đây là các giải pháp bạn có thể thử, tùy thuộc vào cấu hình dự án của bạn:
Nếu bạn đang sử dụng pdfMake thông qua CDN, hãy đảm bảo bạn đã include cả pdfmake.min.js
và vfs_fonts.js
theo đúng thứ tự:
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.71/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.71/vfs_fonts.js"></script>
**Quan trọng:** Luôn include vfs_fonts.js
*sau* pdfmake.min.js
.
Nếu bạn đang sử dụng Webpack, có một vài cách để đảm bảo vfs_fonts.js
được bundle đúng cách:
pdfmake.min.js
và vfs_fonts.js
từ thư mục node_modules
vào thư mục build của bạn.
// webpack.config.js
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
// ...
plugins: [
new CopyWebpackPlugin({
patterns: [
{ from: 'node_modules/pdfmake/build/pdfmake.min.js', to: 'pdfmake.min.js' },
{ from: 'node_modules/pdfmake/build/vfs_fonts.js', to: 'vfs_fonts.js' }
]
})
]
};
Sau đó, include các file này trong HTML của bạn:
<script src="/pdfmake.min.js"></script>
<script src="/vfs_fonts.js"></script>
import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
pdfMake.vfs = pdfFonts.pdfMake.vfs;
window.pdfMake = pdfMake; // Nếu cần thiết
Tương tự như Webpack, bạn có thể sử dụng Gulp để copy file vfs_fonts.js
vào thư mục build:
// gulpfile.js
const gulp = require('gulp');
const concat = require('gulp-concat');
gulp.task('pdfmake', () => {
return gulp.src([
'node_modules/pdfmake/build/pdfmake.min.js',
'node_modules/pdfmake/build/vfs_fonts.js'
])
.pipe(concat('pdfmake.bundle.js'))
.pipe(gulp.dest('dist/js'));
});
Sau đó, include pdfmake.bundle.js
trong HTML của bạn.
Đôi khi, trình duyệt có thể cache phiên bản cũ của vfs_fonts.js
. Hãy thử xóa cache trình duyệt và tải lại trang.
Đảm bảo rằng các đường dẫn đến pdfmake.min.js
và vfs_fonts.js
trong HTML và cấu hình build của bạn là chính xác. Kiểm tra xem có bất kỳ lỗi chính tả hoặc sai sót nào không.
Nếu bạn muốn sử dụng font chữ tùy chỉnh thay vì Roboto, bạn cần thực hiện các bước sau:
pdfMake.addFonts({
MyCustomFont: {
normal: 'MyCustomFont-Regular.ttf',
bold: 'MyCustomFont-Bold.ttf',
italics: 'MyCustomFont-Italic.ttf',
bolditalics: 'MyCustomFont-BoldItalic.ttf'
}
});
var docDefinition = {
content: [
{ text: 'Hello, PDF!', style: 'header' }
],
styles: {
header: {
font: 'MyCustomFont',
fontSize: 22,
bold: true
}
},
defaultStyle: {
font: 'MyCustomFont'
}
};
Lỗi "File 'Roboto-Regular.ttf' not found" trong pdfMake thường do thiếu file vfs_fonts.js
hoặc include sai thứ tự. Bằng cách làm theo các hướng dẫn trên, bạn có thể dễ dàng khắc phục vấn đề này và tiếp tục tạo ra các file PDF chất lượng cao. Nếu bạn vẫn gặp khó khăn, hãy kiểm tra kỹ cấu hình dự án của bạn và đảm bảo rằng tất cả các file cần thiết đều được include đúng cách.
Bài viết liên quan