0

幅 80 文字、高さ 66 文字のモノスペース フォントを使用してテキストを印刷したいと考えています。目標は、生のテキストをインパクト プリンターに送信することを模倣することです。

ここにいくつかのコードがあります:

public void Print(string printerName, string text, string desc = "")
{
    PrintDialog dialog = new PrintDialog();
    PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
    dialog.PrintQueue = queue;

    PageImageableArea area = queue.GetPrintCapabilities(dialog.PrintTicket).PageImageableArea;

    TextBlock block = new TextBlock();
    block.FontFamily = new FontFamily("Courier New");
    block.Margin = new Thickness(area.OriginWidth, area.OriginHeight, area.OriginWidth, area.OriginHeight);
    block.FontSize = ???
    block.Text = text;
    block.Measure(new Size(area.ExtentWidth, area.ExtentHeight));
    block.Arrange(new Rect(new Point(0, 0), block.DesiredSize));

    dialog.PrintVisual(block, desc);
}

PageImageableArea が私area.ExtentWidthに与えarea.ExtentHeight、実際の印刷寸法 (ピクセル単位) とarea.OriginWidth余白area.OriginHeightのサイズ (ピクセル単位) を理解しています。

ページ全体に正確に 80 文字を収めたい場合は、各文字のarea.ExtentWidth / 80幅をピクセル単位で指定する必要があります。私のarea.ExtentWidthプリンターは 768 なので、各文字の幅は 9.6 ピクセルです。

さらに、ページに正確に 66 行を収めたい場合は、各行のarea.ExtentHeight / 66高さをピクセル単位で指定する必要があります。私のarea.ExtentHeightプリンターの は 1038.66 なので、各行は 15.7 ピクセルの高さにする必要があります。

これらの入力を使用して、各文字の幅が X ピクセルで、折り返すと各行の高さが Y ピクセルになる FontSize を選択するにはどうすればよいですか?

4

1 に答える 1

0

まず、Courier New などの固定サイズのフォントを選択して印刷します。これにより、既知の文字の寸法が得られ、計算が大幅に簡素化されます。プリンターを扱うときは、モニターや OS の設定などによって twip とピクセルの比率が大きく異なるため、「ピクセル」ではなく twip を使用することをお勧めします。.NET で Twips をピクセルに変換するにはどうすればよいですか?

印刷を扱うときに twip を使用する理由は、twip がフォント ポイント サイズと非常に密接に変換されるためです。フォントの「ポイント」は 1/72 インチです。同様に、1 インチは 1440 twip です。したがって、フォント「ポイント」ごとに 20 twip (1440 / 72) があります。

正確に制御できる固定フォント サイズを取得したら、概説した計算によってフォント サイズが得られます。たとえば、648 twipの印刷スペースがある場合、72 で割ると、アプリケーションで使用するフォント「ポイント」は 9 になります。

于 2013-02-25T21:01:32.927 に答える