研究了很久依舊沒成功,但我看 vnc server 可以做到每次在我把專門給 vnc 使用,用來輸出成 pdf 的印表機砍掉之後,再重開機就會自動新增回來,而且擁有比 Microsoft print to PDF
的印表機更多的紙張大小,雖然印表機名稱很類似,但 vnc server 的印表機使用的驅動程式並不是微軟提供的
一開始是找到Microsoft Print to PDF - custom paper sizes possible?,照著步驟在.gdp
跟pdc.xml
這兩個檔案中新增內容,仍是沒在印表機的紙張選單中出現,後來想到直接修改這兩個檔案中原本就有的紙張格式的數值,但還是沒起作用,唯一有效果的地方只有使用 C# 的印表機 API 讀取DefaultPageSettings.PrintableArea
時可以讀到.gdp
檔修改過的PrintableArea
數值
又想到去修改機碼HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Microsoft Print To PDF
內的printMinXExtent
跟printMinYExtent
數值或printMediaSupported
字串,依舊沒用
也有嘗試刪掉列印伺服器
中舊的Microsoft Print to PDF
驅動程式,然後修改C:\WINDOWS\System32\DriverStore\FileRepository
資料夾下,屬於Microsoft Print to PDF
資料夾中的MPDW-PDC.xml
檔,再用這個修改過的檔案重新把Microsoft Print to PDF
裝回來,效果等同於我去修改C:\Windows\System32\spool\V4Dirs
資料夾中屬於Microsoft Print to PDF
印表機的.gdp
以及pdc.xml
,所以還是沒起作用
接著我對照列印伺服器
中的各驅動程式的內容,資料檔案不一定都要是.gpd
,有的是.ini
,有的是.dat
,有的是.d64
,反正就是五花八門,但他們都能自訂使用的紙張格式,瀏覽器中選到印表機時也都有列出的紙張可以選
有人了解印表機驅動程式在 windows 底層運作的原理嗎?到底瀏覽器或 c# 印表機 API 是去哪裡讀取印表機的紙張格式的值呢?我該怎麼修改或修改哪些內容才能新增自訂的紙張格式並且讓瀏覽器跟 c# 印表機 API 都能讀到呢?
用 Windows Server 架 Print Server 吧
去研究機碼跟列印底層是廠商在做的工作,如果你是IT的話還是善用工具就好了
瀏覽器一直都是吃Windows的列印驅動在顯示UI的,之前因為這也是一個資安大漏洞
所以微軟也在這部份跟廠商調整了不少東西,能不動底層就不動,免得一個更新又壞了