현재 페이지 장치는 미디어에 표시를 표시합니다. Ghostscript에서 -sDEVICE
매개 변수는 초기 페이지 장치입니다.
그러나 다른 많은 장치가있을 수 있습니다. 가장 명백한 것은 nulldevice
이며 이는 단순히 비트 버킷입니다. nulldevice
을 실행하면 그래픽 상태의 현재 페이지 장치가 널 (null) 장치로 바뀝니다. 분명히 보통 gsave
/grestore
쌍 내에서이 작업을 수행하므로 grestore
원래 장치로 돌아갈 수 있습니다.
마찬가지로 글리프를 캐시로 렌더링하는 동안 캐시 장치를 밀어서 현재 페이지 장치로 만듭니다. 다시 이것은 암시 적 저장/복원에서 수행되므로 일반 페이지 장치로 돌아갈 수 있습니다. 그리드를 표현하기 위해 렌더링 된 글리프를 나타내는 비트 맵을 얻을 수 있습니다.
이러한 장치를 I/O 장치와 같은 다른 장치와 구별하기 위해 페이지 장치라고합니다.
각 페이지 장치에는 키와 값이 포함 된 페이지 장치 사전 (비어있을 수 있음)이 있습니다. currentpagedevice
을 실행하여 장치의 현재 설정을 사전으로 검색 할 수 있습니다.키/값 쌍이있는 사전을 만들고 setpagedevice
을 사용하여 장치에 요청을 보내 장치의 동작을 수정할 수 있습니다. 장치는 요청을 무시할 수 있으며 요청하지 않으면 현재 페이지를 다시 설정합니다.
그래서 나는 기대 :
currentpagedevice {exch == ==} forall
nulldevice
currentpagedevice {exch == ==} forall
는 다른 결과를 제공 할 수 있습니다.
NOTE 페이지 장치가 사전 그래픽 상태의 일부로서 유지되지 않고, 그것은 장치에 의해 유지된다.
그래픽 상태에있는 것은 장치 자체이며 일반적으로 어떤 것도 할 수없는 일종의 불투명 한 개체입니다.
당신이 무엇을 의미하는지 모르겠다. "내가 IdePS를 시도하면 고스트 스크립트가 상태 dict에 현재 페이지 장치 만있는 것을 볼 수 있습니다."nulldevice "를 실행할 때 currentpagedevice는 여전히 존재합니다."
currentpagdevice
은 현재 페이지 장치에 속한 페이지 장치 사전을 반환하는 연산자입니다. 그래서 당신은 "state dict에서 currentpagedevice"를 가질 수 없습니다. currentpagedevice
은 연산자가 있기 때문에 항상 있습니다.
위의 코드를 실행하면 원본 페이지 장치에 많은 항목이있는 사전이 있지만 null 장치에 빈 페이지 장치 사전이 있다는 것을 알 수 있습니다.
[편집]
음, 에서의 사전 고스트,하지만 그 때문에 이상한 방식으로 고스트의 (적어도 부분적으로)이다는 setpagedevice를 실제 구현의 것을. FWIW Distiller는 사전으로도 구현하지만 최소한 하나의 인터프리터는 C 구조체에서 유지 관리되는 항목으로 새 사전을 만들고 currentpagedevice가 실행될 때이를 반환합니다. 나는 이것이 PostScript 질문이 아닌 Ghostscript의 특별한 질문이 아니라고 생각했다 .... :-)
사전으로 구현 한 경우, 장치가 관리하는 사전이 동기화되어 있는지 확인해야합니다 그래픽 상태의 사전 또는 현재 페이지 장치에서 사전을 반환하는 데 사용하는 다른 방법을 사용합니다. 물론, 이것들은 문제가 아니라는 것을 의미하는 동일한 사전 일 수 있습니다.
어떻게 프로그램이 작동하는지, 그래픽 상태가 불투명 한 개체인지, 질문 할 수는 없습니다. 내 생각에이 프로그램은 '국가'에 대한 자체 기록을 유지하고있다. 그 기록은 통역사의 내부 상태와 아무런 관련이 없습니다. 사실 'Ghostscript'가 내부적으로 유지하는 그래픽 상태의 내용에 '상태'아래에 열거 된 것이 없다고 말할 수 있습니다.
간단히 말해서 currentpagedevice를 실행하고 사전 내용을 읽는 IdePS 프로그램을 제안합니다. 왼쪽에는 사전에 내용이 있고 오른쪽에는 내용이 있습니다.
'상태'는 통역사의 특정 구현을 의미하지 않으며, 프로그램 자체 만 추적하는 프로그램이라고는 생각하지 않습니다.
"페이지 장치 사전은 그래픽 상태의 일부로 유지 관리되지 않으며 장치에 의해 유지 관리됩니다." 내 스크린 샷보기 "currentpagedevice"는 그래픽 상태의 dicttype입니다.그래서 그것은 그래픽 상태의 일부입니다,하지만 당신은 그것이 그래픽 상태의 일부로 유지되지 않는다고 말합니다, 그것이 분리 된 객체라는 것입니다. 조금 더 명확하게 할 수 있습니까? nulldevice, cachedevice 및 displaydevice가 모두 "페이지 장치"임을 올바르게 이해하고 있습니까? 그리고 nulldevice는 빈 페이지 장치 사전이있는 페이지 장치 일뿐입니다. – juFo