fix-s22pdf.js 944 B

1234567891011121314151617181920212223242526272829303132333435
  1. // A simple script to fix the broken fonts in PDF files generated by S22PDF.
  2. if (scriptArgs.length != 2) {
  3. print("usage: mutool run fix-s22pdf.js input.pdf output.pdf");
  4. quit();
  5. }
  6. var doc = Document.openDocument(scriptArgs[0]);
  7. var font = new Font("zh-Hans");
  8. var song = doc.addCJKFont(font, "zh-Hans", "H", "serif");
  9. var heiti = doc.addCJKFont(font, "zh-Hans", "H", "sans-serif");
  10. song.Encoding = 'GBK-EUC-H';
  11. heiti.Encoding = 'GBK-EUC-H';
  12. var MAP = {
  13. "/#CB#CE#CC#E5": song, // SimSun
  14. "/#BA#DA#CC#E5": heiti, // SimHei
  15. "/#BF#AC#CC#E5_GB2312": song, // SimKai
  16. "/#B7#C2#CB#CE_GB2312": heiti, // SimFang
  17. "/#C1#A5#CA#E9": song, // SimLi
  18. }
  19. var i, n = doc.countPages();
  20. for (i = 0; i < n; ++i) {
  21. var fonts = doc.findPage(i).Resources.Font;
  22. if (fonts) {
  23. fonts.forEach(function (font, name) {
  24. if (font.BaseFont in MAP && font.Encoding == 'WinAnsiEncoding')
  25. fonts[name] = MAP[font.BaseFont];
  26. });
  27. }
  28. }
  29. doc.save(scriptArgs[1]);