SNA 列印伺服器資料過濾 API

你要設定列印資料過濾器 DLL 的路徑。 此 DLL 被所有積極使用 Host Print 服務的會話所使用。 然而,列印資料過濾器 DLL 可以指定是否要將特定會話的列印資料傳遞給它。

此 DLL 的入口如下:

PrtFilterAlloc
取得一個資料緩衝區,用於傳遞列印資料。

PrtFilterFree
表示先前從 DLL 取得的資料緩衝區不再需要,DLL 可以釋放分配給該資源的記憶體。

PrtFilterJobData
允許 DLL 操作列印資料。

PrtFilterJobEnd
通知 DLL 列印工作已結束。

PrtFilterJobStart
通知 DLL 有新的列印工作開始,並允許 DLL 在工作開始時向列印伺服器傳送特殊資料。

以下列出一般列印工作中呼叫序列的範例描述,以說明這些函式的通常使用方式:

  • 當新的列印工作開始時,PrtFilterStartJob 會被呼叫。 DLL 可以在列印資料前回傳一個包含特殊資料的資料緩衝區(例如特殊的橫幅頁面或特殊的印表機初始化字串)。

  • 如果 PrtFilterStartJob 函式中傳送了特殊資料,則會呼叫 PrtFilterFree,並表示用於傳遞特殊資料的資料緩衝區可以被釋放。

    下一連串函式呼叫會重複,直到所有列印資料都傳送完畢:

  • PrtFilterAlloc 被呼叫用來分配一個資料緩衝區,用於在後續呼叫 PrtFilterJobData 時傳遞列印資料。

  • PrtFilterJobData 被呼叫用來將列印資料傳遞給 DLL 以便可能修改。 這讓使用者 DLL 有機會在資料傳送到印表機前操作資料。 若要回傳的修改列印資料需要較大的資料緩衝區,或 DLL 需要使用不同的資料緩衝區來回傳資料,DLL 可能需要重新分配資料緩衝區來回傳這些資料。 如果使用不同的資料緩衝區回傳修改過的列印資料,DLL 也可能選擇釋放用於傳遞輸入列印資料的資料緩衝區。 如果 PrtFilterJobData 回傳了不同的資料緩衝區,則不會以指向原始資料緩衝區的指標呼叫 PrtFilterFree

  • PrtFilterFree 被呼叫用來表示 PrtFilterAlloc 為傳遞輸入資料至 PrtFilterJobData 函式所分配的資料緩衝區可以被釋放。 若 PrtFilterJobData 回傳不同的資料緩衝區,則會呼叫 PrtFilterFree,表示可釋放由 DLL 分配、用於返回修改過列印資料的資料緩衝區。

    當所有列印資料都處理完畢後,最後的序列會發生:

  • PrtFilterEndJob 會被呼叫來指示列印工作結束,並允許 DLL 回傳應送給印表機的特殊資料(例如拖車頁面)。

  • 如果在 PrtFilterEndJob 函式中傳送了特殊資料,就會呼叫 PrtFilterFree,並表示用於傳遞特殊資料的資料緩衝區可以被釋放。