3

私は、ユーザーが HTML/JavaScript でタイムラインを作成し、完成したら印刷用に PDF ファイルにエクスポートできる Web ベースのタイムライン メーカーを実行しています。

タイムラインに特定の Unicode 文字が含まれている場合に、タイムラインを PDF にエクスポートする際の問題を複数のユーザーから報告してもらいました。たとえば、次のスクリーンショットは、生成された Web ページと PDF ファイルを示しています。

ここに画像の説明を入力

ブロック要素やグルジア語などの一部の Unicode 文字ブロックはエクスポートされるが、中国語や日本語はエクスポートされない理由について頭を悩ませてきました。また、エクスポートはローカル コンピューターで実行すると正しく機能しますが、Heroku でエクスポートすると上記の出力になります。

誰がこれを引き起こしているのか知っていますか?

完全を期すために、バックエンドは Ruby on Rails にあり、PDFKit gem を使用して HTML ページを PDF に変換し、サイトは Heroku でホストされています。

4

3 に答える 3

1

Rails と Heroku でこれを個人的に経験したので、その理由は、(A) システムのフォントが Heroku のフォントと一致しないか、(B) pdfkitCSS を介してリンクされたカスタム フォントの読み込みに問題があるか、または両方の組み合わせであると言えます。

ほとんどの場合、Heroku のフォントと一致しないローカル システムのフォント (特殊文字のグリフを含む) を参照しています。Heroku の bash で実行して、インストールされているフォントのリストを取得し、必要な拡張fc-list文字セットを持つフォントに置き換えます。ただし、このフォントがローカル マシンにもインストールされていることを確認する必要があります。(さらに悪いことに、とに異なるフォントを使用することもできます。)devproduction

フォントを Herokuにアップロードして、そこからリンクすることもできます。ただし、複数のシステムまたは開発/ステージング/運用環境にまたがる場合、この方法は信頼できないことがわかりました。これは、すべてのシステムに必要なフォントをインストールする必要があるためです。それでも、PDFkitCSS フォントを機能させるために、さまざまな作業を行う必要があります (たとえば、オペレーティング システムによってフォント名の解釈が微妙に異なるため)。

私が見つけた最善の解決策は、フォントを直接 CSS にエンコードして埋め込むことです。Base-64 でフォントをエンコードし、スタイルシートに追加します。

@font-face {
    font-family: 'OpenSans';
    src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}

これで、移植性があり、あらゆるシステムと自己互換性のある防弾スタイルシートが完成しました。

于 2013-12-06T08:54:34.557 に答える