This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
software:troubleshoot:ps2pdf [2009/10/04 15:16] – admin | software:troubleshoot:ps2pdf [2009/10/04 17:44] (current) – admin | ||
---|---|---|---|
Line 14: | Line 14: | ||
===== 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.cmd ==== | + | ==== 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 |
- | /* 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# | ||
+ | goto bot | ||
- | gs=' | + | rem Pass arguments through a file to avoid overflowing the command line. |
- | inext=' | + | :top |
- | outext=' | + | echo %1 >>_.at |
+ | shift | ||
+ | :bot | ||
+ | if not %3/==/ goto top | ||
+ | call ps2pdfxx %1 %2 | ||
+ | </ | ||
- | if params='' | + | ==== 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 | ||
+ | rem to this file. | ||
- | /* extract options from command line */ | + | call gssetgs.bat |
- | i=1 | + | echo -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE# |
- | param=word(params, | + | |
- | do while substr(param, | + | |
- | options=options param | + | |
- | i=i+1 | + | |
- | param=word(params, | + | |
- | end | + | |
- | infile=param | + | if " |
- | if infile='' | + | |
- | outfile=word(params, | + | |
- | if outfile='' | + | |
- | outfile=infile'' | + | |
- | infile=infile'' | + | |
- | end | + | |
- | gs options '-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=' | + | 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# | ||
+ | copy /b /y _.at2+_.at >NUL | ||
+ | echo -c .setpdfwrite -f %1 >> | ||
+ | %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 | ||
+ | |||
+ | : | ||
+ | rem We don't know why the circumlocution with _1 is needed.... | ||
+ | set _1=%1 | ||
+ | set _outf=%_1: | ||
+ | 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 | ||
</ | </ | ||
+ | |||
+ | ===== Problem found ===== | ||
+ | From the above code, it seems that the windows version of ps2pdf doesn' | ||
+ | < | ||
+ | ... | ||
+ | The usage for ps2pdf is | ||
+ | |||
+ | ps2pdf [options] input.[e]ps output.pdf | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | If I use the following command: | ||
+ | ps2pdf " | ||
+ | |||
+ | Analyzing this command from the ' | ||
+ | - ps2pdf.bat is invoked. It gets three arguments: %1, %2 and %3. Specifically: | ||
+ | - The text **-dCompatibilityLevel# | ||
+ | - 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** | ||
+ | - |