PHPExcel을 사용한 후 LibreOffice에서 명령으로 PDF 출력을 할 때의 문자 깨짐 대책

5798 단어 LibreOffice편지RHEL
제목대로 대책 메모

케이스로서는
  • 좋은 느낌의 글꼴이 설치되지 않았습니다
  • PDF로 출력되는 문자가 기대하고있는 것과는 다른

  • 때 유효한 글꼴 변경 방법.

    환경


  • RHEL6 계열
  • LibreOffice 4.2.8.2
  • 출력 파일 : xls 형식의 Excel 파일 및 PDF 파일
  • Excel 파일 작성/편집에는 PHPExcel을 사용.
  • PDF 변환에는 LibreOffice를 Command로 호출해 변환하고 있다.

  • 현재 상태 확인



    1. 인스코드 폰트 확인


    $ fc-list
    Liberation Mono:style=Regular
    DejaVu Serif,DejaVu Serif Condensed:style=Condensed,Book
    DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold Italic,Bold Italic
    DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold,Bold
    Liberation Sans:style=Regular
    DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique
    DejaVu Sans Mono:style=Bold Oblique
    Carlito:style=Italic
    Liberation Serif:style=Bold Italic
    Caladea:style=Bold
    DejaVu Serif:style=Bold Italic
    OpenSymbol:style=Regular
    Caladea:style=Bold Italic,Italic
    DejaVu Sans:style=Bold Oblique
    Carlito:style=Regular
    Liberation Serif:style=Bold
    Liberation Mono:style=Bold Italic
    DejaVu Sans:style=Oblique
    Liberation Sans:style=Bold
    DejaVu Sans Mono:style=Oblique
    Carlito:style=Bold Italic
    DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique
    Caladea:style=Italic
    Carlito:style=Bold
    Liberation Serif:style=Regular
    VL Pゴシック,VL PGothic:style=regular
    DejaVu Sans,DejaVu Sans Light:style=ExtraLight
    Liberation Sans:style=Bold Italic
    IPAゴシック,IPAGothic:style=Regular
    DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book
    DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold
    Liberation Mono:style=Bold
    IPA Pゴシック,IPAPGothic:style=Regular
    DejaVu Serif,DejaVu Serif Condensed:style=Condensed Italic,Italic
    Caladea:style=Regular
    DejaVu Sans:style=Bold
    DejaVu Sans:style=Book
    DejaVu Serif:style=Italic
    DejaVu Sans Mono:style=Book
    IPA明朝,IPAMincho:style=Regular
    DejaVu Sans Mono:style=Bold
    Liberation Serif:style=Italic
    Liberation Mono:style=Italic
    IPA P明朝,IPAPMincho:style=Regular
    Liberation Sans:style=Italic
    VL ゴシック,VL Gothic:style=regular
    DejaVu Serif:style=Book
    DejaVu Serif:style=Bold
    

    2. PDF 출력된 글꼴 확인



    Adobe Acrobat이라든가 「Command+d」의 문장 프로퍼티내 「폰트」탭에서 확인할 수 있다.


    이 때, DejaVuSans계나 IPAGothic, VL 어떻게든이 원인으로 문자화를 하고 있다고 판단할 수 있다.
    IPAGothic이라든지는 문자화되지 않을 가능성이 높다고 생각되지만, 간단하게 잘 되지 않았기 때문에 IPAexGothic를 사용하기로 한다.

    폰트 인스코



    1. IPAGothic 다운로드



    여기 에서 여러분에게 제대로 읽고 문제 없으면 동의해 다운로드.

    2. 압축 해제 및 업로드



    생략. 적당히 서버에 올립니다.
    (여기에서는 IPAex 고딕을 사용합니다)

    3. 글꼴 파일 배치



    루트 권한을 가진 사용자
    $ mkdir /usr/share/fonts/ipa-ex-gothic
    

    라는 느낌으로 적당히 폴더를 만든다.
    그리고 안에 「1.」로 다운로드/해동한 폰트 파일을 넣으면 된다.
    Permission을 0644로 둔다.
    $ cp /home/ykeisuke/fonts/ipaexg.ttf /usr/share/fonts/ipa-ex-gothic/
    $ chmod 0644 /usr/share/fonts/ipa-ex-gothic/ipaexg.ttf
    

    4. 글꼴 캐시 삭제


    $ fc-cache -fv
    /usr/share/fonts: caching, new cache contents: 0 fonts, 11 dirs
    /usr/share/fonts/dejavu: caching, new cache contents: 21 fonts, 0 dirs
    /usr/share/fonts/google-crosextra-caladea: caching, new cache contents: 4 fonts, 0 dirs
    /usr/share/fonts/google-crosextra-carlito: caching, new cache contents: 4 fonts, 0 dirs
    /usr/share/fonts/ipa-ex-gochic: caching, new cache contents: 1 fonts, 0 dirs
    /usr/share/fonts/ipa-gothic: caching, new cache contents: 1 fonts, 0 dirs
    /usr/share/fonts/ipa-mincho: caching, new cache contents: 1 fonts, 0 dirs
    /usr/share/fonts/ipa-pgothic: caching, new cache contents: 1 fonts, 0 dirs
    /usr/share/fonts/ipa-pmincho: caching, new cache contents: 1 fonts, 0 dirs
    /usr/share/fonts/liberation: caching, new cache contents: 12 fonts, 0 dirs
    /usr/share/fonts/opensymbol: caching, new cache contents: 1 fonts, 0 dirs
    /usr/share/fonts/vlgothic: caching, new cache contents: 2 fonts, 0 dirs
    /usr/share/X11/fonts/Type1: skipping, no such directory
    /usr/share/X11/fonts/TTF: skipping, no such directory
    /usr/local/share/fonts: skipping, no such directory
    /root/.fonts: skipping, no such directory
    /var/cache/fontconfig: cleaning cache directory
    /root/.fontconfig: not cleaning non-existent cache directory
    fc-cache: succeeded
    

    5. 글꼴 목록



    「3.」로 배치한 폰트가 인스코되어 리스트에 들어가 있는 것을 알 수 있다
    $ fc-list
    (略)
    IPAexゴシック,IPAexGothic:style=Regular
    (略)
    

    PHPExcel을 읽는 곳에 손 추가



    폰트를 인스코한 단계에서 낫으면 좋았지만, 낫지 않았다.
    Mac의 MS-Excel측에서 폰트를 지정했지만 PHPExcel로 출력되는 Excel 파일의 폰트는 방금 전 인스코한 것이 되어 있는데 PDF에서는 변하지 않았다든가 있었다.

    Mac의 LibreOffice에서 다시 저장하거나 PHPexcel인지 LibreOffice인지 문제를 구분해라든지 여러가지 있지만, PHPExcel+LibreOffice4의 조합은 당분간 상관없다는 판단하에 특정 그만두었다.
            $reader = PHPExcel_IOFactory::createReader('Excel5');
            $excel = $reader->load("/INPUT/YOUR/EXCEL/PATH");
            $sheet = $excel->getSheetByName("input_your_sheet_name");
            $sheet->getDefaultStyle()->getFont()->setName('IPAexGothic');
    

    느낌으로 명확하게 지정한다.
    이때 IPAexGothic 는 fc-list로 나온 명칭이 될거야.

    마지막으로



    RHEL6계의 OS로, PHP로 깨끗한 PDF를 토해내는 방법이라고 하면 무엇일까?

    LibreOffice4를 커맨드 라인으로 호출하면 가장 깨끗한 (전 Excel에 가까운 형태)로 내뱉을 수 있었다.
    LibreOffice의 원래 OpenOffice를 만지지 않습니다.

    fPDF라든지 ftPDF라든지는, 조금 만졌습니다만 간단한 HTML을 만들어 호출하는 분에는 문제 없다고 생각하지만, 여러가지 코드를 쓰거나 하지 않으면 안 되는 느낌이 들었기 때문에 배웠다.
    엑셀 파일 PDF 변환 라이브러리라든가 하고 싶지 않다.

    이상에 의해 아무것도 생각하지 않고 Excel 파일이 나름대로 좋은 느낌으로 출력되는 LibreOffice가 최강이라고 결론에 있었다

    좋은 웹페이지 즐겨찾기