الكتابة إلى DirectContent مع ColumnText لا تحديث pdfdocument.getverticalposition

StackOverflow https://stackoverflow.com/questions/1637048

  •  06-07-2019
  •  | 
  •  

سؤال

ايم باستخدام itextSharp لإنشاء PDF ، ولدي موقف حيث الحاجة إلى استخدام DirectContent عبر columntext.

المشكلة هي أنه بعد كتابة النص عبر كائن 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.add بعد إضافة محتوى إلى DirectContent ، إذا لم يكن من الممكن تحديث موضع Y الحالي على المستند أو لم يتم تحديثه بشكل تلقائي.

هل كانت مفيدة؟

المحلول

لسوء الحظ ، لا يمكن معالجة مجال Currentheight للوثيقة. لذلك عندما تقوم بإدراج كائن محدد تمامًا باستخدام DirectContent ، لا يمكنك "فرض" المحتوى التالي الذي تم إضافته إلى المستند المراد إدراجه بعد المحتوى المطلق.

يبدو أن الطريقة الوحيدة هي تتبع الموضع الرأسي بنفسك وإضافة كل المحتوى تمامًا.

نصائح أخرى

يمكنك اتباع كائن نص العمود الخاص بك مع كائن MulticolumnText. يمكنك بعد ذلك وضع جميع كائنات المستند المتبقية في كائن 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top