2015-09-09 2 views
-1

Я использую PDFsharp для создания страницы PDF. Это очень хорошо подходит для документа с одной страницей. Будет ситуация, когда строки должны будут заполнить две страницы. Всякий раз, когда количество строк равно 20, Я хотел бы создать новую страницу и записать оставшийся контент на нее.Создание нескольких страниц с помощью PDFsharp с использованием C#

Этот код записывает содержимое на первую страницу, но как только количество строк равно 20, оно будет продолжать писать на первой странице , а не перейти ко второму.

Как исправить это, пожалуйста?

PdfDocument document = new PdfDocument(); 
document.Info.Title = "Created with PDFsharp"; 

// Create an empty page 
PdfPage page = document.AddPage(); 

//page.Width = 
//page.Height = 

// Get an XGraphics object for drawing 
XGraphics gfx = XGraphics.FromPdfPage(page); 

//XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always); 

// Create a font 
XFont font = new XFont("Times New Roman", 8, XFontStyle.BoldItalic); 

int headeroneX = 30; 
int headerOney = 25; 
Int32 countLines = 0; 

foreach (var item in queryResult) 
{ 
    if ((playerIndex % TotalNumberOfUsersInGrp) == 0) 
    { 
     gfx.DrawString("Group:" + groupindex, font, XBrushes.DarkRed, new XRect(headeroneX, headerOney, page.Width, page.Height), XStringFormats.TopLeft); 
     groupindex++;   
     headerOney = headerOney + 12; 
    } 
    gfx.DrawString(item.FullName + ',' + item.Rating, font, XBrushes.Black, new XRect(headeroneX, headerOney, page.Width, page.Height), XStringFormats.TopLeft); 
    playerIndex++; 
    headerOney = headerOney + 12; 
    countLines = countLines + 1; 

    if (countLines == 20) 
    { 
     countLines = 1; 
     headerOney = 25; 
     document.AddPage(); 
     gfx.DrawString(item.FullName + ',' + item.Rating, font, XBrushes.Black, new XRect(headeroneX, headerOney, page.Width, page.Height), XStringFormats.TopLeft); 
    } 
} 
+0

Возможный дубликат [PDFsharp - Как создать вторую страницу] (http://stackoverflow.com/questions/21143333/pdfsharp-how-to-create-a-2nd-page) –

ответ

0

Я уверен, что это дубликат.

Вы вызываете AddPage() для создания второй страницы, но продолжайте использовать объект XGraphics, который вы создали для первой страницы. Вы должны использовать возвращаемое значение AddPage() для создания нового объекта XGraphics.

Дубликат этого вопроса:
https://stackoverflow.com/a/21143712/1015447

Другой парень попытался создать новый объект XGraphics, но и не использовать возвращаемое значение AddPage().

Обновление: непроверенный код - я надеюсь, что он скомпилируется.

if (countLines == 20) 
{ 
    countLines = 1; 
    headerOney = 25; 
    // Wrong: document.AddPage(); 
    // Better: 
    page = document.AddPage(); 
    // Also missing: 
    gfx = XGraphics.FromPdfPage(page); 
    gfx.DrawString(item.FullName + ',' + item.Rating, font, XBrushes.Black, new XRect(headeroneX, headerOney, page.Width, page.Height), XStringFormats.TopLeft); 
} 
+0

На самом деле это не дубликат , Я могу создать вторую страницу, но проблема с контентом - проблема. – user2320476

+1

Я все еще думаю, что это дубликат. –

+0

Невозможно использовать XGraphics gfx = XGraphics.FromPdfPage (страница); дважды на странице. Это ошибка. Это неверно – user2320476

-2

Это несколько устаревшая тема или нить, но добавление некоторых сведений для уточнения.

пользователь2320476 не правильный. Вы можете (и разрешено) использовать XGraphics.FromPdfPage (страница); дважды на странице.

Просто убедитесь, что вы выбрали первый, и все готово.

Using (XGraphics gfx = XGraphics.FromPdfPage(page)) 
{ MakeItRain(); } 

или

if (gfx == null) 
gfx.Dispose(); 
XGraphics gfx = XGraphics.FromPdfPage(page); 

То, что он/она, вероятно, относится к тому, что страница не разрешено иметь несколько объектов активных XGraphics.