web-dev-qa-db-ja.com

PDFTK、CODE128およびUTF-8

私は、PDFTKを使用してPDFからPHPフォームに入力するのに慣れています。最近、PDFにcode-128バーコードを挿入するように頼まれました。そのために、人間が読み取れるエントリ用のいくつかのテキストフィールドと、コード128シンボルを表す特別なフォントでテキストがレンダリングされる特別なテキストフィールドを持つPDFを作成しました。このフォントは次の場所にあります: http://www.jtbarton.com/Barcodes/Code128.aspx 。人間が読み取れるフィールドとバーコードフィールドの唯一の違いは、文字の表示に使用されるフォントです。

このステップまでは、すべて正常に機能します。 Adobe Readerを使用すると、準備したバーコードをコピーして自分の特別なフィールドに貼り付けることができ、きれいにレンダリングされます。このコードはバーコードリーダーでスキャンできます。サンプルの例はÑ000002HÓです(Ñがスターター、次にデータが000002、チェックサムHが続き、全体がストッパーÓで終わります)。

その後、フォームにPDFTKを入力しようとすると問題が発生します。特別なフィールドにÑ000002HÓを入力しようとすると、ASCIIテーブルの文字(つまり000002H)のみがレンダリングされ、ÑおよびÓの予想されるバーコードシンボルの代わりにある種の正方形が表示されます。さらに驚くべきことに、人間が判読できるフィールドにまったく同じÑ000002HÓフレーズを入力しようとすると、魅力的です。

両方の種類のフィールドがまったく同じ文字シーケンス(utf-8エンコーディングを含む)を受け取ることを確認し、表示の問題を防ぐためにフォントが適切に埋め込まれていることを確認し、XFDFファイルが整形式であることを確認しました。

ここでは、PDFフォームに「human」および「barcode」という名前のフィールドを入力するために使用されるXFDFサンプル

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.Adobe.com/xfdf/" xml:space="preserve">
    <fields>
        <field name="human"><value>Ñ000002HÓ</value></field>
        <field name="barcode"><value>Ñ000002HÓ</value></field>
    </fields>
</xfdf>

この問題を解決する方法がこれ以上ないのではないかと心配しています。もしそうなら、あなたの助けは大歓迎です。

2
MaxAuray

最後に、解決策を見つけました。より正確には回避策。

PDFTKは、フォームフィールドに適用された埋め込みIdentity-Hフォントでは正しい方法でUTF-8文字を処理しないようです。 PDFファイルを正しい方法でレンダリングするには、フィールドをコンテンツに置き換える代わりに、このコンテンツをこのフィールドのデフォルト値。これにより、AcrobatはPDFTKに委任するのではなく、フォームフィールドのレンダリングプロセスを処理します。

これを行うには、need_appearancesをPDFTKコマンドラインに追加するだけです。

NOTE-フォームフィールドはPDFTKによって作成されたPDFに残ります。これは、ユーザーがAdobe Readerでコンテンツを変更できることを意味します。

1
MaxAuray