Coder Social home page Coder Social logo

tcpdf's Introduction

Original README is here

TCPDF(Added TrueTypeFont Format14 support)

概要

このリポジトリは、TCPDFに対して以下の対応を追加したものです。

  • 行間調整(行の下にマージンを追加)を最終行において行わないようにする対応
  • テキストのスケーリング時に、日本語の禁則処理を踏まえた改行が行われるような対応
  • Unicode IVSが出力できるようにする対応

上記の修正は、「Thinreports Generator PHP2」への改修に伴って実施しました。

各修正に対する特記事項

全体を通じて

  • TCPDFは巨大で、正規化されておらず、(フレームワークにおいて)グローバルに扱われる変数が多く、他の機能に影響を与えずに改修を行うことは非常に困難だと思いました。
  • 今回の改修はthinreports-phpを日本語環境において動作させることを目的としました。
  • 追える範囲では対応していますが、他の言語や機能・関数で想定外の動作が起こる可能性が否定できません。

mbstring

  • オリジナルにあまり影響を与えないように作ろうと思いましたが、mbstringを使ってしまっていたため、テストが落ちています。

日本語禁則処理

  • 禁則対象の文字列はTCPDF.php$prohibited_prefix及び、$prohibited_suffixとして定義しています。
    • 現時点で外部から変更する手段を用意できていません。
  • このドキュメントを書いていて気づきましたが、外部から動作自体をON/OFFする手段が抜け落ちています。

フォントキャッシュ

  • フォントにおいてIVSグリフの有無を問い合わせるため、フォントのキャッシュデータに$ctgivsを追加しています。fonts/*は必要に応じて再作成してください。

私用面利用の制限

  • 調べた限り、PDFフォーマットは(IVSを含む)Unicodeを無理なく処理できるものではありません。
    • 具体的には、1文字がUTF16の2byteで表現できない文字が鬼門です。
  • 2文字で1文字を定義するIVS及び、U+10000以降のUnicode文字については、UnicodeのBMP内の私用面(U+E000-U+F8FF)の文字列として置き換えています。
  • 上記に伴い、以下の制限があります。
    • 作成するPDFの中で、(1フォント毎に)私用面の領域(6400)を超える種類のIVS文字列を使用出来ない。
    • 使用するフォントにおいて、私用面が利用されていないこと。
  • コピペについては、ToUnicode mapを更新しているので問題ないハズです。

cmap table

  • PDFへのフォント埋め込みに際して、不要なグリフなどを省いたサブセットフォントを作成します。
  • IVSの追加に伴い、cmapテーブルを(そのまま)追加しているため、従来よりもサイズが大きくなります。

今後の対応について

  • 主要な改修は需要側が満足したため終了しています。
  • 特に反応が無い限りは、個人レベルで必要に応じて改修していく予定です。
  • 今回の改修内容についてPullReqを予定していましたが、挫折しました。
    • ライセンス等については変更していないので、今回の変更内容を取り込んで頂くことに問題はありません。
  • 今後、これ以上の改修が必要になった場合は、根本的に作り直した方がいい気がしています。

tcpdf's People

Contributors

baptistepillot avatar cedric-anne avatar daeroni avatar defrance avatar dominiqueferet avatar findus23 avatar gemal avatar jakuje avatar jonasnutz avatar leofeyer avatar mvorisek avatar nicolaasuni avatar nicolaasuni-vonage avatar niklasbr avatar nullx2 avatar remicollet avatar rvanginneken avatar soerenbernstein avatar stchr avatar supervirus avatar tacovandenbroek avatar tanelt avatar thorsten avatar tofandel avatar vincentlanglet avatar wenzhengjiang avatar westhouseit avatar williamdes avatar woytam avatar zymurgic avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.