我有一個通過tcp/ip接收打印機數據的服務。當收到數據時,是否有可靠的,有效的方式來檢查數據流並確定數據是PostScript還是PCL數據?例如,我可以在數據流的開頭找到指示格式的字符嗎?確定接收到的數據是PostScript還是PCL
回答
PostScript數據必須以 「%!PS」 或 「%!PS」 開始 - 這可能是一個較長的可讀的字符串,如 「%PS-的Adobe-3.0!」 - 但是這基本上是這樣。
最有可能的PCL有類似的簽名 - 我記得看到它的過去。
在開始PCL或PostScript之前,您需要注意PJL命令。如果您有PJL在你經常會看到一個PJL命令,告訴你的數據類型是具有以下什麼開始命令「@PJL ENTER LANGUAGE = PCLXL」 – BBoy 2012-04-11 20:06:04
雖然具體implementions可能需要爲此,'/%!.*/每個PRLM字符串不是Postscript語言的要求。這是DSC公約的一部分。 – 2012-04-12 04:11:11
輸入語言命令怎麼樣?這可以依靠嗎? – NYSystemsAnalyst 2012-04-12 12:12:40
我可能只是計算文件中轉義字符的數量。 PCL將有他們的gobs。後記將有%符號的gobs。這不是一個完美的解決方案,但它很簡單,我敢打賭它實際上相當可靠。
唯一的「真正」的方式,我可以看到這樣做是真正解析PCL和解析PostScript和看看哪一個。
我將添加我的2¢。
像其他人講到這裏,你的第一個刺在編程識別該文件是看前兩個字符。如果與%!
啓動時,它是在PostScript,如果它與一個轉義字符(十六進制1B
,華僑城033
,ASCII 27
)開始,因爲很可能PCL將PCL命令啓動,那麼它是PCL。這可能會解決99%需要處理的文檔。如果還不知道,那麼您可以在文檔中搜索showpage
字符串。如果是PostScript,則必須有一個showpage來呈現頁面。如果找不到一個文件,並且文件中有任何轉義字符,則您知道它是PCL,並且如果沒有showpage,並且沒有轉義字符,您可以在PCL一側犯錯,因爲原始文本文件是有效的PCL,並且打印機可以在它們到來時使它們變得光滑。
- 1. 系統如何識別接收到的數據包是TCP還是UDP?
- 2. 確定參數是類還是協議
- 3. 確定char是數字還是字母
- 4. Excel確定單元格的數據類型是DateTime還是Int
- 5. 如何確定mysql數據庫的類型:是InnoDB還是MyISAM?
- 6. 我可以確定數據是英語還是中文?
- 7. 確定瀏覽器是使用移動數據還是WiFi?
- 8. 確定網址是真的還是假
- 9. 確定連接中的行是奇數還是偶數在SQL Server中
- 10. TCP重複ACK是否確認接收到正確的數據包?
- 11. Foreach循環是確定的還是不確定的?
- 12. 找出接收到的指針是字符串,ushort還是數組
- 13. 如何確認是否是由應用程序接收到數據包
- 14. 如何確定參數是JavaScript中的數組還是對象?
- 15. 確定url是pdf還是html文件
- 16. 確定回發是page_load還是itemcommand
- 17. 確定InetSocketAddress是IPv6還是IPv4
- 18. Rails確定關聯是has_one還是has_many
- 19. 確定SID是用戶還是組
- 20. 確定Feed是Atom還是RSS
- 21. 確定execvp是成功還是失敗
- 22. 如何確定這是latin1還是utf8?
- 23. $。數據是不確定的
- 24. 確定Winsock2收到的數據包
- 25. iOS:以編程方式確定WiFi連接是2.4Ghz還是5Ghz
- 26. 確定鏈接是文本還是圖像
- 27. 確定非接觸式VISA交易是MSD還是EMV/qVSDC
- 28. Android:確定是否收到廣播
- 29. 確定數組是算術還是幾何級數(來自Coderbyte)
- 30. 確定一個星期是奇數還是偶數
您的打印客戶端在提交的PostScript和/或PCL數據結構中有某種「一致性」嗎?如果是的話,確定文件類型可能非常容易。如果不是,它涉及更多的努力... – 2012-04-19 17:10:03
是的,它們是一致的。我最終在下面的答案中使用了這些信息的組合。我首先搜索PJL ENTER LANGUAGE命令。如果我找到了,我會根據這個價值做出決定。否則,我會搜索%!PS,因爲所有的PostScript數據都應該遵循DSC約定。如果我仍然無法做出決定,我只是默認PCL,因爲這是絕大多數客戶正在使用的。 – NYSystemsAnalyst 2012-04-19 17:57:56