34 lines
917 B
JavaScript
34 lines
917 B
JavaScript
|
// A simple script to fix the broken fonts in PDF files generated by S22PDF.
|
||
|
|
||
|
if (scriptArgs.length != 2) {
|
||
|
print("usage: mutool run fix-s22pdf.js input.pdf output.pdf");
|
||
|
quit();
|
||
|
}
|
||
|
|
||
|
var doc = new PDFDocument(scriptArgs[0]);
|
||
|
|
||
|
var font = new Font("zh-Hans");
|
||
|
var song = doc.addCJKFont(font, "zh-Hans", "H", "serif");
|
||
|
var heiti = doc.addCJKFont(font, "zh-Hans", "H", "sans-serif");
|
||
|
song.Encoding = 'GBK-EUC-H';
|
||
|
heiti.Encoding = 'GBK-EUC-H';
|
||
|
|
||
|
var MAP = {
|
||
|
"/#CB#CE#CC#E5": song, // SimSun
|
||
|
"/#BA#DA#CC#E5": heiti, // SimHei
|
||
|
"/#BF#AC#CC#E5_GB2312": song, // SimKai
|
||
|
"/#B7#C2#CB#CE_GB2312": heiti, // SimFang
|
||
|
"/#C1#A5#CA#E9": song, // SimLi
|
||
|
}
|
||
|
|
||
|
var i, n = doc.countPages();
|
||
|
for (i = 0; i < n; ++i) {
|
||
|
var fonts = doc.findPage(i).Resources.Font;
|
||
|
fonts.forEach(function (name, font) {
|
||
|
if (font.BaseFont in MAP && font.Encoding == 'WinAnsiEncoding')
|
||
|
fonts[name] = MAP[font.BaseFont];
|
||
|
});
|
||
|
}
|
||
|
|
||
|
doc.save(scriptArgs[1]);
|