8
votes

Y a-t-il un meilleur moyen d'obtenir la page compter de la page d'un imprimeur?

C'est le meilleur que j'ai proposé:

public static int GetPageCount( PrintDocument printDocument )
{
    printDocument.PrinterSettings.PrintFileName = Path.GetTempFileName();
    printDocument.PrinterSettings.PrintToFile = true;

    int count = 0;

    printDocument.PrintController = new StandardPrintController();
    printDocument.PrintPage += (sender, e) => count++;

    printDocument.Print();

    File.Delete( printDocument.PrinterSettings.PrintFileName );

    return count;
}


1 commentaires

Pas avec PrintDocument lui-même. Vous devrez connaître la quantité de page du fichier que vous souhaitez imprimer via la quantité de ligne et la marge que vous utiliserez et la quantité de ligne que vous souhaitez par page, etc.


3 Réponses :


0
votes

chèque - http: // msdn. microsoft.com/en-us/library/system.drawing.printting.printdocument.Querypagesettings.aspx

Il existe un événement PrintDocument.QuiserypageSettings qui pourrait être traité. S'il est manipulé, il est appelé avant chaque impression d'impression.Printepage. Donc, vous pouvez mettre un compteur là-bas pour compter les pages. De cette façon, vous pouvez éviter deux passes (une passe pour imprimer le DOC au fichier pour compter les pages et la deuxième passe pour l'impression réelle des travaux).

L'URL ci-dessus a un exemple de code pour un comptoir également.

J'espère que cela aide


0 commentaires

1
votes

Déclarez la conception de caractères en tant que impression.previewprintController .

De cette façon, vous imprimez uniquement en mémoire, pas à un fichier.

Je l'utilise dans un projet VB.NET et cela fonctionne parfaitement!


0 commentaires

5
votes

La solution finale serait donc:

public static int GetPageCount(PrintDocument printDocument)
{
    int count = 0;
    printDocument.PrintController = new PreviewPrintController();
    printDocument.PrintPage += (sender, e) => count++;
    printDocument.Print();
    return count;
}


2 commentaires

Je suggérerais de sauvegarder la conception de caractères et de la restituer à la façon dont c'était après avoir fait le faux imprimé. Sans cela, la mienne n'imprimerait pas quand je voulais faire la vraie impression. Donc, ce serait "printController pcBackup = printdocument.printcontroller" au début et "printdocument.printcontroller = pcbackup" juste avant de renvoyer la valeur de comptage.


Comment vous construisez le printDocument ?