2016-08-24 16 views
-1
void Main() 
{ 
    PrintDocument docToPrint = new PrintDocument(); 
    docToPrint.PrintPage += FontToPrint_PrintPage; 
    docToPrint.Print(); 
} 
private void FontToPrint_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    //设置单位为厘米后,第一次打印位置正确 
    //第二次打印所在位置缩小100倍,第三次继续缩小 
    e.Graphics.PageUnit = GraphicsUnit.Millimeter; 
    Font font = new Font("Arial", 9, FontStyle.Bold); 
    foreach (PrintDataBase model in printModel.PrintList) 
    { 
     e.Graphics.DrawString(model.Value, font, myBrush, model.XPosition, model.YPosition); 
    } 
} 

これが最初の印刷である:C#の印刷

enter image description here

これは第二の印刷である:

enter image description here

コンテンツがI後ますます小さくなってきていますset e.Graphics.PageUnit = GraphicsUnit.Millimeter; 私はそれで頭を打ちましたが、私はそれを解決できません。

+0

私はあなたのコードでそれを説明するだろう何も表示されません。しかし、どこからQRコードが来るのか分かりません。どのように、いつ、モデルを作成/計算するのか。 – TaW

+0

そういうコードはありません。クリスタルボールには、printModel.PrintListを変更してX/YPositionの値を変更して、印刷に適したコードがあると言われています。そのコードは一度だけ実行する必要があります。 –

答えて

0

私はそれがモデルによって引き起こされているのではないと確信していますが、単位ミリメートルによって引き起こされました。今私はこれを解決する方法を知らない。

ので打撃としてcompeletコード:

public class PrintEntity { 

    public bool HorizontalFlip { get; private set; } 
    public bool VerticalFlip { get; private set; } 
    public float PageSizeW { get; private set; } 
    public float PageSizeH { get; private set; } 
    public List<PrintDataBase> PrintList { get; private set; } 
    public void SetValue(float _PageSizeW,float _PageSizeH,List<PrintDataBase> _PL 
     ,bool _HF=false,bool _VF=false) 
    { 
     HorizontalFlip = _HF; 
     VerticalFlip = _VF; 
     PageSizeW = _PageSizeW; 
     PageSizeH = _PageSizeH; 
     PrintList = _PL; 
    } 
} 
    public class PrintDataBase { 
    public int PType { get; private set; } 
    public float XPosition { get; private set; } 
    public float YPosition { get; private set; } 
    public bool IsEnable { get; private set; } 
    public int FontSize { get; private set; } 
    public bool IsBold { get; private set; } 
    public int Width { get; private set; } 
    public int Height { get; private set; } 
    public string Value { get; private set; } 
    public void SetValue(float _XPosition,float _YPosition,int _Width,int _Height, 
     int _FontSize, string _Value, int _PType = 0, bool _IsBold = false, bool _IsEnable = false) 
    { 
     XPosition = _XPosition; 
     YPosition = _YPosition; 
     Width = _Width; 
     Height = _Height; 
     FontSize = _FontSize; 
     PType = _PType; 
     IsBold = _IsBold; 
     IsEnable = _IsEnable; 
     Value = _Value; 
    } 
} 

private void FontToPrint_PrintPage(object sender, PrintPageEventArgs ev) 
     { 
      Graphics e = ev.Graphics; 
      float pdix = e.DpiX/25.4F; 
      float pdiy = e.DpiY/25.4F; 
      e.PageUnit = GraphicsUnit.Millimeter; 
      Font font = new Font("Arial", 20, FontStyle.Bold); 
      SolidBrush brush = new SolidBrush(Color.Black); 
      printModel.PrintList.RemoveAll(m => (m.IsEnable == false)); 

      foreach (PrintDataBase model in printModel.PrintList) 
      { 
       if (model.PType == 2) 
       { 
        //Create QR Code Form Google.zxing 
        Bitmap codeImg = CreatCodeImg(model.Value, (int)(model.Width * pdix), (int)(model.Height * pdiy)); 
        e.DrawImage(codeImg, model.XPosition, model.YPosition, model.Width, model.Height); 
        continue; 
       } 
       if (model.IsBold) 
       { 
        font = new Font("Arial", model.FontSize, FontStyle.Bold); 
       } 
       else 
       { 
        font = new Font("Arial", model.FontSize); 
       } 
       e.DrawString(model.Value, font, brush, model.XPosition , model.YPosition); 
      } 
     }