Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

EPS bestand importeren in een ander EPS bestand

7 views
Skip to first unread message

Cecil Westerhof

unread,
May 28, 2012, 5:39:07 AM5/28/12
to
Ik ben op het ogenblik met postscript aan het stoeien. Ik ben al zover
dat ik een bibliotheek wil maken. ;-}

Daarom doe ik in een bestand:
(~/postscript/includes/standard.eps) run

Als ik een PDF probeer te maken met:
epstopdf 4QuadrantsCovey.eps
krijg ik echter:
Error: /invalidfileaccess in --run--
Operand stack:
(~/postscript/includes/standardsasas.eps) (r)
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval--
--nostringval-- 2 %stopped_push --nostringval--
--nostringval-- --nostringval-- false 1 %stopped_push 1910 1 3
%oparray_pop 1909 1 3 %oparray_pop --nostringval-- 1893 1 3
%oparray_pop 1787 1 3 %oparray_pop --nostringval--
%errorexec_pop .runexec2 --nostringval-- --nostringval--
--nostringval-- 2 %stopped_push --nostringval-- 1910 1 3
%oparray_pop --nostringval--
Dictionary stack:
--dict:1177/3371(ro)(G)-- --dict:0/20(G)-- --dict:85/200(L)--
Current allocation mode is local
Last OS error: 2
GPL Ghostscript 9.00: Unrecoverable error, exit code 1
epstopdf ($Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $) 2.16
!!! Error: Writing to gs failed, error code 1

Wat gaat er hier fout?

Op dit moment bevat mijn 'bibliotheek' enkel:
%!PS-Adobe-3.0 EPSF-3.0

--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

Philip Paeps

unread,
May 28, 2012, 1:20:00 PM5/28/12
to
Cecil Westerhof <Ce...@decebal.nl> wrote:
> Ik ben op het ogenblik met postscript aan het stoeien. Ik ben al zover
> dat ik een bibliotheek wil maken. ;-}
>
> Daarom doe ik in een bestand:
> (~/postscript/includes/standard.eps) run
>
> Als ik een PDF probeer te maken met:
> epstopdf 4QuadrantsCovey.eps

Eerst en vooral doet gs geen ~-interpolatie. Je moet je ~ dus vervangen door
het pad.

Verder draaien wrappers als epstopdf gs met -dSAFER, waardoor ze geen access
hebben tot het filesystem (geen overbodige maatregel). Je moet dus pdfwriter
zelf wrappen. Bijvoorbeeld met:

gs -q -dBATCH -dNOPAUSE -sPAPERSIZE=a4 -sDEVICE=pdfwrite \
-sOutputFile=4QuadrantsCovey.pdf 4QuadrantsCovey.eps

> Operand stack:
> (~/postscript/includes/standardsasas.eps) (r)

Dit is niet dezelfde stack die je in je voorbeeld hierboven aangeeft...

- Philip

--
Philip Paeps
Senior Reality Engineer
Ministry of Information

Cecil Westerhof

unread,
May 28, 2012, 2:15:13 PM5/28/12
to
Op maandag 28 mei 2012 19:20 CEST schreef Philip Paeps:

> Cecil Westerhof <Ce...@decebal.nl> wrote:
>> Ik ben op het ogenblik met postscript aan het stoeien. Ik ben al zover
>> dat ik een bibliotheek wil maken. ;-}
>>
>> Daarom doe ik in een bestand:
>> (~/postscript/includes/standard.eps) run
>>
>> Als ik een PDF probeer te maken met:
>> epstopdf 4QuadrantsCovey.eps
>
> Eerst en vooral doet gs geen ~-interpolatie. Je moet je ~ dus vervangen door
> het pad.

Ik had allebei geprobeerd, maar deze hadden hetzelfde effect.


> Verder draaien wrappers als epstopdf gs met -dSAFER, waardoor ze geen access
> hebben tot het filesystem (geen overbodige maatregel).

En dat had hier natuurlijk mee te maken. ;-}


> Je moet dus pdfwriter
> zelf wrappen. Bijvoorbeeld met:
>
> gs -q -dBATCH -dNOPAUSE -sPAPERSIZE=a4 -sDEVICE=pdfwrite \
> -sOutputFile=4QuadrantsCovey.pdf 4QuadrantsCovey.eps

Er zijn twee problemen. De run levert een lege blanco pagina op, maar
wat vervelender is, is dat ik een A4 pagina krijg i.p.v. een bounding
box pagina. Ook als ik de papersize verwijder en ook als ik de versie
(die volgens mij) epstopdf gebruik zonder -dSAFER:
gs -q -dBATCH -dNOPAUSE -dSAFER -sDEVICE=pdfwrite
-sOutputFile=4QuadrantsCovey.pdf -dPDFSETTINGS=/prepress
-dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
-dAutoRotatePages=/None 4QuadrantsCovey.eps

(Bovenstaande regel gewrapped daar de server geen regels langer dan 79
karakters accepteert. Was vroeger geen probleem.)

Een voorbeeld bestand:
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 600 400
/pageBottom 0 def
/pageLeft 0 def
/pageRight 600 def
/pageTop 400 def

%(/home/cecil/postscript/includes/standard.eps) run

/textheight {
gsave
{
newpath
100 100 moveto
(HÍpg) true charpath pathbbox % gets text path bounding box (LLx LLy URx URy)
exch pop 3 -1 roll pop % keeps LLy and URy
exch sub % URy - LLy
}
stopped % did the last block fail?
{
pop pop % get rid of "stopped" junk
currentfont /FontMatrix get 3 get % gets alternative text height
}
if
grestore
} def

/backgroundColor {
newpath

gsave
.6 setgray
newpath
pageLeft pageBottom pageRight pageTop rectangle
fill
stroke
.4 setgray
usedFont
authorFont scalefont
setfont
((c) Cecil Westerhof - Decebal Computing) 550 5 rightString
grestore
} def

/centerString {
3 dict begin
/y exch def
/x exch def
/string exch def

x y moveto
string stringwidth pop -2 div
textheight -2 div
rmoveto
string
show

end
} def

/rectangle {
4 dict begin
/top exch def
/right exch def
/bottom exch def
/left exch def

left bottom moveto
right bottom lineto
right top lineto
left top lineto
left bottom lineto
closepath

end
} def

/rightString {
3 dict begin
/y exch def
/x exch def
/string exch def

x y moveto
string stringwidth pop neg
0
rmoveto
string
show

end
} def

/titleX 300 def

/usedFont /Bookman findfont def
/authorFont 10 def
/titleFont 25 def


backgroundColor

newpath

usedFont
titleFont scalefont
setfont
(How the four Quadrants of Covey) titleX 250 centerString
(can help you get more done) titleX 200 centerString
usedFont
authorFont scalefont
setfont
(By Cecil Westerhof) titleX 100 centerString

showpage

Ik zou de PDF willen krijgen, die ik krijg met epstopdf, maar met de
mogelijkheid om met een include te werken. Alle functies horen
natuurlijk in een library thuis. Ik zou er een script voor kunnen
schrijven, maar als dat niet nodig is …

Wat ook vreemd is, is dat ik moet gebruiken:
((c) Cecil Westerhof - Decebal Computing)
terwijl ik zou verwachten dat ik zou kunnen gebruiken:
(\251 Cecil Westerhof - Decebal Computing)

\267 voor bullet werkt wel.


>> Operand stack:
>> (~/postscript/includes/standardsasas.eps) (r)
>
> Dit is niet dezelfde stack die je in je voorbeeld hierboven
> aangeeft...

Foutje. Ik had geprobeerd of ik een andere melding kreeg indien ik een
niet bestaand bestand gebruikte. Niet dus, maar dat is nu verklaard.

Cecil Westerhof

unread,
Jun 10, 2012, 4:26:43 AM6/10/12
to
Op maandag 28 mei 2012 19:20 CEST schreef Philip Paeps:

> Cecil Westerhof <Ce...@decebal.nl> wrote:
>> Ik ben op het ogenblik met postscript aan het stoeien. Ik ben al zover
>> dat ik een bibliotheek wil maken. ;-}
>>
>> Daarom doe ik in een bestand:
>> (~/postscript/includes/standard.eps) run
>>
>> Als ik een PDF probeer te maken met:
>> epstopdf 4QuadrantsCovey.eps
>
> Eerst en vooral doet gs geen ~-interpolatie. Je moet je ~ dus vervangen door
> het pad.
>
> Verder draaien wrappers als epstopdf gs met -dSAFER, waardoor ze geen access
> hebben tot het filesystem (geen overbodige maatregel). Je moet dus pdfwriter
> zelf wrappen. Bijvoorbeeld met:
>
> gs -q -dBATCH -dNOPAUSE -sPAPERSIZE=a4 -sDEVICE=pdfwrite \
> -sOutputFile=4QuadrantsCovey.pdf 4QuadrantsCovey.eps

Dat werkte bij mij niet. Ik heb een bash script geschreven. Deze
accepteert alleen includes vanuit een gedefinieerde folder en maakt
naast de pdf ook de png aan. Misschien bouw ik nog een optie in om de
gegenereerde png ook te tonen:
#!/bin/bash

set -o errexit
set -o nounset

declare -r INCLUDE_PATH=${HOME}/postscript/include
declare -r OLD_IFS=${IFS}
declare -r SCRIPTNAME=$(basename ${0})
declare INPUT_FILE
declare LOG_FILE
declare PDF_FILE
declare PNG_FILE
declare TMP_FILE

declare include
declare line
declare temp

if [[ ${#} -ne 1 ]] ; then
echo "ERROR: ${SCRIPTNAME} FILE_NAME"
exit 1
fi
if [[ ${1:(-4)} != .eps ]] ; then
echo "ERROR: file should end with eps"
exit 1
fi

INPUT_FILE=${1}; shift
LOG_FILE=${INPUT_FILE}.log
TMP_FILE=${INPUT_FILE}.tmp
temp=${INPUT_FILE::(-4)}
PDF_FILE=${temp}.pdf
PNG_FILE=${temp}.png
readonly INPUT_FILE
readonly LOG_FILE
readonly PDF_FILE
readonly PNG_FILE
readonly TMP_FILE

rm -f ${TMP_FILE}
rm -f ${LOG_FILE}
IFS=$'\n'
while read -r line ; do
if [[ ${line::1} == '#' ]] ; then
include=${line:1}
if grep '^[-0-9a-zA-Z]*$' <<<${include} >/dev/null ; then
cat ${INCLUDE_PATH}/${include} >>${TMP_FILE}
else
echo "ERROR: used an illegal include (${include})"
exit 1
fi
else
echo ${line} >>${TMP_FILE}
fi
done <${INPUT_FILE}
IFS=${OLD_IFS}
epstopdf ${TMP_FILE} --outfile=${PDF_FILE} 2>>${LOG_FILE}
convert ${PDF_FILE} ${PNG_FILE}
echo "${INPUT_FILE} converted"
0 new messages