diff options
author | Karl Berry <karl@freefriends.org> | 2005-12-28 00:07:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2005-12-28 00:07:27 +0000 |
commit | 30dd9f517c9c093ff3319061647a4555264f7914 (patch) | |
tree | 0d7a349bf99be5a42cc9c5a80a30f3b7136c4ccd /Master/xemtex/gslib/pdf2dsc.ps | |
parent | 08ab8dce83f53b0f915cb66a37bbc8478b22c307 (diff) |
trunk
git-svn-id: svn://tug.org/texlive/trunk@9 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/xemtex/gslib/pdf2dsc.ps')
-rw-r--r-- | Master/xemtex/gslib/pdf2dsc.ps | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/pdf2dsc.ps b/Master/xemtex/gslib/pdf2dsc.ps new file mode 100644 index 00000000000..168dbd91632 --- /dev/null +++ b/Master/xemtex/gslib/pdf2dsc.ps @@ -0,0 +1,166 @@ +% Copyright (C) 1994, 1995, 1996, 1997, 1998 Aladdin Enterprises. All rights reserved. +% +% This program is free software; you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation; either version 2 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 59 Temple Place, Suite 330, Boston, MA, 02111-1307. + +% $Id: pdf2dsc.ps,v 1.3.4.2.2.1 2003/04/12 14:02:39 giles Exp $ +% pdf2dsc.ps +% read pdf file and produce DSC "index" file. +% +% Input file is named PDFname +% Output file is named DSCname +% +% Run using: +% gs -dNODISPLAY -sPDFname=pdffilename -sDSCname=tempfilename pdf2dsc.ps +% Then display the PDF file with +% gs tempfilename +% +% Modified by Geoff Keating <geoffk@ozemail.com.au> 21/12/98: +% Add DocumentMedia, PageMedia comments +% Use inherited BoundingBox and Orientation +% Reformat, add new macro 'puts', generally clean up +% Modified by Johannes Plass <plass@dipmza.physik.uni-mainz.de> 1996-11-05: +% Adds BoundingBox and Orientation if available. +% Modified by rjl/lpd 9/19/96 +% Updates for compatibility with modified pdf_*.ps code for handling +% page ranges (i.e., partial files) better. +% Modified by Geoff Keating <Geoff.Keating@anu.edu.au> 7/3/96: +% include Title and CreationDate DSC comments (these are displayed by +% Ghostview); +% reduce the size of typical output files by a factor of about 3. +% Modified by L. Peter Deutsch 3/18/96: +% Removes unnecessary and error-prone code duplicated from pdf_main.ps +% Modified by L. Peter Deutsch for GS 3.33 +% Originally by Russell Lang 1995-04-26 + +/PDFfile PDFname (r) file def +/DSCfile DSCname (w) file def +systemdict /.setsafe known { .setsafe } if + +/puts { DSCfile exch writestring } bind def +/DSCstring 255 string def +/MediaTypes 10 dict def + +% (str1) (str2) concatstr (str1str2) +/concatstr { + 2 copy length exch length add string + dup dup 5 2 roll copy length +% stack: newstring newstring str2 str1-length + exch putinterval +} bind def + + GS_PDF_ProcSet begin + pdfdict begin + PDFfile + pdfopen begin + /FirstPage where { pop } { /FirstPage 1 def } ifelse + /LastPage where { pop } { /LastPage pdfpagecount def } ifelse + +% scan through for media sizes, keep them in the dictionary + FirstPage 1 LastPage { + pdfgetpage /MediaBox pget pop % MediaBox is a required attribute + aload pop + 3 -1 roll sub 3 1 roll exch sub exch + 2 array astore + aload 3 1 roll 10 string cvs exch 10 string cvs + (x) exch concatstr concatstr cvn + MediaTypes 3 1 roll exch put + } for + +% write header and prolog + (%!PS-Adobe-3.0\n) puts + Trailer /Info knownoget + { + dup /Title knownoget + { + (%%Title: ) puts + DSCfile exch write== + } + if + /CreationDate knownoget + { + (%%CreationDate: ) puts + DSCfile exch write== + } + if + } + if + % This is really supposed to be sorted by frequency of usage... + (%%DocumentMedia: ) + MediaTypes { + exch pop + 1 index puts + (y) puts dup 1 get DSCstring cvs puts + (x) puts dup 0 get DSCstring cvs puts + ( ) puts dup 0 get DSCstring cvs puts + ( ) puts 1 get DSCstring cvs puts + ( 70 white ()\n) puts + pop (%%+ ) + } forall + pop + + (%%Pages: ) puts + LastPage FirstPage sub 1 add DSCstring cvs puts + (\n%%EndComments\n) puts + (%%BeginProlog\n) puts + (/Page null def\n/Page# 0 def\n/PDFSave null def\n) puts + (/DSCPageCount 0 def\n) puts + (/DoPDFPage {dup /Page# exch store pdfgetpage pdfshowpage } def\n) puts + (GS_PDF_ProcSet begin\npdfdict begin\n) puts + (%%EndProlog\n) puts + (%%BeginSetup\n) puts + DSCfile PDFname write==only + ( \(r\) file pdfopen begin\n) puts + (%%EndSetup\n) puts + % process each page + FirstPage 1 LastPage { + (%%Page: ) puts + dup DSCstring cvs puts + ( ) puts + dup DSCstring cvs puts + (\n) puts + + dup pdfgetpage + dup /MediaBox pget pop + (%%PageMedia: y) puts + aload pop 3 -1 roll sub DSCstring cvs puts + (x) puts exch sub DSCstring cvs puts + (\n) puts + dup /CropBox pget { + (%%PageBoundingBox: ) puts + {DSCfile exch write=only ( ) puts} forall + (\n) puts + } if + /Rotate pget { + (%%PageOrientation: ) puts + 90 div cvi 4 mod dup 0 lt {4 add} if + [(Portrait) (Landscape) (UpsideDown) (Seascape)] exch get puts + (\n) puts + } if + + DSCfile exch DSCstring cvs writestring + ( DoPDFPage\n) puts + } for + currentdict pdfclose + end + end + end +% write trailer +(%%Trailer\n) puts +(currentdict pdfclose\nend\nend\nend\n) puts +(%%EOF\n) puts +% close output file and exit +DSCfile closefile +quit +% end of pdf2dsc.ps |