Comment imprimer avec un format de papier personnalisé dans winforms

J'essaie d'imprimer un document dans mon application. Mais sur différentes imprimantes-je obtenir des résultats différents. C'est mon code:

PaperSize paperSize = new PaperSize("My Envelope", 440, 630);
paperSize.RawKind = (int)PaperKind.Custom;

PrintDocument pd = new PrintDocument();
pd.PrintPage += (sender, args) => Console.Out.WriteLine("Printable Area for printer {0} = {1}", args.PageSettings.PrinterSettings.PrinterName, args.PageSettings.PrintableArea);

pd.DefaultPageSettings.PaperSize = paperSize;
pd.DefaultPageSettings.Landscape = true;
pd.DefaultPageSettings.Margins   = new Margins(60, 40, 20, 20);

Console.Out.WriteLine("My paper size: " + pd.DefaultPageSettings.PaperSize);

PrintDialog printDialog = new PrintDialog(); //to choose printer
printDialog.Document = pd;

if (printDialog.ShowDialog(this) == DialogResult.OK)
{
    //pd.DefaultPageSettings.PaperSize = paperSize; //uncomment to override size from dialog

    Console.Out.WriteLine("Paper size for printer {0} = {1}", printDialog.PrinterSettings.PrinterName, pd.DefaultPageSettings.PaperSize);
    _sptTxtControl.Print(pd);
}

Lorsque la boîte de dialogue s'affiche, j'ai deux imprimantes Samsung et HP. C'est la sortie de la console pour ces deux:

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Paper size for printer HP LaserJet 1022n = [PaperSize A4 Kind=A4 Height=1169 Width=827]
Printable Area for printer HP LaserJet 1022n = {X=21,83333,Y=15,66667,Width=789,3333,Height=1137,333}

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Paper size for printer Samsung SCX-4x28 Series PCL6 = [PaperSize A4 Kind=A4 Height=1169 Width=827]
Printable Area for printer Samsung SCX-4x28 Series PCL6 = {X=17,33333,Y=17,16667,Width=792,3333,Height=1135,167}

Vous pouvez voir que le dialogue est en train de changer la taille A4. Donc, si vous uncommemt ligne après showdialog je suis de l'application de papier. La sortie lors de l'impression ressemble à ceci:

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Paper size for printer HP LaserJet 1022n = [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Printable Area for printer HP LaserJet 1022n = {X=21,83333,Y=15,66667,Width=789,3333,Height=1137,333}

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Paper size for printer Samsung SCX-4x28 Series PCL6 = [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Printable Area for printer Samsung SCX-4x28 Series PCL6 = {X=16,66667,Y=20,Width=400,1667,Height=589,8333}

Vous pouvez voir que l'imprimante Samsung a de bonnes Zone Imprimable tandis que HP n'a pas. HP a toujours A4 taille de ce que je vais changer dans le code (set originatmargins etc.)

Si je change les paramètres de papier dans les propriétés d'impression (désolé pour les polonais de dialogue):

Comment imprimer avec un format de papier personnalisé dans winforms

et ne pas changer la taille du papier après montrant la boîte de dialogue HP d'impression, tout est ok. La sortie ressemble à ceci:

My paper size: [PaperSize My Envelope Kind=Custom Height=630 Width=440]
Paper size for printer HP LaserJet 1022n = [PaperSize My Envelop Format Kind=Custom Height=630 Width=440]
Printable Area for printer HP LaserJet 1022n = {X=18,66667,Y=16,Width=405,3333,Height=597,3333}

Mais je ne veux pas forcer l'utilisateur à enregistrer au format personnalisé pour son imprimante. J'ai essayé aussi ce avec une imprimante Kyocera - il fonctionne, mais pour les deux autres imprimantes HP ça ne marche pas.

Et le pire, c'est que Word 2010 imprime ok le même document RTF avec cette taille sur les deux imprimantes, co je ne peux pas blâmer le pilote HP.

Des idées?

  • Bonjour! Avez-vous trouvé une solution à cela?
  • Non, j'ai changé mon travail 😉
  • Oups! En espérant ne pas avoir à le faire aussi!!
  • hahahhaha, vous avez fait ma journée avec cette blague... 😀
InformationsquelleAutor bizon | 2011-08-18