2

これは、itextsharp ライブラリを使用する vb.net アプリです。私が実行しているのは、次のコードが非常に冗長になっていることです。これは、私の意見では、物事を行うためのクリーンな方法ではありません。しかし、私はそれを別の関数に分割する方法を理解できないようです。その関数では、単に文字列 x_Cord、y_Cord、tilt を渡し、a) 渡すときに配列として入るか、 b)それを必要とする各行に対してそれを行います...その後、関数はcontentBytesに必要な情報を返します...以下は、非常に冗長になってしまうものと非常に似ています。

Dim cb As PdfContentByte = writer.DirectContent

上記を含めたのは、明確にするために cb が宣言されているものを示すためだけです。

cb.BeginText()
cb.SetFontAndSize(Californian, 36)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "CERTIFICATE OF COMPLETION", 396, 397.91, 0)
cb.SetFontAndSize(Bold_Times, 22)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, name, 396, 322.35, 0)
cb.SetFontAndSize(Bold_Times, 16)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, _hours + " Hours", 297.05, 285.44, 0)
cb.SetFontAndSize(Bold_Times, 16)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, _dates, 494.95, 285.44, 0)
cb.SetFontAndSize(Bold_Times, 16)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, _class1, 396, 250.34, 0)
If Not String.IsNullOrWhiteSpace(_class2) Then
    cb.SetFontAndSize(Bold_Times, 16)
    cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, _class2, 396, 235.34, 0)
End If
cb.SetFontAndSize(Copper, 16)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, _conf_num + _prefix + " Annual Conference " + _dates, 396, 193.89, 0)
cb.SetFontAndSize(Bold_Times, 13)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Some Name", 396, 175.69, 0)
cb.SetFontAndSize(Bold_Times, 10)
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Some Company Manager", 396, 162.64, 0)
cb.EndText()

これを独自の関数にするアイデアはありますか?

4

1 に答える 1

2

あなたは「難しい方法」でコンテンツを追加しています。もし私があなたなら、コンテンツで aPhraseまたは aParagraphを作成する別のクラス/ファクトリ/メソッドを作成します。例えば:

protected Font f1 = new Font(Californian, 36);
protected Font f2 = new Font(Bold_times, 16);

public Phrase getCustomPhrase(String name, int hours, ...) {
  Phrase p = new Phrase();
  p.add(new Chunk("...", f1));
  p.add(new Chunk(name, f2);
  ...
  return p;
}

次に、ColumnText を使用してPhraseorParagraphを正しい位置に追加します。の場合Phrase、メソッドを使用しColumnText.showTextAligned()ます。の場合、次のParagraph構造を使用します。

ColumnText ct = new ColumnText(writer.DirectContent);
ct.setSimpleColumn(rectangle);
ct.addElement(getCustomParagraph(name, hours, ...));
ct.go();

前者 ( a を使用Phrase) は、折り返す必要のない 1 行のみを記述し、任意の方向に向ける場合に最適です。

後者 (複合モードParagraphでを使用) は、特定の長方形 (左下隅と右上隅の座標によって定義される) 内にテキストを追加する場合に最適です。

あなたが取ったアプローチはうまくいきますが... PDF構文をほとんど「手動で」書く必要があります。これはより難しく、エラーが発生しやすくなります。あなたはすでにそれを発見しました、そうでなければあなたは質問をしないでしょう;-)

良い質問です。賛成します。

于 2012-11-23T07:59:44.043 に答える