Печатать страницы НЕ в списке - PullRequest
0 голосов
/ 29 октября 2018

У меня есть список int, содержащий страницы, которые я НЕ хочу распечатать.

Давайте назовем это skipPages.

Когда я пытался поместить фактическую часть печати в оператор if(skipPages.IndexOf(currentPage)<0), он выводит мне пустые страницы.

public void printPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    List<int> skipPages = new List<int> { 2, 5, 6 };
    if(currentPage<totalPage) e.HasMorePages = true;
    else e.HasMorePages = false;

    if(skipPages.IndexOf(currentPage)<0)
    {
        e.Graphics.DrawString(
            currentPage.ToString(),
            new Font("Times New Roman",12),
            new SolidBrush(Color.Black),
            new Point(10,10));
    }
    currentPage++;

}

И когда я пытался вставить e.HasMorePages = true внутрь, он просто останавливал все после первого пропуска страницы.

public void printPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    List<int> skipPages = new List<int> { 2, 5, 6 };
    if(currentPage<totalPage && skipPages.IndexOf(currentPage)<0) e.HasMorePages = true;
    else e.HasMorePages = false;

    e.Graphics.DrawString(
        currentPage.ToString(),
        new Font("Times New Roman",12),
        new SolidBrush(Color.Black),
        new Point(10,10));
    currentPage++;

}

Может кто-нибудь, пожалуйста, научит меня, как правильно настроить его, пожалуйста!?

Очень ценится !!!

1 Ответ

0 голосов
/ 29 октября 2018

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

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

List<int> skipPages = new List<int> { 2, 5, 6 };

private void printDocument1_BeginPrint(object sender, PrintEventArgs e)
{
    currentPage = 0;
}

public void printPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
{
    bool f = false;
    int c = currentPage + 1;

    //Mechanism to check for the last few pages.
    while(skipPages.IndexOf(c)>=0) c++;
    if(c>=totalPages) f=false;
    else f=true;

    while(skipPages.IndexOf(currentPage)>=0) currentPage++; //Actual skipping part.
    if(currentPage<totalPage-1) e.HasMorePages = f;
    else e.HasMorePages = false;
    e.Graphics.DrawString(
         currentPage.ToString(),
         new Font("Times New Roman",12),
         new SolidBrush(Color.Black),
         new Point(10,10));
    currentPage++;
}
...