2017-09-21 17 views
1

iTextSharp(5.5.5.90)を使用してPDFファイルを生成しています。私は段落を使用しており、読者などからページをインポートしています。ここで、私は私の文書を作成する方法である、そこから私はちょうど私が必要なものを追加します。iTextSharp、文書を生成した後にページ1にバーコードを追加する

FileStream fs = new FileStream("filename.pdf", FileMode.Create, FileAccess.Write, FileShare.None); 
Document doc = new Document(new Rectangle(PageSize.LETTER), 58, 58, 100, 50); 
PdfWriter writer = PdfWriter.GetInstance(doc, fs); 

ファイルが作成されたら、私はこのような段落を追加します。

doc.Add(new Paragraph("Paragraph text")); 

そして、このような読者からのインポートページ:

writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, page), 0, 0); 
私の質問は、ドキュメント全体を生成してページ1に要素を追加した後、どのようにページ1に戻るのですか?私はバーコードを追加しています(現在のページでバーコード、表などを追加する方法は分かります)。しかし、要素を追加するためにページ1に戻る方法はわかりません。

完全なコードですが、依存関係のためにコンパイルできません。また、動的に生成されたドキュメントを作成するための大きなプロジェクトであるため、完全なコードの詳細に惑わされないようにしてください。 https://pastebin.com/kABi7fzW

+0

最初からバーコードを挿入していない理由はありますか? – DiskJunky

+0

DiskJunky、私は最後まで文書の全長を知らない。バーコードには、文書内のページ数が含まれています。パラグラフと、それらが下に達すると自動的に次のページに流れ込むため、そこに何ページがあるのか​​を100%確信させることはできません(早い段階で文字/行/ –

+0

あなたは、少なくともバーコードのためのプレースホルダーに置かなければならないでしょう、あるいは単なる挿入がページカウントを押し出す可能性があります。この場合、文書を作成して開き直し、バーコードプレースホルダーを見つけて更新する必要があります。それはより複雑なプロセスです – DiskJunky

答えて

1

iTextSharpの呼び出しについては、私たちのドキュメントが全く異なっているため、私は証明できません。 Wordテンプレートを開いて、DataTablesなどのデータを開き、MailMergeを実行して、閉じて再度開き、PDFとして保存します。複雑に聞こえますが、段落ごとにドキュメントの段落を作成する細かいレベルの詳細は必要ありませんが、文書作成者はコンテンツを心配し、スタイルの配置は考慮しません(Word経由、アプリケーションの手動および外部)。

経験から、iTextSharpを使用すると、バーコードを挿入するセクションの上に要素をフローティングしようとすると、多くの問題が発生します。このシナリオでは、のドキュメント作成ツールには厄介な傾向があります。私たちは、iTextSharpのサポートとバージョンアップで何週間もの間、何週間も耐えましたが、すべてのシナリオで正しく動作するようにはなりませんでした。

コメントで説明したように、コードをどのように書いているのか(本当に必要な場合を除き、すべてのコードをスクラップしてMailMergeで開始することはできません)プレースホルダブロックは、iTextSharpPdfBuilder apiで見つけることができます。ブックマークの場所を設定するのが最も簡単な方法だろうと思います。

独自のページにバーコードを表示することができます(可能な場合)。これを行うにはコードが既に必要です(ペーストビンのリンクに324行)。

// create doc... 
// reopen doc and get page count 
doc.NewPage(); 
// add barcode with page count + 1 
// save 
+0

私は実際に差し込み印刷からこの新しいシステムに移行しています。複数のフォームがある場合は複数の表紙(または表紙の組み合わせ、それは私たちが現在持っているものであり、維持するのが難しくなっている)。私は、コンテンツとフォームの関係を保存し、スタッフからの要求に基づいてドキュメントを生成するデータベースシステムを使用しています。 –

+1

私は文書を閉じる/再オープンするオプションを選択してそこに追加しました。これは私にとっては最も集中力がないため、自動化されたプロセスとして実行されるため、実行時にはあまり気にしません。あなたの提案をありがとう。今後の提案についてもこれを監視していきます。 –

+0

JIRAの発行IDは何ですか?あなたの質問にできるだけ早く答えられなかった理由をチェックしたいと思います。 –

関連する問題