Pdf.js: ์ž˜๋ชป ๋ Œ๋”๋ง๋œ Times New Roman PS

์— ๋งŒ๋“  2019๋…„ 03์›” 22์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mozilla/pdf.js

์—ฌ๊ธฐ์— PDF ํŒŒ์ผ์„ ์ฒจ๋ถ€(๊ถŒ์žฅ)ํ•˜๊ฑฐ๋‚˜ ๋งํฌ:
EMG8 -Cambridge Essentail Gold Maths 8-B 117.pdf

๊ตฌ์„ฑ:

  • ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋ฒ„์ „: Chrome 73
  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „: * Macos 10.14.1 *
  • PDF.js ๋ฒ„์ „: 2.2.91
  • ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ์ž: ์•„๋‹ˆ์š”

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„:


  1. PDF(์ฑ…์—์„œ ์ถ”์ถœํ•œ ๋‹จ์ผ ํŽ˜์ด์ง€)๋ฅผ ์—ด๊ณ  ์ž˜๋ชป ๋ Œ๋”๋ง๋œ ๊ธ€๊ผด์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

image

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์Šคํฌ๋ฆฐ์ƒท ์ถ”๊ฐ€)
๋‹ค๋ฅธ PDF ๋ฆฌ๋”์—์„œ๋Š” ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
image

๋ทฐ์–ด์— ๋Œ€ํ•œ ๋งํฌ(mozilla.github.io/pdf.js๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ ๋˜๋Š” Firefox/Chrome ํ™•์žฅ์œผ๋กœ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๊ฒฝ์šฐ):
ํ˜„์žฌ github ํŽ˜์ด์ง€ ๋ทฐ์–ด: https://mozilla.github.io/pdf.js/web/viewer.html

๋…ธํŠธ:
PDF ๋‚ด์˜ ๊ธ€๊ผด์„ ํŽธ์ง‘ํ•˜์—ฌ ์ž‘๋™ํ•˜๋„๋ก ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ "Times New Roman PS"์ธ๋ฐ "Times New Roman"์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ์˜ค๋ฅ˜ ๋˜๋Š” ๋ˆ„๋ฝ๋œ CMap๊ณผ ๊ฐ™์€ ์†”๋ฃจ์…˜์˜ ๊ฐ€์‹œ์  ์ง•ํ›„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ PDF๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐ PDF๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ๊ณผ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿค 

4-font-conversion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

PDF๋Š” ๋™์ผํ•œ ๊ธ€๊ผด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LULQLP+TimesLTStd-Roman ๊ธ€๊ผด์€ 9๋ฒˆ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ ๋™์ผํ•œ FontDescriptor์™€ ๋™์ผํ•œ ์ž„๋ฒ ๋””๋“œ CFF ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

core/evaluator.js์˜ PartialEvaluator.prototype.preEvaluateFont() ์— ๊ธ€๊ผด ํ•ด์‹œ ๊ณ„์‚ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ์— Encoding, ToUnicode ๋ฐ Widths ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. PDF์˜ ์ผ๋ถ€ ๊ธ€๊ผด์€ ๋„ˆ๋น„๋ฅผ ํฌํ•จํ•˜์—ฌ ์–ธ๊ธ‰๋œ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. FirstChar ๋ฐ LastChar ํ•ญ๋ชฉ๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ธ€๊ผด์ด ๋™์ผํ•œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š” ๊ฒฝ์šฐ ๊ธ€๊ผด์„ ๊ฑด๋„ˆ๋›ฐ์–ด OpenType์œผ๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ์€ ์›๋ณธ PDF์—์„œ ๋‘ ๊ฐœ์˜ ๊ธ€๊ผด์„ ํฌํ•จํ•˜๋Š” ์ถ•์†Œ๋œ PDF์ž…๋‹ˆ๋‹ค.
issue10665_reduce.pdf

๋ชจ๋“  3 ๋Œ“๊ธ€

PDF๋Š” ๋™์ผํ•œ ๊ธ€๊ผด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LULQLP+TimesLTStd-Roman ๊ธ€๊ผด์€ 9๋ฒˆ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ ๋™์ผํ•œ FontDescriptor์™€ ๋™์ผํ•œ ์ž„๋ฒ ๋””๋“œ CFF ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

core/evaluator.js์˜ PartialEvaluator.prototype.preEvaluateFont() ์— ๊ธ€๊ผด ํ•ด์‹œ ๊ณ„์‚ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ์— Encoding, ToUnicode ๋ฐ Widths ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. PDF์˜ ์ผ๋ถ€ ๊ธ€๊ผด์€ ๋„ˆ๋น„๋ฅผ ํฌํ•จํ•˜์—ฌ ์–ธ๊ธ‰๋œ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. FirstChar ๋ฐ LastChar ํ•ญ๋ชฉ๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ธ€๊ผด์ด ๋™์ผํ•œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š” ๊ฒฝ์šฐ ๊ธ€๊ผด์„ ๊ฑด๋„ˆ๋›ฐ์–ด OpenType์œผ๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ์€ ์›๋ณธ PDF์—์„œ ๋‘ ๊ฐœ์˜ ๊ธ€๊ผด์„ ํฌํ•จํ•˜๋Š” ์ถ•์†Œ๋œ PDF์ž…๋‹ˆ๋‹ค.
issue10665_reduce.pdf

core/evaluator.js์˜ PartialEvaluator.prototype.preEvaluateFont() ์— ๊ธ€๊ผด ํ•ด์‹œ ๊ณ„์‚ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ์— Encoding, ToUnicode ๋ฐ Widths ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. PDF์˜ ์ผ๋ถ€ ๊ธ€๊ผด์€ ๋„ˆ๋น„๋ฅผ ํฌํ•จํ•˜์—ฌ ์–ธ๊ธ‰๋œ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. FirstChar ๋ฐ LastChar ํ•ญ๋ชฉ๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ •๋ง ํ›Œ๋ฅญํ•œ ๋ถ„์„์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค!

๊ธ€๊ผด์ด ๋™์ผํ•œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š” ๊ฒฝ์šฐ ๊ธ€๊ผด์„ ๊ฑด๋„ˆ๋›ฐ์–ด OpenType์œผ๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ผ๋ถ€ ์ž˜๋ชป ์ƒ์„ฑ๋œ PDF ํŒŒ์ผ์—๋Š” ์—„์ฒญ๋‚œ ์–‘์˜ ๋™์ผํ•œ ๊ธ€๊ผด์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ preEvaluateFont ์˜ ๋ชฉ์ ์€ ๋‹จ์ˆœํžˆ ์ค‘๋ณต๋œ ๊ธ€๊ผด์„ ๋กœ๋“œ/ํŒŒ์‹ฑํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ loadFont ๋Š” hash es๋ฅผ ๋น„๊ตํ•˜๊ณ  ๊ฐ€๋Šฅํ•˜๋ฉด ์ด๋ฏธ ๋กœ๋“œ/๋ถ„์„๋œ ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ถ„๋ช…ํžˆ ์ด ๋ชจ๋“  ๊ฒƒ์€ hash es๊ฐ€ ์‹ค์ œ๋กœ ์ •ํ™•ํ•˜๊ณ  ๊ณ ์œ ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์— ๋‹ฌ๋ ค ์žˆ์ง€๋งŒ ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ๋ช‡ ๋…„ ๋™์•ˆ ํ•ด๋‹น ์ฝ”๋“œ์— ๋น„๊ต์  ์ ์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค ๋„์›€์„ ์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰