1

シンプルな 2 列のページを設定しようとしています。最初の列に書き込み、次に 2 番目の列に書き込みます。ただし、次のコードは両方の段落を 2 列目に配置します。現在の列トレースは正しいようです (最初は 0、次に 1)。

私が間違っていることはありますか?

MultiColumnText columns = new MultiColumnText();

columns.AddSimpleColumn(0, 200);
columns.AddSimpleColumn(200, 400);

Paragraph para1 = new Paragraph("Para1");
columns.AddElement(para1);

Response.Write(columns.CurrentColumn);//traces 0

columns.NextColumn();

Response.Write(columns.CurrentColumn);//traces 1

Paragraph para2 = new Paragraph("Para2");
columns.AddElement(para2);

doc.Add(columns);

どうもありがとう

オリバー

4

3 に答える 3

2

オブジェクトを操作することができず、(.NET で) オブジェクトを操作するサンプルを見つけることができませんでしたNextColumn()MultiColumnText

AMultiColumnTextを使用すると、文書内での列の作成が比較的簡単になりますが、その代わりに、レイアウトを大幅に制御できなくなります。オブジェクトを使用するColumnTextと、列のレイアウトを大幅に制御できますが、より多くのコードが必要になります。

を使用して何をしようとしているのかの簡単ですが完全な例を次に示しますColumnText

    private void TestColumnText() {
        using (FileStream fs = new FileStream("ColumnTest.pdf", FileMode.Create)) {
            Document doc = new Document();
            PdfWriter writer = PdfWriter.GetInstance(doc, fs);
            doc.Open();

            PdfContentByte cb = writer.DirectContent;
            ColumnText ct = new ColumnText(cb);

            float columnWidth = 200f;
            float[] left1  = { doc.Left + 90f, doc.Top - 80f, doc.Left + 90f, doc.Top - 170f, doc.Left, doc.Top - 170f, doc.Left, doc.Bottom };
            float[] right1 = { doc.Left + columnWidth, doc.Top - 80f, doc.Left + columnWidth, doc.Bottom };
            float[] left2  = { doc.Right - columnWidth, doc.Top - 80f, doc.Right - columnWidth, doc.Bottom };
            float[] right2 = { doc.Right, doc.Top - 80f, doc.Right, doc.Bottom };

            // Add content for left column.
            ct.SetColumns(left1, right1);
            ct.AddText(new Paragraph("Para 1"));
            ct.Go();

            // Add content for right column.
            ct.SetColumns(left2, right2);
            ct.AddText(new Paragraph("Para 2"));
            ct.Go();

            doc.Close();
        }
    }

警告: 前述したように、これは単純な例であり、あなたがやろうとしていることの出発点にはなりません。以下のサイト (特に最初のサイト) のサンプルが役立ちます。

http://www.mikesdotnetting.com/Article/89/iTextSharp-Page-Layout-with-Columns http://www.devshed.com/c/a/Java/Adding-Columns-With-iTextSharp

于 2010-10-01T00:08:33.893 に答える
1

最新バージョンのiTextSharpにはMultiColumnText、自分で作成したクラスが含まれていないことがわかりました。

Public Class SimpleColumnText
    Inherits ColumnText

    Dim workingDocument As Document
    Dim columns As New List(Of Rectangle)
    Dim currentColumn As Integer = 0

    Public Sub New(content As PdfContentByte, columnCount As Integer, columnSpacing As Single, document As Document)
        MyBase.New(content)

        workingDocument = document
        CalculateColumnBoundries(columnCount, columnSpacing)
    End Sub

    Private Sub CalculateColumnBoundries(columnCount As Integer, columnSpacing As Single)
        Dim columnWidth As Single
        Dim columnHeight As Single

        With workingDocument
            columnWidth = ((.PageSize.Width - .LeftMargin - .RightMargin) - (columnSpacing * (columnCount - 1))) / columnCount
            columnHeight = (.PageSize.Height - .TopMargin - .BottomMargin)
        End With

        For x = 0 To columnCount - 1
            Dim llx As Single = ((columnWidth + columnSpacing) * x) + workingDocument.LeftMargin
            Dim lly As Single = workingDocument.BottomMargin
            Dim urx As Single = llx + columnWidth
            Dim ury As Single = columnHeight

            Dim newRectangle As New Rectangle(llx, lly, urx, ury)

            columns.Add(newRectangle)

        Next
    End Sub

    Public Shadows Sub AddElement(element As IElement)
        MyBase.AddElement(element)

        'we have to see if there is a column on the page before we begin
        Dim status As Integer

        If currentColumn = 0 Then
            status = ColumnText.NO_MORE_COLUMN
        End If

        Do
            If status = ColumnText.NO_MORE_COLUMN Then
                If currentColumn = columns.Count Then
                    'we need a new page
                    workingDocument.NewPage()
                    'reset column count
                    currentColumn = 0
                End If
                MyBase.SetSimpleColumn(columns(currentColumn))
                currentColumn += 1
            End If

            status = MyBase.Go()
        Loop While ColumnText.HasMoreText(status)
    End Sub
End Class

Shadowこれは、内の他の関数に簡単に拡張できますColumnText

于 2013-02-08T21:47:32.663 に答える