Распечатать 3 записи на странице в PDF - PullRequest
1 голос
/ 28 августа 2011

Я хочу создать динамические страницы документа PDF в соответствии с моей записью. Пожалуйста, помогите мне.

Я хочу напечатать 3 записи на странице.

string[] collection = {
    "vivek", "kashyap", "viral", "darshit", "arpit", "sameer", "vanraj"
};

PdfDocument pdfDoc = new PdfDocument();

int records = collection.Length;
int perpage = 3;
int pages = (int)Math.Ceiling((double)records / (double)perpage);


for (int p = 0; p < pages; p++)
{          
    PdfPage pdfPage = new PdfPage();
    pdfPage.Size = PageSize.Letter;
    pdfDoc.Pages.Add(pdfPage);
    XFont NormalFont = new XFont("Helvetica", 10, XFontStyle.Regular);

    using (var pdfGfx = XGraphics.FromPdfPage(pdfPage))
    {
        for (int i = 0,next = 100; i < collection.Length; i++)
        {
            pdfGfx.DrawString( "Name : " + collection[i].ToString()
                             , NormalFont, XBrushes.Black, 55, next
                             , XStringFormats.Default);
            next += 20;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Я предполагаю, что код, который вы представили, показывает те же самые главные записи? Что вам нужно сделать, это поддерживать начало каждой 3 записи при переходе от страницы к странице. Я назвал эту переменную idx и обновил ваш код ниже (заметьте, я фактически не скомпилировал его, кроме как в моей голове).

string[] collection = { "vivek", "kashyap", "viral", "darshit", "arpit", "sameer", "vanraj" };

PdfDocument pdfDoc = new PdfDocument();

int records = collection.Length;
int perpage = 3;
int pages = (int)Math.Ceiling((double)records / (double)perpage);

int idx = 0;

for (int p = 0; p < pages; p++)
{

    PdfPage pdfPage = new PdfPage();
    pdfPage.Size = PageSize.Letter;
    pdfDoc.Pages.Add(pdfPage);
    XFont NormalFont = new XFont("Helvetica", 10, XFontStyle.Regular);
    using (var pdfGfx = XGraphics.FromPdfPage(pdfPage))
    {
        for (int i = 0,next = 100; i < perpage; i++)
        {
            if ((idx + i) >= records.length) break;
            pdfGfx.DrawString("Name : " + collection[idx  + i].ToString(), NormalFont,
                XBrushes.Black, 55, next, XStringFormats.Default);

            next += 20;
        }
    }

    idx += perpage;

}
0 голосов
/ 28 августа 2011

Я считаю, что с этим кодом:

for (int i = 0,next = 100; i < collection.Length; i++)

вы зацикливаетесь на всех записях своей коллекции.

вам следует изменить код и напечатать только 3 записи, после чего вы можете переключитьсяна следующую страницу и распечатайте следующие 3 записи и т. д.

вы можете сделать это с помощью команды break, которая выходит из цикла, но у вас должна быть переменная для хранения ссылки, индекса или последней напечатанной записи, чтобывы можете перейти к следующему на следующей странице.

Я бы переосмыслил весь код, потому что может быть, что вложенность циклов могла бы быть улучшена, например, лично у меня был бы основной цикл вверхний уровень, который зацикливается на всех записях, а не на всех страницах, так что вы можете переключаться на следующую страницу в теле основного цикла, но никогда не оставлять цикл на всех записях, пока все они не будут распечатаны.

...