工作中pdf列印順序混亂著實讓我疼痛了好久,其實決絕方法非常簡單,但沒有想到這個點子的時候確實讓我走了很多彎路
這裡文章寫出來並不是為了炫耀什麼,只是覺得發現些好東西就分享出來而已,同時也做個記錄,方便以後查詢
開始正文
既然要解決列印順序混亂,那麼必須先要實現列印pdf功能,實現pdf列印的方法很多,網上隨便一搜就可以找到,這裡我貼上自己的列印方法,其實也是網上找到的,稍稍做了修改
process proc = new這個列印方法非常方便,只要你的電腦安裝了可以閱讀pdf文件的軟體,都可以列印,不用特定的軟體adobe reader、adobe acrobat xi等。process();
proc.startinfo.createnowindow = false
;proc.startinfo.windowstyle =system.diagnostics.processwindowstyle.hidden;
proc.startinfo.useshellexecute = true
;proc.startinfo.filename = itempath;//
列印檔案路徑(本地完整路徑包括檔名和字尾名)
proc.startinfo.verb = "
print";
proc.start();
proc.close();
但是 當你連續列印多個pdf文件的時候就出現列印順序混亂的問題,
經除錯發現,我傳送列印請求的順和印表機接收到的請求的順序是不一致的
就是在上面的程序列印中新增阻塞;proc.waitforexit();注釋說名的很清楚,等待關聯程序退出
**如下:
foreach (var itempath in因為pdf列印會關聯你的閱讀pdf文件軟體,因此沒列印乙個pdf文件就會開啟關聯軟體,這樣你必須關掉關聯軟體才會進入下個列印,這樣就很蛋疼了,為此我又做了個執行緒,這個執行緒就是實現自動關閉關聯軟體的功能,但是在使用過程中會發現卡主的現象,這樣使用者體驗不好filepathlist)
}
因此我想到第二種實現方式:在乙個列印請求傳送給印表機後,就判斷印表機的列印佇列中是存在我傳送的列印文件,如果沒有,則一直等到佇列中已存在列印文件後,再傳送下乙個列印請求,要實現這個功能,你必須要先獲取到印表機的列印佇列,
首先要獲得印表機的名稱,我這裡使用的是預設列印,為此要獲得預設印表機的名稱(注:必須是本機的,區域網的沒時間研究,等有空了再看看)
//view code引入命名空間:using system.runtime.interopservices;
[dllimport("
winspool.drv
", charset = charset.auto, setlasterror = true
)]
private
static
extern
bool setdefaultprinter(string
printername);
[dllimport(
"winspool.drv
", charset = charset.auto, setlasterror = true
)]
private
static
extern
bool getdefaultprinter(stringbuilder pszbuffer, ref
intpcchbuffer);
//////
獲取預設印表機
/// ///
public
static
string
getdefaultprinter()
int lastwin32error =marshal.getlastwin32error();
if (lastwin32error ==error_insufficient_buffer)
lastwin32error =marshal.getlastwin32error();
}if (lastwin32error ==error_file_not_found)
return"";
}
然後根據印表機的名稱獲取本地印表機的列印佇列
///view code///獲取印表機的列印列表
/// ///
印表機名稱,本地
///返回列印佇列中文件名稱字串,多個之間用逗號連線
public
static
string getprintjobs(string
printname)
//cleanup unmanaged memory
marshal.freehglobal(pdata);
//close printer
closeprinter(handle);
return
result.tostring();
}
最後在上面的迴圈列印的方法裡加上判斷,同時去掉proc.waitforexit();
foreach (string pdfpath in到此 大功告成!paths)}}
PHP列印預覽PDF
functioncreatepdffile frontdata 列印預覽 public function printexternal request request contract list function q first arr foreach data contract list as k ...
pdf的列印控制
首先,要明確一件事,印表機 或者說列印驅動 列印文件內容的方式有兩種 1.讓文件 豎著 輸出到列印紙 portrait 2.讓文件 橫著 輸出到列印紙 landscape 如何控制呢?如何控制縱打和橫打呢?新建乙個類似a4的空文件,將內容豎著渲染進去就是縱打 將內容橫著渲染進去就是橫打 adobe開...
ireport列印pdf字型問題
使用ireport列印pdf時需要匯入字型 1 ireport預設pdf字型為stsong light,編碼預設為unigb ucs2 h 2 需要匯入 ireport 5.6.0 ireport modules ext itextasian.jar 3 如果不使用預設字型時,需要匯入字型,並設定編...