2017-09-11 2 views
0

私はiText7を使用しています。
私のクラスは、サーバー上のpdfファイル(キリル文字を含むテンプレートです)で動作します。キリル記号

最初に私はその文書を読んだ。 2番目の情報を編集してローカルマシンに保存しようとしましたが、問題があります。新しいテキストが正しく表示されません。

ttfフォントで新しいpdfファイルを作成し、これを新しく作成したpdfファイルに追加するとすべて正常に機能しますが、テンプレートを変更した場合、テキストは正しくありません(キリル文字のみ)。私はロケールを使用しようとしている

PdfDocument document = new PdfDocument(new PdfReader(template), new PdfWriter(dest)); 
     PdfPage page = document.getFirstPage(); 
     PdfDictionary dictionary = page.getPdfObject(); 
     PdfObject object = dictionary.get(PdfName.Contents); 

     if (object instanceof PdfStream) { 
      PdfStream stream = (PdfStream) object; 
      byte[] data = stream.getBytes(true); 

      stream.setData(new String(data).replace("user_fio", "Петров А.А.").getBytes("utf-8")); 
} 
document.close(); 

http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html

- 私は公式サイトからの簡単な例のいずれかを使用しようとしている

ここhttp://developers.itextpdf.com/examples/stamping-content-existing-pdfs/clone-replacing-pdf-objects

は、私のコードの関連する部分であります

結果は「????????」です。またはそのようなものです。

私は間違っていますか?ありがとうございました!

+0

を使用してPDFに(動的に生成された)動的なコンテンツ

  • コンバートHTMLを受け入れることができます** (それは特に非常に汚いです)**あなたは真剣にレイアウト**を台無しにすることができます。あなたの場合、1つのフォント内のテキストを完全に異なるフォントのテキストに置き換えます。これは、これが単純に機能することを期待しています。それはそれほど単純ではありません。この例を文脈から外してはいけません。この例はPDF専門家のみのものであり、PDF専門家ではありません。 *あなたは間違って何をしていますか?、質問ではありません。本当の疑問はあなたが間違っていないことです* –

  • 答えて

    1

    PDFはwysiwyg形式ではありません。あなたは単にコンテンツストリーム内の情報を置き換えて見栄えの良いpdfを得ることはできません。 これには2つの理由があります。

    1. PDFドキュメントは、オブジェクトに情報を格納します。オブジェクトを参照できるように、バイトオフセットが格納されています。データの置換を開始すると、バイトオフセットのこの内部テーブルが不正になります。

    2. PDF文書にはテキストが含まれていません。あなたはそれらをもっと指示のコンテナと考えるべきです。指示の順序や指示の内容を変更しても、結果が得られません。

      リフロー(テキストの挿入、削除、または置換時にテキストが自動的にレイアウトされる)は、ドキュメント内で動的に実行することはできません。あなたのようなコードを使用すると、ほとんどの場合、リフローが乱れることになります。

      例外があります。ウェブサイトの例の1つでは、「世界」という言葉が「ブルーノ」に置き換えられています。これは "World"と "Bruno"が同じ文字数(したがって同じバイト数)を持ち、前述の例ではそれぞれの行の最後の単語として表示されるために機能します。したがって、リフローは問題ではありません。

    要約: - PDFは編集可能な形式ではありません。

    あなたのユースケースに似た何かをしたい場合は、次のオプションを検討してください。

    • そのフィールドのいくつかの種類を持っているたびにゼロから
    • の使用形態(XFAまたはアクロ)にPDFを生成します**これは、迅速かつ汚い方法です:あなたは私はあなたが参照する例に追加したコメントを読めば、あなたは私が書いたことがわかりpdfHTML
    +0

    ありがとう、ありがとう!あなたのお勧めをお試しになります。 –

    関連する問題