2014-07-01 27 views
1

我有一個Postscript文件,打算在11x17紙上打印。但在Mac OSX下,預覽程序堅持將其裁剪爲字母大小。如果我實際上將它打印到11x17的紙張上,它會被剪裁成字母大小,然後集中在11x17的紙張上。麻煩從Postscript生成Tabloid(11x17)pdf文件

(請注意,預覽程序總是會轉換爲pdf作爲中間步驟)。

顯然,生成的pdf文件是一個字母大小的pdf文件。我在猜測我的Postscript文件缺少某種語法糖來提示PDF格式轉換器的紙張大小,但是我不知所措。我已經嘗試將%%DocumentMedia%%BeginPaperSize註釋插入文檔,我所採取的是正確的位置,但沒有效果。

我也嘗試將文檔移動到Linux系統,運行ps2pdf,並將生成的PDF文件移回Mac。沒有效果。而且ps2pdf以前從來沒有犯過錯誤,所以這就是我認爲問題出在我的Postscript而不是Apple的pdf轉換器上的原因。

%!PS-Adobe-3.0 
%%BoundingBox: 0 0 792 1224 
%%Creator: template plugin by Edward Falk 
%%DocumentMedia: Tabloid 792 1224 0()() 
%%Pages: 1 
%%PageOrder: Ascend 
%%DocumentData: Clean7Bit 
%%EndComments 
%%BeginDefaults 
%%PageMedia: Tabloid 
%%EndDefaults 
%%BeginProlog 

/drawmarker {  % x y -- 
    gsave 
    translate 
    newpath 
    0 -0.5 moveto 0 0.5 lineto 
    -0.5 0 moveto 0.5 0 lineto 
    0 0 .25 0 360 arc 
    stroke 
    grestore 
} bind def 

/drawmodel { 
    newpath 
    86.250 35.750 moveto 
    80.536 45.500 lineto 
    86.250 35.750 moveto 
    103.000 35.750 lineto 
    80.536 45.500 moveto 
    103.000 45.500 lineto 
    103.000 35.750 lineto 
    stroke 
} bind def 

%%EndProlog 

%%Page: "1" 1 

gsave 
72 72 scale 
-79.54 -34.75 translate 
1 72 div setlinewidth 
drawmodel 
80.54 35.75 drawmarker 
89.54 35.75 drawmarker 
80.54 50.75 drawmarker 
89.54 50.75 drawmarker 
grestore 
showpage 
%%EndPage: "1" 1 

%%EOF 
+0

大量的實驗和閱讀表明我犯的一個錯誤是在標題中有空行。刪除那些幫助(gv現在做正確的事情),但我仍然不在那裏。 –

回答

2

您的PostScript不請求頁面大小。開始'%'的行是PostScript中的註釋,並且沒有任何效果(某些PostScript使用者會解析DSC註釋,這會混淆問題...)

如果您需要11x17媒體,則需要索取:

<</PageSize [792 1224]>> setpagedevice 

沒有這個,你會得到默認的媒體,無論這可能是什麼。 PostScript中允許使用空白行,並且不起作用,DSC分析程序的行爲與空白行的行爲不同是一個破碎的解析器,但據我瞭解,gv真的很舊。

+0

的確如此。我強烈支持Mac的ps => pdf轉換器是真正的ghostscript,因爲同樣的修改既修復了Linux上的ps2pdf,也修復了其標準PostScript上的Mac –

+0

,如果您不發出媒體請求,所以我希望這可以「修復」任何PostScript解釋器。對於代碼不正確的道歉,我已經回去修復了。 – KenS

+0

p.s.感謝提醒我可以用[]定義一個數組。自從我上次編程後記以來,這已經很長時間了。 '<< >>是一種定義字典的方式嗎? –

1

好吧,我想通過反向工程一些其他文件(pdftops是你的朋友)。將我的解決方案記錄在此處,供將來可能有相同問題的其他人員使用。

缺少的元素與DSC無關,實際上是setdevicepage操作符。添加該代碼固定我的問題:

%%BeginSetup 
2 dict begin 
/PageSize 792 1224 2 array astore def 
/ImagingBBox null def 
currentdict end setpagedevice 
%%EndSetup 

如果當然,這樣做的權利要求的測試,看是否setpagedevice函數存在,因爲它是在語言水平增加2

更新:使用語言級別2的簡化功能:

%%BeginSetup 
% set up for pdf 
<< /PageSize [792 1224] /ImagingBBox null >> setpagedevice 
%%EndSetup