1

自分の記録に従って動的PDFドキュメントページを作成したい。私を助けてください。

1ページに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;
        }
    }
}
4

2 に答える 2

1

あなたが提示したコードが同じトップエントリを表示していると思いますか?あなたがする必要があるのは、ページからページへ移動するときに、各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;

}
于 2011-08-28T11:36:02.397 に答える
0

私はこのコードでそれを信じています:

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

コレクションのすべてのレコードをループしています。

コードを再設計し、そこに3つのレコードのみを印刷する必要があります。その後、次のページに切り替えて、次の3つのレコードを印刷できます。

ループを終了するコマンドでこれを行うことができますbreakが、次のページで次のレコードに進むことができるように、参照、インデックス、または最新の印刷レコードを格納する変数が必要です。

ループのネストを改善できる可能性があるため、コード全体を再考します。たとえば、個人的には、すべてのページではなくすべてのレコードでループするメインループがトップレベルにあるため、次のように切り替えることができます。メインループの本文の次のページですが、すべてのレコードが印刷されるまで、すべてのレコードにループを残さないでください。

于 2011-08-28T11:35:45.440 に答える