1

すみません、私の英語

ええと、プログラムで何かを印刷する必要がある場合、最初に、マトリックスプリンターで印刷されるフィールドの行と列を含むファイルが読み取られます(ポイントのプリンター、正しい単語が見つかりません)

私の考えは、このように印刷する必要があるフィールドの位置をファイルに書き込むことです

(x,y) フィールド 1、(x,y) フィールド 2、(x,y) フィールド 3、

このようにしてすべてのフィールドを印刷するため、プログラムは印刷用にファイルを読み取る必要があります。このようにして、印刷する必要がある事前印刷されたドキュメントが何かを変更した場合に、フォーマット内のフィールドの位置を変更できます

さまざまな印刷済みの請求書があり、プリンターの方法を調整する必要があるため、これを行いたい

私は PrintDocument について読みましたが、それについての適切な説明が見つかりませんでした。これを読みましたが、非常に単純な例です

誰かが私を正しい方向に導いてくれることを願っています

4

1 に答える 1

0

プリンターの種類 (マトリックス、インクジェット、レーザー) は関係ないと思います。より完全なコード例を次に示します。

http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage.aspx

特定のシナリオでは、各フィールドの請求書フォーマット ファイルから x、y 位置情報を解析する必要があります。x と y を取得したらGraphics、コード例のように PrintPage イベント引数オブジェクトに描画します。

トリッキーな部分は、正しい x および y 位置データのフォーマット ファイルを解析することです。非常に単純なフォーマットを使用することで、物事を簡単に行うことができます。たとえば、次のようにファイルをフォーマットできます。

    x
    y
    [field1]
    x
    y
    [field2]
    ...

たとえば、次のような単純なページを印刷するとします。

    07-31-2013         Invoice             Page 1

    Item               Quantity            Price
    --------           --------            --------
    Sprocket           1                   $100.00
    Cog                2                   $ 25.00

    Total: $150.00

実際の書式設定された請求書ファイルは...

    1
    1
    07-31-2013
    1
    20
    Invoice
    1
    40
    Page 1
    3
    1
    Item
    3
    20
    Quantity
    3
    40
    Price
    4
    1
    --------
    4
    20
    --------
    4
    40
    --------
    5
    1
    Sprocket
    5
    20
    1
    5
    40
    $100.00
    6
    1
    Cog
    6
    20
    2
    6
    40
    $ 25.00
    8
    1
    Total: $150.00

そして、それを印刷するコードは次のようになります。

// The PrintPage event is raised for each page to be printed. 
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
    int row = 0;
    int col = 0;
    float xPos = 0;
    float yPos = 0;
    float leftMargin = ev.MarginBounds.Left;
    float topMargin = ev.MarginBounds.Top;
    string line = null;

    // Print each line of the file. 
    while (true)
    {
        try
        {
            row = Convert.ToInt32(streamToPrint.ReadLine());
            col = Convert.ToInt32(streamToPrint.ReadLine());
            line = streamToPrint.ReadLine();
        }
        catch
        {
            break;
        }

        xPos = leftMargin + (col * ev.Graphics.MeasureString(" ", printFont, ev.PageBounds.Width));
        yPos = topMargin + (row * printFont.GetHeight(ev.Graphics));

        ev.Graphics.DrawString(line, printFont, Brushes.Black, xPos, yPos, new StringFormat());
    }
}
于 2013-07-31T17:44:40.790 に答える