2012-04-11 21 views
1

我有一個通過tcp/ip接收打印機數據的服務。當收到數據時,是否有可靠的,有效的方式來檢查數據流並確定數據是PostScript還是PCL數據?例如,我可以在數據流的開頭找到指示格式的字符嗎?確定接收到的數據是PostScript還是PCL

+0

您的打印客戶端在提交的PostScript和/或PCL數據結構中有某種「一致性」嗎?如果是的話,確定文件類型可能非常容易。如果不是,它涉及更多的努力... – 2012-04-19 17:10:03

+0

是的,它們是一致的。我最終在下面的答案中使用了這些信息的組合。我首先搜索PJL ENTER LANGUAGE命令。如果我找到了,我會根據這個價值做出決定。否則,我會搜索%!PS,因爲所有的PostScript數據都應該遵循DSC約定。如果我仍然無法做出決定,我只是默認PCL,因爲這是絕大多數客戶正在使用的。 – NYSystemsAnalyst 2012-04-19 17:57:56

回答

-1

PostScript數據必須以 「%!PS」 或 「%!PS」 開始 - 這可能是一個較長的可讀的字符串,如 「%PS-的Adobe-3.0!」 - 但是這基本上是這樣。

最有可能的PCL有類似的簽名 - 我記得看到它的過去。

+3

在開始PCL或PostScript之前,您需要注意PJL命令。如果您有PJL在你經常會看到一個PJL命令,告訴你的數據類型是具有以下什麼開始命令「@PJL ENTER LANGUAGE = PCLXL」 – BBoy 2012-04-11 20:06:04

+3

雖然具體implementions可能需要爲此,'/%!.*/每個PRLM字符串不是Postscript語言的要求。這是DSC公約的一部分。 – 2012-04-12 04:11:11

+0

輸入語言命令怎麼樣?這可以依靠嗎? – NYSystemsAnalyst 2012-04-12 12:12:40

0

我可能只是計算文件中轉義字符的數量。 PCL將有他們的gobs。後記將有%符號的gobs。這不是一個完美的解決方案,但它很簡單,我敢打賭它實際上相當可靠。

唯一的「真正」的方式,我可以看到這樣做是真正解析PCL和解析PostScript和看看哪一個。

1

我將添加我的2¢。

像其他人講到這裏,你的第一個刺在編程識別該文件是看前兩個字符。如果與%!啓動時,它是在PostScript,如果它與一個轉義字符(十六進制1B,華僑城033,ASCII 27)開始,因爲很可能PCL將PCL命令啓動,那麼它是PCL。這可能會解決99%需要處理的文檔。如果還不知道,那麼您可以在文檔中搜索showpage字符串。如果是PostScript,則必須有一個showpage來呈現頁面。如果找不到一個文件,並且文件中有任何轉義字符,則您知道它是PCL,並且如果沒有showpage,並且沒有轉義字符,您可以在PCL一側犯錯,因爲原始文本文件是有效的PCL,並且打印機可以在它們到來時使它們變得光滑。