天天看點

Winform 列印PDF順序混亂,擷取列印隊列

工作中PDF列印順序混亂着實讓我疼痛了好久,其實決絕方法非常簡單,但沒有想到這個點子的時候确實讓我走了很多彎路

這裡文章寫出來并不是為了炫耀什麼,隻是覺得發現些好東西就分享出來而已,同時也做個記錄,友善以後查找

開始正文

既然要解決列印順序混亂,那麼必須先要實作列印PDF功能,實作PDF列印的方法很多,網上随便一搜就可以找到,這裡我貼上自己的列印方法,其實也是網上找到的,稍稍做了修改

這個列印方法非常友善,隻要你的電腦安裝了可以閱讀PDF文檔的軟體,都可以列印,不用特定的軟體Adobe Reader、Adobe Acrobat XI等。

但是 當你連續列印多個PDF文檔的時候就出現列印順序混亂的問題,

經調試發現,我發送列印請求的順和列印機接收到的請求的順序是不一緻的

我的解決方法是目前一個文檔列印完成後,再發送下一個列印請求,為此我想到如下方法:

就是在上面的程序列印中添加阻塞;proc.WaitForExit();注釋說名的很清楚,等待關聯程序退出

代碼如下:

因為PDF列印會關聯你的閱讀PDF文檔軟體,是以沒列印一個PDF文檔就會打開關聯軟體,這樣你必須關掉關聯軟體才會進入下個列印,這樣就很蛋疼了,為此我又做了個線程,這個線程就是實作自動關閉關聯軟體的功能,但是在使用過程中會發現卡主的現象,這樣使用者體驗不好

是以我想到第二種實作方式:在一個列印請求發送給列印機後,就判斷列印機的列印隊列中是存在我發送的列印文檔,如果沒有,則一直等到隊列中已存在列印文檔後,再發送下一個列印請求,要實作這個功能,你必須要先擷取到列印機的列印隊列,

首先要獲得列印機的名稱,我這裡使用的是預設列印,為此要獲得預設列印機的名稱(注:必須是本機的,區域網路的沒時間研究,等有空了再看看)

Winform 列印PDF順序混亂,擷取列印隊列
Winform 列印PDF順序混亂,擷取列印隊列

View Code

然後根據列印機的名稱擷取本地列印機的列印隊列

Winform 列印PDF順序混亂,擷取列印隊列
Winform 列印PDF順序混亂,擷取列印隊列

最後在上面的循環列印的方法裡加上判斷,同時去掉proc.WaitForExit();