Unicode PDF
-
02-07-2019 - |
質問
私のプログラムを生成し比較的シンプルPDFファイルがリクエストに応じて、がんの悩みのunicode文字、漢字や異数学記号です。を書く通常の文字列形式はPDF、すでにブラケット:
(something)
また、オプションのエスケープ文字とoctalコード:
(\527)
でもこれだけが最大512文字です。いエンコードや逃が高す。い参照はバイトストリームや六角レンチで符号化された文字列が、参考文献を読んでいく方法を教えていったのです。
編集: 或いは、も良いJava PDFライブラリにしかできない仕事でした。のんの現在使用のコンサートシリーズでは、gnujpdfるんで固定バグをいくつかには、原著作者が表示されなくなっていたAWOL)でプログラムに対してAWTグラフィックインターフェイス、理想的には為替えさせるべきだ。
の代替えするHTML->PDF、プロモデルに基づく項箱のことを感じようにHTML.iTextの一例です。この意味を書き換え私の既存コードを見たいな方法が良いと思いますと確信していきたいと思っていじの柔軟性を敷設します。
編集2: 人通りが多く、思っていたが、iText図書館は、Graphics2Dでのtransformを使APIが使えないので取扱いunicodeの完全なありがとうございましょう。ものではない、という疑問への答えていたので問題を解決しました。
編集3: iTextが働く。しないといけないのではないか授業が直面しているようpointlesslyく、人知についての詳でありがとうございます。
解決
シンプルに答えると、ありません簡単に答えます。場合は、PDF仕様のままだ全体の章では、手続きには長い時間がかかり、それを機構のテキスト表示されます。私は実施すべてのPDFファイルの支援のための私の会社は、取り扱いテキストで最も複雑なのです。の溶液また利用の3サードパーティ製ライブラリのごはんの最良の選択しないかぎり、非常に特定された特別目的要件のPDFファイルです。
他のヒント
のPDFを参照)の第3章では、こうUnicode:
テキスト文字列をエンコードされてい のいずれかPDFDocEncodingまたはUnicode文字エンコーディングです。PDFDocEncodingは 上位集のISO Latin1エンコーディングが記録されAppendix D.Unicode に記載されているUnicode標準のUnicodeコンソーシアム、書誌).テキスト文字列に符号化されたUnicodeのファイルについてバイトをする必要254後 255です。これら二つのバイトをUnicodeのバイト順マーカー、U+FEFF示 このstringが符号化されるUTF-16(ビッグエンディアン)の符号化方式を指定 Unicode標準です。(このメカニズムを妨げ開始文字列を使用 PDFDocEncodingの文字が刺ydieresisるのは する意味のある初の単語やフレーズ).
Algomanの答えは 間違った 多くいます。す ができ をPDFファイルがunicodeで'でないロケット、科学が必要とします。ありその通りで、以上のご使用は255文字一文字を作成する必要がある複合フォント(CIDFontョンオブジェクトです。そのことを述べるにとどめ、実際のTrueType font利用したいとしてDescendatFont入のCIDFont.フレキシビリティはその後のご利用 グリフの指標 のフォントの代わりに文字コードです。この指標を地図での解析 cmap
のフォント-コンテンツのフォント GetFontData
機能や手TTF仕様となります。しようとしています。うになってunicode pdf!
サンプルコード解析 cmap
部門はこちら: https://support.microsoft.com/en-us/kb/241020
やりを忘れない/ToUnicode入@user2373071指摘またはユーザーは検索できるサポートまたは文字データをコピーします。
としてdredkin指摘の通り、使用にはグリフの指標ではなく、Unicode文字値のページのコンテンツストリームです。これは十分に表示UnicodeテキストをPDFでのUnicode文字は検索されます。のテキスト検索可能またはコピー/貼り付け作業で、あなたはまた、含める必要があるa/ToUnicodeストリームです。このストリームは翻訳の各グリフの文書のUnicode文字です。
付録Dを参照してください(ページ995)PDFファイルの仕様となります。台数に限りがありますのでフォントの文字セットを事前に定義されたPDF消費者の願います。表示その他の文字に必要なものを埋め込みフォントが含まれます。でも好ましい埋め込みサブセットのフォントを含みに必要な文字を減らすためには、ファイルのサイズです。私にも取り組んで表示するUnicode文字をPDFではで生活することができます。
チェックPDFBoxはiText.
今までの数日間で、何を学ぶことができましたがunicodeです(ど)不可能である。2バイト文字の柱脚部に記載したものは国内でのみご使用くだCID-フォント.
いように見CID-フォントはpdfの内部の構築というフォントはそういう意味でいうというようなグラフィック-サブルーチンが呼び出し可能な対し16ビットアドレス).
でunicodeを使用pdf 直接
- ように変換する通常のフォントをCID-フォントすることで、非常に硬いのグラフィックルーチンのオリジナルフォント(?), 抽出文字指標等
- 利用できませんCID-フォントのような通常のフォント-はできませんの負荷はその負荷規模は通常のフォント
- また、2バイト文字などの見所も全Unicodeの空白
まぁ、これらの点では絶対に成り立たない状況に使用unicode 直接.
ないということではなく現在を使用して文字 間接的に 次のようになっています:各フォント、生codepage(およびルックアップ-テーブルを高速のルックアップ)-c++でこのようなものになっていくかも
std::map<std::string, std::vector<wchar_t> > Codepage;
std::map<std::string, std::map<wchar_t, int> > LookupTable;
そして、いつでもunicode文字列ページで、繰り返し処理を実行し、その文字を見るだけで、あっという間にルックアップ-テーブルの場合ことができるかということであっとして追加しようとすると、コードのページのようになります:
for(std::wstring::const_iterator i = str.begin(); i != str.end(); i++)
{
if(LookupTable[fontname].find(*i) == LookupTable[fontname].end())
{
LookupTable[fontname][*i] = Codepage[fontname].size();
Codepage[fontname].push_back(*i);
}
}
その後、新しく生成します文字列の文字から文字列に置き換えによる位置にcodepageようになります:
static std::string hex = "0123456789ABCDEF";
std::string result = "<";
for(std::wstring::const_iterator i = str.begin(); i != str.end(); i++)
{
int id = LookupTable[fontname][*i] + 1;
result += hex[(id & 0x00F0) >> 4];
result += hex[(id & 0x000F)];
}
result += ">";
例えば、"H€lloどうもありがとうござい方には <01020303040506040703080905> ときめいただけるようになる文字列のpdfのほか、Tjオペレーターとして通常の...
ではないの問題:のない平均をもつ"H"による01.この問題を解決するものではありませんのcodepageのpdfファイルです。この行を追加 /エンコード のフォントオブジェクトに設定 の違い
の"H€lloどうもありがとうござ例では、このFontオブジェクトにう:
5 0 obj
<<
/F1
<<
/Type /Font
/Subtype /Type1
/BaseFont /Times-Roman
/Encoding
<<
/Type /Encoding
/Differences [ 1 /H /Euro /l /o /space /W /r /d /exclam ]
>>
>>
>>
endobj
私をこのコード:
ObjectOffsets.push_back(stream->tellp()); // xrefs entry
(*stream) << ObjectCounter++ << " 0 obj \n<<\n";
int fontid = 1;
for(std::list<std::string>::iterator i = Fonts.begin(); i != Fonts.end(); i++)
{
(*stream) << " /F" << fontid++ << " << /Type /Font /Subtype /Type1 /BaseFont /" << *i;
(*stream) << " /Encoding << /Type /Encoding /Differences [ 1 \n";
for(std::vector<wchar_t>::iterator j = Codepage[*i].begin(); j != Codepage[*i].end(); j++)
(*stream) << " /" << GlyphName(*j) << "\n";
(*stream) << " ] >>";
(*stream) << " >> \n";
}
(*stream) << ">>\n";
(*stream) << "endobj \n\n";
通知を使用して得たグローバルフォンの登録-Iと同じフォント名/F1/F2,...全体のpdf文書です。同じフォント登録オブジェクトが参照されるの 資源 入をご参照下さい。そうすれば違ったなど使用フォント登録ページあたり)-なければならなくなるかもしれに適応のコードをその状況...
どう名のグリフの(ユーロのための"ユーロ",/exclamのために"!"等)を表記させて頂きます。?上記のコードすることで行いるだけで呼び出し"GlyphName(*j)".って生成されこのメソッドをBASH-スクリプトからのリストから
http://www.jdawiseman.com/papers/trivia/character-entities.html
そのようになります
const std::string GlyphName(wchar_t UnicodeCodepoint)
{
switch(UnicodeCodepoint)
{
case 0x00A0: return "nonbreakingspace";
case 0x00A1: return "exclamdown";
case 0x00A2: return "cent";
...
}
}
A 大きな問題とな 私は開放されるこ のみの作品としてお使いいただいた最大254異なる文字 同じ商標または登録商標です。利用期ごとに254異なる文字についを複数作成しcodepagesの商標または登録商標です。
内のpdfは、codepages代表される異なるフォントで切り替えcodepagesいスイッチフォントは、理論的にブロー pdfっ、は、ですが...
したらいいと思います。PDF専門家としてFerruccioとのPDFの仕様でAdobe教えるべきであるすべてが思い思い浮か:
ご確認くださいをご利用のフォントを支えるすべての文字をすべて答えています。
また、アクセサリをPDFからのHTMLページ(三館)、またこの問題とキリル文字の文字を...