Site Tools


software:troubleshoot:ps2pdf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
software:troubleshoot:ps2pdf [2009/10/04 15:09] adminsoftware:troubleshoot:ps2pdf [2009/10/04 17:44] (current) admin
Line 4: Line 4:
 When trying to convert a ps file to pdf, we should use the following command: When trying to convert a ps file to pdf, we should use the following command:
   ps2pdf in.ps out.pdf   ps2pdf in.ps out.pdf
-With the above command the papersize is letter on my system (Because of its US locale setting). For a4 papersize we should use:+With the above command the papersize defaults to the system locale setting, which is letter. For a4 papersize we should use:
   ps2pdf "-sPAPERSIZE=a4" in.ps out.pdf   ps2pdf "-sPAPERSIZE=a4" in.ps out.pdf
-Mind the double quotes. This command doesn't produce an a4 page size.\\ \\ Because ps2pdf is just a kind of wrapper for gswin32c, trying the following command below directly with gswin32c produces an a4 page:+Mind the double quotes. Curiously this command doesn't produce an a4 page size.\\ \\ Because ps2pdf (or specifically ps2pdf.bat) is just a kind of wrapper for gswin32c, trying the following command below directly with gswin32c produces an a4 page:
   gswin32c "-sPAPERSIZE=a4" -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -o out.pdf -f in.ps   gswin32c "-sPAPERSIZE=a4" -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -o out.pdf -f in.ps
 while: while:
   gswin32c "-sPAPERSIZE=letter" -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -o out.pdf -f in.ps   gswin32c "-sPAPERSIZE=letter" -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -o out.pdf -f in.ps
-Produces an letter sized pdf file.\\ \\ To find out why ps2pdf doesn't work as expected, I try to dissect the procedure.+Produces letter sized pdf file.\\ \\ To find out why ps2pdf doesn't work as expected, I try to dissect the procedure.
  
 ===== Windows NT cmd files ===== ===== Windows NT cmd files =====
 In the ghostscript lib directory (C:\Program Files\gs\gs8.56\lib) there are the following related files: In the ghostscript lib directory (C:\Program Files\gs\gs8.56\lib) there are the following related files:
-  * ps2pdf.cmd +  * ps2pdf.bat 
-  * ...+  * ps2pdfxx.bat 
 +See below for their contents.
  
-==== ps2pdf ====+==== ps2pdf.bat ====
 <code dos> <code dos>
-/* $Id: ps2pdf.cmd 6300 2005-12-28 19:56:24Z giles $ */ +@echo off 
-/* +@rem $Id: ps2pdf.bat 6300 2005-12-28 19:56:24Z giles $
- * This file is maintained by a user: if you have any questions about it, +
- * please contact Mark Hale (mark.hale@physics.org). +
- */+
  
-/* Convert PostScript to PDF 1.4 (Acrobat 4-and-later compatible). */ +rem Convert PostScript to PDF 1.4 (Acrobat 4-and-later compatible). 
-/* The PDF compatibility level may change in the future: */ +rem The default PDF compatibility level may change in the future: 
-/* use ps2pdf12 or ps2pdf13 if you want a specific level. */+rem use ps2pdf12 or ps2pdf13 if you want a specific level.
  
-parse arg params+rem The current default compatibility level is PDF 1.4. 
 +echo -dCompatibilityLevel#1.4 >_.at 
 +goto bot
  
-gs='@gsos2' +rem Pass arguments through a file to avoid overflowing the command line. 
-inext='.ps' +:top 
-outext='.pdf'+echo %1 >>_.at 
 +shift 
 +:bot 
 +if not %3/==/ goto top 
 +call ps2pdfxx %1 %2 
 +</code>
  
-if params='' then call usage+==== ps2pdfxx.bat ==== 
 +<code dos> 
 +@echo off 
 +@rem $Id: ps2pdfxx.bat 6300 2005-12-28 19:56:24Z giles $ 
 +rem Internal batch file for calling pdfwrite driver.
  
-options=''+rem The files that call this one (ps2pdf*.bat) write the command-line 
 +rem options into _.at, and then pass the last 2 (or fewer) arguments 
 +rem to this file.
  
-/* extract options from command line */ +call gssetgs.bat 
-i=1 +echo -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite >_.at2
-param=word(params,i) +
-do while substr(param,1,1)='-+
- options=options param +
- i=i+1 +
- param=word(params,i) +
-end+
  
-infile=param +if "%OS%"=="Windows_NT" goto nt
-if infile='' then call usage +
-outfile=word(params,i+1) +
-if outfile='' then do +
- outfile=infile''outext +
- infile=infile''inext +
-end+
  
-gs options '-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile='outfile options '-c save pop -f' infile +rem Run ps2pdf on any Microsoft OS.
-exit+
  
-usage: +if %1/==/ goto usage 
-say 'Usage: ps2pdf [options...] input[.ps output.pdf]' +if %2/==/ goto usage 
-exit+ 
 +rem Watcom C deletes = signs, so use # instead. 
 +rem We have to include the options twice because -I only takes effect if it 
 +rem appears before other options. 
 + 
 +:run 
 +echo -sOutputFile#%2 >>_.at2 
 +copy /b /y _.at2+_.at >NUL 
 +echo -c .setpdfwrite -f %1 >>_.at2 
 +%GSC% @_.at @_.at2 
 +goto end 
 + 
 +:usage 
 +echo Usage: ps2pdf [options...] input.[e]ps output.pdf 
 +goto end 
 + 
 +rem Run ps2pdf on Windows NT. 
 + 
 +:nt 
 +if not CMDEXTVERSION 1 goto run 
 +if %1/==/ goto ntusage 
 +if %2/==/ goto nooutfile 
 +goto run 
 + 
 +:ntusage 
 +echo Usage: ps2pdf input.ps [output.pdf] 
 +echo    or: ps2pdf [options...] input.[e]ps output.pdf 
 +goto end 
 + 
 +:nooutfile 
 +rem We don't know why the circumlocution with _1 is needed.... 
 +set _1=%1 
 +set _outf=%_1:.PS=.pdf% 
 +if %_1%==%_outf% goto addsuff 
 +call ps2pdfxx %1 %_outf% 
 +goto postsuff 
 + 
 +:addsuff 
 +call ps2pdfxx %1 %1%.pdf 
 + 
 +:postsuff 
 +set _1= 
 +set _outf= 
 + 
 +:end 
 +rem Clean up. 
 +if exist _.at erase _.at 
 +if exist _.at2 erase _.at2
 </code> </code>
 +
 +===== Problem found =====
 +From the above code, it seems that the windows version of ps2pdf doesn't parse options as written in the [[http://pages.cs.wisc.edu/~ghost/doc/AFPL/6.50/Ps2pdf.htm|manual]]:
 +<code>
 +...
 +The usage for ps2pdf is
 +
 +    ps2pdf [options] input.[e]ps output.pdf
 +...
 +</code>
 +
 +If I use the following command:
 +  ps2pdf "-sPAPERSIZE=a4" in.ps out.pdf
 +
 +Analyzing this command from the 'windows' point of view::
 +  - ps2pdf.bat is invoked. It gets three arguments: %1, %2 and %3. Specifically:\\ %1 = "-sPAPERSIZE=a4"\\ %2 = in.ps\\ %3 = out.pdf
 +  - The text **-dCompatibilityLevel#1.4** is written to a text file called **_.at** which resides in the same directory as your working directory.
 +  - If the third argument, %3, is not empty, append the first argument, %1, to the file **_.at**
 +  - Shift all arguments out one further, repeat previous step above until only last two arguments are left.
 +  - once finished the following command is called:\\ ps2pdfxx %1 %2\\ with %1: in.ps, %2: out.pdf and all [options] are stored in the file **_.at**
 +  - 
software/troubleshoot/ps2pdf.1254661769.txt.gz · Last modified: 2009/10/04 15:09 by admin