すみません、「正常に使用できた」という回答ではありません。
むしろ、TCPDFでは「????など、UTF-16でサロゲートペアを使用して表現する文字」のフォント埋め込みは正常に動作しないのではないかと思います。
・フォント指定を'ipamjm'にするとPDFでの表示は☒☒だが、該当部分をコピーしてテキストエディタに貼り付けると????が表示される
・フォント指定を'cid0jp'にするとPDFでも????が表示されるし、該当部分をコピーしてテキストエディタに貼り付けても????が表示される(ただし、フォントは埋め込まないので表示されるかどうかは環境依存)
なのでテキストデータは正しくて、フォント埋め込み周りだけの問題かな、と思います。
なお、鶹などはJIS第4水準らしいけどサロゲートペアを使用しないので表示も貼り付けも問題なさそう。
Unicodeの私用領域に関しては試していません。
試した環境
Windows7 64bit
Adobe Acrobat Reader DC
xampp-win32-7.2.1-0-VC15.7z (PHP 7.2.1) C:\xampp\7.2.1-0\ に置いてsetup_xampp.batを実行。
tcpdf_6_2_13.zip
ipamjm00501.zip システムにインストールして、0x20BB7をIDWriteFont::HasCharacterメソッド https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd371165%28v=vs.85%29.aspx や IDWriteFontFace::GetGlyphIndicesメソッド https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd370998%28v=vs.85%29.aspx に渡した結果を見ても、IPAmj明朝に????は存在しているけど他の多くのフォントには存在していない。
tcpdf_addfont.phpで
Fatal error: Allowed memory size of 134217728 bytes exhausted
とやらが出たので、php.iniの
memory_limit = 128M
を
memory_limit = 512M
に変更してみた。
examples\example_002.php をベースにして、テキストに「????」を入れてフォント指定を'ipamjm'にする。
Ubuntu16.04LTSのPHP7.0.25でも少しだけ確認。
試したこと
最初は
php.exe (パス)\tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -p 3 -n 1 -i ipamjm.ttf
ではダメで、
php.exe (パス)\tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -p 3 -n 10 -i ipamjm.ttf
にすればいけるんじゃないかとも思いました。しかし、出力されるipamjm.phpに違いは出ましたがPDFへのフォント埋め込みはうまくいかず。
include\tcpdf_fonts.phpの804行目、883行目、1507行目で$cidの上限が0xFFFFになっているっぽいのを0x10FFFF相当に変更してみてもうまくいかず。
PDF作成時にサブセットではなく $pdf->setFontSubsetting(false); で全ての文字のフォントを埋め込むように指定してもうまくいかず。
????を含む別のttfファイルを変換して使ってみてもうまくいかず。
もしかすると include\tcpdf_font_data.php を変更すればうまくいく可能性もあるのかな? と思いつつも個人的にはギブアップ。PDFファイルの仕様は理解してません。
余談
TCPDFの公式サイトでは「新しいバージョンはtc-lib-pdfとして開発してる。TCPDFの開発は終了」みたいなことが書かれてますけどtc-lib-pdfのほうは「UNDER DEVELOPMENT (NOT READY)」なんですよね。