Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ColumnText写入DirectContent不会更新PdfDocument.GetVerticalPosition_C#_Itextsharp_Itext - Fatal编程技术网

C# 使用ColumnText写入DirectContent不会更新PdfDocument.GetVerticalPosition

C# 使用ColumnText写入DirectContent不会更新PdfDocument.GetVerticalPosition,c#,itextsharp,itext,C#,Itextsharp,Itext,我正在使用ITextSharp生成PDF,并且需要通过ColumnText使用DirectContent 问题是,在通过ColumnText对象写入文本后,PdfDocument.GetVerticalPosition尚未更新?参见以下失败的测试: public void TestGetVerticalPositionIsUpdated() { PdfContentByte cb = Writer.DirectContent; var column

我正在使用ITextSharp生成PDF,并且需要通过ColumnText使用DirectContent

问题是,在通过ColumnText对象写入文本后,PdfDocument.GetVerticalPosition尚未更新?参见以下失败的测试:

    public void TestGetVerticalPositionIsUpdated()
    {
        PdfContentByte cb = Writer.DirectContent;
        var columnText = new ColumnText(cb);

        float position1 = Writer.GetVerticalPosition(true);
        columnText.SetSimpleColumn(Document.Left,
                                   Document.Bottom, 
                                   Document.Right, 
                                   position1, 
                                   0, 
                                   Element.ALIGN_JUSTIFIED);

        columnText.AddText(new Phrase("Test test test test test\nTest test test test test"));
        columnText.Go();

        float position2 = Writer.GetVerticalPosition(true);
        Assert.AreEqual(position1, position2);
    }
不管怎样,都可以告诉作者或文档更新文档

obvoius解决方案是使用PdfDocument.SetVerticalPosition(如果它只存在):-)

还是我误解了使用DirectContent的整个概念


在我看来,您无法使用PdfDocument。如果文档上的当前Y位置无法更新或未自动更新,请在将内容添加到DirectContent后添加。

不幸的是,无法操作文档的currentHeight字段。因此,当使用DirectContent插入绝对定位对象时,不能“强制”在绝对定位内容之后插入添加到文档中的下一个内容


看来唯一的办法就是自己跟踪垂直位置,绝对添加所有内容

您可以使用多列文本对象跟随列文本对象。然后将所有剩余的文档对象放置到mct对象中

var mct = new MultiColumnText(yBottomOfColumnText, MultiColumnText.AUTOMATIC);
mct.AddSimpleColumn(doc.Left, doc.Right); //creates one column
for (int i = 0; i < 100; i++)
{
    mct.AddElement(new Paragraph("Test Paragaph Goes HEREEEEEEEE")); //repeats 100 times for test purposes
}

doc.Add(mct);
var mct=new multiclumntext(yBottomOfColumnText,multiclumntext.AUTOMATIC);
mct.AddSimpleColumn(文档左、文档右)//创建一列
对于(int i=0;i<100;i++)
{
mct.AddElement(新的段落(“测试段落到此为止”);//为了测试目的重复100次
}
文件添加(mct);