Skip to content
This repository was archived by the owner on Apr 12, 2021. It is now read-only.

Commit 705476b

Browse files
committed
Use base64 version of standard fonts
1 parent 2c39e83 commit 705476b

6 files changed

Lines changed: 144 additions & 25 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ demo/bundle.js
99
*.html
1010
!demo/browser.html
1111
dist
12+
*.b64.afm

package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,27 @@
1515
},
1616
"scripts": {
1717
"build": "rollup -c",
18-
"prepublish": "npm run build"
18+
"prepublish": "npm run build",
19+
"prebuild": "node ./src/font/data/compressData.js",
20+
"postbuild": "rimraf ./src/font/data/*.b64.afm"
1921
},
2022
"files": [
2123
"dist"
2224
],
2325
"dependencies": {
2426
"@react-pdf/fontkit": "^1.11.0",
25-
"@react-pdf/png-js": "^1.0.0"
27+
"@react-pdf/png-js": "^1.0.0",
28+
"lz-string": "^1.4.4"
2629
},
2730
"devDependencies": {
2831
"babel-plugin-external-helpers": "^6.22.0",
2932
"babel-preset-es2015": "^6.24.1",
3033
"blob-stream": "^0.1.2",
3134
"iconv-lite": "^0.4.13",
35+
"rimraf": "^2.6.2",
3236
"rollup": "^0.52.2",
3337
"rollup-plugin-babel": "^2.7.1",
38+
"rollup-plugin-bundle-size": "https://github.com/vimeo/rollup-plugin-bundle-size",
3439
"rollup-plugin-ignore": "^1.0.3",
3540
"rollup-plugin-json": "^2.1.0",
3641
"rollup-plugin-node-resolve": "^2.0.0",

rollup.config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import babel from 'rollup-plugin-babel';
22
import json from 'rollup-plugin-json';
33
import nodeResolve from 'rollup-plugin-node-resolve';
4+
import bundleSize from 'rollup-plugin-bundle-size';
45
import uglify from 'rollup-plugin-uglify';
56
import string from 'rollup-plugin-string';
67
import replace from 'rollup-plugin-replace'
@@ -30,7 +31,8 @@ const configBase = {
3031
presets: [['es2015', { modules: false }]],
3132
plugins: ['external-helpers'],
3233
runtimeHelpers: true
33-
})
34+
}),
35+
bundleSize(),
3436
],
3537
external: Object.keys(pkg.dependencies)
3638
}

src/font/data/compressData.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const fs = require('fs');
2+
const LZString = require('lz-string');
3+
4+
var decimalToHex = function(d) {
5+
var hex = Number(d).toString(16);
6+
var padding = 2;
7+
8+
while (hex.length < padding) {
9+
hex = `0` + hex;
10+
}
11+
12+
return hex;
13+
};
14+
15+
var arrayToString = function(acc, value) {
16+
return acc + decimalToHex(value);
17+
}
18+
19+
fs.readdir(__dirname, function(err, files) {
20+
files.forEach(function(file) {
21+
if (file.match(/.afm$/)) {
22+
const fontName = file.substring(0, file.length - 4);
23+
const data = fs.readFileSync(__dirname + '/' + file, "utf8");
24+
const compressed = LZString.compressToBase64(data);
25+
26+
fs.writeFileSync(__dirname + '/' + fontName + '.b64.afm', compressed);
27+
}
28+
});
29+
});

src/font/standard.js

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
1+
import LZString from 'lz-string';
12
import AFMFont from './afm';
2-
import Courier from './data/Courier.afm';
3-
import CourierBold from './data/Courier-Bold.afm';
4-
import CourierOblique from './data/Courier-Oblique.afm';
5-
import Helvetica from './data/Helvetica.afm';
6-
import HelveticaBold from './data/Helvetica-Bold.afm';
7-
import HelveticaOblique from './data/Helvetica-Oblique.afm';
8-
import TimesRoman from './data/Times-Roman.afm';
9-
import TimesBold from './data/Times-Bold.afm';
10-
import TimesItalic from './data/Times-Italic.afm';
3+
import Courier from './data/Courier.b64.afm';
4+
import CourierBold from './data/Courier-Bold.b64.afm';
5+
import CourierOblique from './data/Courier-Oblique.b64.afm';
6+
import Helvetica from './data/Helvetica.b64.afm';
7+
import HelveticaBold from './data/Helvetica-Bold.b64.afm';
8+
import HelveticaOblique from './data/Helvetica-Oblique.b64.afm';
9+
import TimesRoman from './data/Times-Roman.b64.afm';
10+
import TimesBold from './data/Times-Bold.b64.afm';
11+
import TimesItalic from './data/Times-Italic.b64.afm';
1112

1213
const STANDARD_FONTS = {
13-
Courier: Courier,
14-
'Courier-Bold': CourierBold,
15-
'Courier-Oblique': CourierOblique,
16-
Helvetica: Helvetica,
17-
'Helvetica-Bold': HelveticaBold,
18-
'Helvetica-Oblique': HelveticaOblique,
19-
'Times-Roman': TimesRoman,
20-
'Times-Bold': TimesBold,
21-
'Times-Italic': TimesItalic,
14+
Courier: LZString.decompressFromBase64(Courier),
15+
'Courier-Bold': LZString.decompressFromBase64(CourierBold),
16+
'Courier-Oblique': LZString.decompressFromBase64(CourierOblique),
17+
Helvetica: LZString.decompressFromBase64(Helvetica),
18+
'Helvetica-Bold': LZString.decompressFromBase64(HelveticaBold),
19+
'Helvetica-Oblique': LZString.decompressFromBase64(HelveticaOblique),
20+
'Times-Roman': LZString.decompressFromBase64(TimesRoman),
21+
'Times-Bold': LZString.decompressFromBase64(TimesBold),
22+
'Times-Italic': LZString.decompressFromBase64(TimesItalic),
2223
};
2324

2425
const createStandardFont = PDFFont => (

yarn.lock

Lines changed: 85 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ builtin-modules@^1.1.0:
553553
version "1.1.1"
554554
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
555555

556-
chalk@^1.1.3:
556+
chalk@^1.0.0, chalk@^1.1.3:
557557
version "1.1.3"
558558
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
559559
dependencies:
@@ -632,7 +632,11 @@ duplexer2@~0.1.4:
632632
dependencies:
633633
readable-stream "^2.0.2"
634634

635-
escape-string-regexp@^1.0.2:
635+
duplexer@^0.1.1:
636+
version "0.1.1"
637+
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
638+
639+
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
636640
version "1.0.5"
637641
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
638642

@@ -720,6 +724,13 @@ fast-levenshtein@~2.0.4:
720724
version "2.0.6"
721725
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
722726

727+
figures@^1.0.1:
728+
version "1.7.0"
729+
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
730+
dependencies:
731+
escape-string-regexp "^1.0.5"
732+
object-assign "^4.1.0"
733+
723734
filename-regex@^2.0.0:
724735
version "2.0.1"
725736
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
@@ -748,6 +759,10 @@ foreach@^2.0.5:
748759
version "2.0.5"
749760
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
750761

762+
fs.realpath@^1.0.0:
763+
version "1.0.0"
764+
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
765+
751766
function-bind@^1.0.2:
752767
version "1.1.1"
753768
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -765,10 +780,27 @@ glob-parent@^2.0.0:
765780
dependencies:
766781
is-glob "^2.0.0"
767782

783+
glob@^7.0.5:
784+
version "7.1.2"
785+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
786+
dependencies:
787+
fs.realpath "^1.0.0"
788+
inflight "^1.0.4"
789+
inherits "2"
790+
minimatch "^3.0.4"
791+
once "^1.3.0"
792+
path-is-absolute "^1.0.0"
793+
768794
globals@^9.18.0:
769795
version "9.18.0"
770796
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
771797

798+
gzip-size@^3.0.0:
799+
version "3.0.0"
800+
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
801+
dependencies:
802+
duplexer "^0.1.1"
803+
772804
has-ansi@^2.0.0:
773805
version "2.0.0"
774806
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -794,7 +826,14 @@ iconv-lite@^0.4.13:
794826
dependencies:
795827
safer-buffer ">= 2.1.2 < 3"
796828

797-
inherits@^2.0.3, inherits@~2.0.3:
829+
inflight@^1.0.4:
830+
version "1.0.6"
831+
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
832+
dependencies:
833+
once "^1.3.0"
834+
wrappy "1"
835+
836+
inherits@2, inherits@^2.0.3, inherits@~2.0.3:
798837
version "2.0.3"
799838
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
800839

@@ -917,6 +956,10 @@ loose-envify@^1.0.0:
917956
dependencies:
918957
js-tokens "^3.0.0 || ^4.0.0"
919958

959+
lz-string@^1.4.4:
960+
version "1.4.4"
961+
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
962+
920963
magic-string@^0.22.4:
921964
version "0.22.5"
922965
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
@@ -927,6 +970,15 @@ math-random@^1.0.1:
927970
version "1.0.1"
928971
resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
929972

973+
maxmin@^2.1.0:
974+
version "2.1.0"
975+
resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166"
976+
dependencies:
977+
chalk "^1.0.0"
978+
figures "^1.0.1"
979+
gzip-size "^3.0.0"
980+
pretty-bytes "^3.0.0"
981+
930982
merge-source-map@1.0.4:
931983
version "1.0.4"
932984
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f"
@@ -1004,6 +1056,12 @@ object.omit@^2.0.0:
10041056
for-own "^0.1.4"
10051057
is-extendable "^0.1.1"
10061058

1059+
once@^1.3.0:
1060+
version "1.4.0"
1061+
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1062+
dependencies:
1063+
wrappy "1"
1064+
10071065
optionator@^0.8.1:
10081066
version "0.8.2"
10091067
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
@@ -1036,7 +1094,7 @@ parse-glob@^3.0.4:
10361094
is-extglob "^1.0.0"
10371095
is-glob "^2.0.0"
10381096

1039-
path-is-absolute@^1.0.1:
1097+
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
10401098
version "1.0.1"
10411099
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
10421100

@@ -1052,6 +1110,12 @@ preserve@^0.2.0:
10521110
version "0.2.0"
10531111
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
10541112

1113+
pretty-bytes@^3.0.0:
1114+
version "3.0.1"
1115+
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf"
1116+
dependencies:
1117+
number-is-nan "^1.0.0"
1118+
10551119
private@^0.1.6, private@^0.1.8:
10561120
version "0.1.8"
10571121
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@@ -1168,6 +1232,12 @@ restructure@^0.5.3:
11681232
dependencies:
11691233
browserify-optional "^1.0.0"
11701234

1235+
rimraf@^2.6.2:
1236+
version "2.6.2"
1237+
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
1238+
dependencies:
1239+
glob "^7.0.5"
1240+
11711241
rollup-plugin-babel@^2.7.1:
11721242
version "2.7.1"
11731243
resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57"
@@ -1177,6 +1247,13 @@ rollup-plugin-babel@^2.7.1:
11771247
object-assign "^4.1.0"
11781248
rollup-pluginutils "^1.5.0"
11791249

1250+
"rollup-plugin-bundle-size@https://github.com/vimeo/rollup-plugin-bundle-size":
1251+
version "1.0.2"
1252+
resolved "https://github.com/vimeo/rollup-plugin-bundle-size#c43b59a5e1add364ccb7f45569f49b4c35e01025"
1253+
dependencies:
1254+
chalk "^1.1.3"
1255+
maxmin "^2.1.0"
1256+
11801257
rollup-plugin-ignore@^1.0.3:
11811258
version "1.0.3"
11821259
resolved "https://registry.yarnpkg.com/rollup-plugin-ignore/-/rollup-plugin-ignore-1.0.3.tgz#9a3caac6709e481471ce4498a48164bbc2359e3d"
@@ -1369,6 +1446,10 @@ wordwrap@~1.0.0:
13691446
version "1.0.0"
13701447
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
13711448

1449+
wrappy@1:
1450+
version "1.0.2"
1451+
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1452+
13721453
xtend@~4.0.1:
13731454
version "4.0.1"
13741455
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"

0 commit comments

Comments
 (0)