콘텐츠로 건너뛰기

[LaTeX] PDF Figure의 Font Embedding 하기

Font is not embedded

나는 논문에 그림을 삽입할 때 PowerPoint로 그림을 그리고 PDF로 저장해서 삽입한다. 그런데 이번에 논문 초안을 작성하고 제출하기 전에 IEEE PDF Checker에 논문 파일을 보내 점검을 받으니까 아래와 같이 몇몇 font들이 embed 되지 않았다고 에러가 떴다.

Font Embedding Error!

원인은 리포트에 적혀있는 그대로이다. 그림 파일 내의 font들이 PDF에 embed 되지 않지 않았기 때문이다. 실제로 그림 파일들에 대해 pdffonts 명령어로 확인해보면 embed되지 않은 font가 있는 것을 확인할 수 있다.

pdffonts steps.pdf의 결과. ArialMT font가 embed되지 않았음을 확인할 수 있다.

해결 방법?

해결 방법은 검색해보면 몇 가지가 나오긴 한다.

  • PDF가 아닌 PNG 파일 등으로 그림 삽입
  • PDF printer를 이용해 PDF를 재생성하면서 font를 embed 시키기
  • PPT에서 그림을 PDF로 저장할 때 PDF/A 호환 형식으로 저장하기
  • PPT에서 그림에 들어가는 글꼴을 모두 embed 되는 것들로 바꾸기

PNG 파일 등의 이미지 포맷으로 그림을 삽입할 경우 두 가지 문제가 발생한다. 먼저, 해당 이미지 포맷이 벡터 형식이 아닐 경우 논문을 확대했을 때 그림이 깨진다. 논문을 읽다가 그림을 자세히 보고 싶으면 자연스레 확대하기 마련인데, 그림이 깨져 버리면 아무래도 보기에 좋지 않다. 또한 이미지 포맷의 그림에 들어가는 글자는 검색이 되지 않는다. 소소하지만 은근히 거슬리는 문제이다.

Adobe PDF printer의 경우에는 라이센스가 필요하기 때문에 기각. 또는 서드 파이 앱의 PDF printer도 있는 것 같은데, 사용해보니 그림의 색이 변하는 등 문제가 좀 있었다.

PPT에서 그림을 PDF로 저장할 때 PDF/A 호환 형식으로 저장할 경우 모든 font가 embed 되기 때문에 쉽게 문제를 해결할 수 있다. 하지만 그림자 효과, 불투명도 등 그림을 이뻐 보이게 넣은 갖가지 효과들이 모두 사라지기 때문에 매력적인 선택지가 아니다. 특히 일부러 불투명 효과를 넣어 여러 정보를 함께 표기한 경우에는 아예 쓸모가 없다.

PPT에서 모든 font를 embed 되는 font로 바꾸는 것은 물론 가장 확실한 방법이긴 하지만 이미 작성한 그림 파일이 한두 개가 아닌데 모두 다시 작업하기에는 너무 손이 많이 간다. 새로 그리는 그림부터는 염두에 두고 작성하면 되겠지만...

Ghotstscript를 이용한 해결 방법

조금 더 검색을 하다 보니 Ghostscript를 이용해 간단하게 해결하는 방법이 있어서 소개한다. 이미 만들어둔 PDF 그림 파일들을 넣어주면 font embed 된 PDF 파일을 생성할 수 있다. Ghostscript를 사용해본 적이 없어서 뭔가 좀 야매 같아 보이긴 하지만 어쨌든 font들도 잘 embed 되고 PDF checker도 통과된다! 명령어는 아래와 같다.

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEmbedAllFonts=true -sOutputFile=<OUTPUT_FILE> -f <INPUT_FILE>

기존의 그림 파일들의 디렉토리가 figures, 새로 저장할 그림 파일들의 디렉토리가 figures_embedded일 때 아래 스크립트를 실행해 모두 한 번에 저장할 수 있다.

#!/bin/bash
DIR_ORIGINAL=./figures
DIR_EMBEDDED=./figures_embedded

for f in $DIR_ORIGINAL/*;
do
    f_original=$f
    f_embedded=$DIR_EMBEDDED/$(basename $f)
    echo "Converting $f_original -> $f_embedded"
    gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEmbedAllFonts=true -sOutputFile=$f_embedded -f $f_original
done

pdffonts를 통해 새로 생성된 그림 파일의 font가 embed 된 것을 확인할 수 있고, 해당 그림 파일을 include 한 논문 파일은 당연히 PDF checker를 통과한다.

위의 스크립트 결과 생성된 pdf 파일에서 pdffonts 결과. 모든 font가 embed 된 것을 확인할 수 있다.
Share this post!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.