pdfkit not finding font files on Gatsby
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript
- Lĩnh vực
- build-system
Hướng nghiên cứu
Bắt đầu với node_modules/pdfkit/js/pdfkit.es.js và thư mục dữ liệu, sau đó tái hiện lỗi thiếu Helvetica.afm khi Gatsby gọi các APIs từ .cache/functions. So sánh việc tải phông chữ tiêu chuẩn và hồ sơ màu trong diff được báo cáo, đồng thời xác minh rằng việc tạo PDF hoạt động cả trong các hàm đã lưu vào bộ nhớ đệm của Gatsby lẫn trong cách sử dụng thông thường.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
On Gatsby 5.14.1 I'm seeing an issue with pdfkit 0.16.0 unable to load font files.
Error: ENOENT: no such file or directory, open '/project-home/.cache/functions/data/Helvetica.afm'
at Object.readFileSync (node:fs:442:20)
at Object.Helvetica (webpack://project-home/./node_modules/pdfkit/js/pdfkit.es.js?:2563:54)
at new StandardFont (webpack://project-home/./node_modules/pdfkit/js/pdfkit.es.js?:2599:54)
at PDFFontFactory.open (webpack://project-home/./node_modules/pdfkit/js/pdfkit.es.js?:2899:16)
at PDFDocument.font (webpack://project-home/./node_modules/pdfkit/js/pdfkit.es.js?:2976:33)
at PDFDocument.initFonts (webpack://project-home/./node_modules/pdfkit/js/pdfkit.es.js?:2941:12)
at new PDFDocument (webpack://project-home/./node_modules/pdfkit/js/pdfkit.es.js?:5638:10)
Here is the diff that solved my problem:
diff --git a/node_modules/pdfkit/js/pdfkit.es.js b/node_modules/pdfkit/js/pdfkit.es.js
index ffc8097..3bb682b 100644
--- a/node_modules/pdfkit/js/pdfkit.es.js
+++ b/node_modules/pdfkit/js/pdfkit.es.js
@@ -2526,49 +2526,55 @@ class PDFFont {
}
}
+//**************************************************************************************
+// Lance, 25 Feb 2025 -- changed this in pdfkit.es.js to solve missing font files
+// when Gatsby invokes APIs from .cache/functions
+// __dirname resolves to .cache/functions but font files are missing in there
+//**************************************************************************************
+const HACK_DIR = process.cwd() + '/node_modules/pdfkit/js';
+
// This insanity is so bundlers can inline the font files
const STANDARD_FONTS = {
Courier() {
- return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Courier.afm', 'utf8');
},
'Courier-Bold'() {
- return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Courier-Bold.afm', 'utf8');
},
'Courier-Oblique'() {
- return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Courier-Oblique.afm', 'utf8');
},
'Courier-BoldOblique'() {
- return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Courier-BoldOblique.afm', 'utf8');
},
Helvetica() {
- return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Helvetica.afm', 'utf8');
},
'Helvetica-Bold'() {
- return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Helvetica-Bold.afm', 'utf8');
},
'Helvetica-Oblique'() {
- return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Helvetica-Oblique.afm', 'utf8');
},
'Helvetica-BoldOblique'() {
- return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Helvetica-BoldOblique.afm', 'utf8');
},
'Times-Roman'() {
- return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Times-Roman.afm', 'utf8');
},
'Times-Bold'() {
- return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Times-Bold.afm', 'utf8');
},
'Times-Italic'() {
- return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Times-Italic.afm', 'utf8');
},
'Times-BoldItalic'() {
- return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Times-BoldItalic.afm', 'utf8');
},
Symbol() {
- return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/Symbol.afm', 'utf8');
},
ZapfDingbats() {
- return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');
+ return fs.readFileSync(HACK_DIR + '/data/ZapfDingbats.afm', 'utf8');
}
};
class StandardFont extends PDFFont {
@@ -5362,7 +5368,7 @@ var PDFA = {
this._addColorOutputIntent();
},
_addColorOutputIntent() {
- const iccProfile = fs.readFileSync(`${__dirname}/data/sRGB_IEC61966_2_1.icc`);
+ const iccProfile = fs.readFileSync(`${HACK_DIR}/data/sRGB_IEC61966_2_1.icc`); /* added by Lance, 25 Feb 2025 */
const colorProfileRef = this.ref({
Length: iccProfile.length,
N: 3
This issue body was partially generated by patch-package.
- Ngôn ngữ chính
- JavaScript
- Star
- 10.7k
- Fork
- 1.2k
- Merge trung bình
- 21 giờ 41 phút
- Pull request đã merge (30 ngày)
- 27
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của foliojs/pdfkit
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
foliojs/pdfkit#1804 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
PDFKit crashes when providing fonts as Buffer in tableCó thể đã có người làm @ykw9263 đã nhận 131 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
foliojs/pdfkit#1743 · 13 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
foliojs/pdfkit#1635 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Get detailed font metricsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
foliojs/pdfkit#1512 · 1 bình luận · 2 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Upgrade codemirrorĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của foliojs/pdfkit
Issue tương tự
-
[ordering-review] workshop order graph: 1 confirmed ordering problem, 3 cycles are false positivesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
githubnext/gh-aw-workshop#5331 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Remove: 21 SexturyĐang mởchannels:remove check:passed
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 4 ngày
-
[vika] console keeps a stale "in progress" turn after a daemon restart mid-runCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
volcengine/OpenViking#7011 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
__VERSION__ within dist build is not replaced, causes missing version in XDM implementation detailsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Issue: ready for confirmation Reported on 2.4.9 Triage: Dev.Experience
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
magento/magento2#41773 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày