1

ラベルを作成するための WinForm があります。

を呼び出し、 のを使用しPrintPreviewDialogて情報を表示します。PrintPageEventArgsPrintDocumentPrintPageEventHandler

void Document_Printed(object sender, PrintPageEventArgs e) {
  // Code goes here
}

ラベルが 8.5x11 レターに向かう小さな住所ラベルである場合PrintPreviewDialogPageSettings.PaperSize.

例: 選択したメディア (Avery プリンター ラベルなど) に 4 つのアイテムが収まるとします。

  • エンド ユーザーが 1 ~ 4 部の印刷を指定した場合、印刷プレビュー ダイアログにすべての部数が表示されるようにします。

  • エンド ユーザーが 4 つ以上の項目を指定した場合、印刷プレビュー ダイアログには複数のページが表示されます (これまで複数のページに取り組んだことはありません)。

PrintPageEventHandlerラベルのサイズに合わせてデータのサイズを変更できますが、に複数のラベルを表示する方法がわかりませんPrintPreviewDialog

誰かがこれがどのように行われるかを教えてもらえますか? シートごとに複数のラベル (ドキュメント?) を表示および印刷するにはどうすればよいですか?

編集:これは、2 つの RectangleF オブジェクトに基づく私のコードです: pageRect と LabelRect:

void Document_Printed(object sender, PrintPageEventArgs e) {
  if (printPreview == null) return;
  int labelSupport = 1;
  RectangleF pageRect = new RectangleF(0, 0, printPreview.Document.DefaultPageSettings.PaperSize.Width, printPreview.Document.DefaultPageSettings.PaperSize.Height);
  float fW = (pageRect.Width < LabelRect.Width) ? (pageRect.Width / LabelRect.Width) : (LabelRect.Width / pageRect.Width);
  float fH = (pageRect.Height < LabelRect.Height) ? (pageRect.Height / LabelRect.Height) : (LabelRect.Height / pageRect.Height);
  // START Portion I need HELP with!
  if (1 < LabelsPerPage) {
    if (Landscape) {
    } else {
    }
  } else {
    if (Landscape) {
    } else {
    }
  }
  // END (I think) Portion I need HELP with!
  SizeF ratio = new SizeF(fW, fH);
  Graphics G = e.Graphics;
  foreach (Label item in labelList) {
    Console.WriteLine(item.Name);
    using (SolidBrush b = new SolidBrush(Color.Black)) {
      using (Pen p = new Pen(b)) {
        float x = ratio.Width * (float)item.Location.X;
        float y = ratio.Height * (float)item.Location.Y;
        float w = ratio.Width * (float)item.Size.Width;
        float h = ratio.Height * (float)item.Size.Height;
        RectangleF r = new RectangleF(x, y, w, h);
        G.DrawString(item.Text, item.Font, b, r);
      }
    }
  }
}

編集 2: 1 ページに 2 つ以上のドキュメントを印刷する方法が必要です。この重要な点については、まだ何も触れられていません。それが私が必要とする答えです。

4

1 に答える 1

1

最初のページの後にページを印刷するのは、実際には非常に簡単です。PrintPageEventArgs HasMorePages プロパティを true に設定するだけです。

HasMorePages注意が必要な部分は、falseに設定してこれをいつ停止するかを知ることです。これは、各印刷ジョブのデータをリストに保存し、インデックス値を使用してこのリストのどこにいるかを追跡することで実現しました。

PrintPage イベントが発生するたびに、印刷するページの詳細を PrintPage イベントに供給するために List で使用するインデックスをインクリメントします。最後の要素にいる場合は、HasMorePages を false に設定します。

void Document_Printed(object sender, PrintPageEventArgs e) { 
   // Get data for this page.
   //xxx =  pageDataList[indexValue];

   // Code to print stuff.

   indexValue++;
   e.HasMorePages = (pageDataList.Length == indexValue);
}

このアプローチは、おそらくあなたのコードに表示される labelList を使用して、あなたにとってもうまくいく可能性があります。4 つのバッチで印刷するので、明らかにロジックを少し調整する必要がありますが、アイデアは理解できると思います。

于 2011-04-27T21:05:35.147 に答える