Copy link to clipboard
Copied
I created postscript program to read and generate PDFD from line data stream
the PS routine just read the file from line one till the end , format and output the line .
It works well with file with 1000 up to 4,000 and suddenly when I encounter large file - up to 20,000 pages I had this error by distiller
Error: limitcheck; OffendingCommand: def
def is the postscript part used as /VAR xxx def etc
So it is built in PS command.
Why suddenly it is not accepted !!
I split the large files into two files and both ripped correct and the PDF generated by distiller.
I touhgt it is memory problem but I jhave 4 GB of ram!! and perhaps some internal memory allocation of PS !!!
Regards
Dr. Adam.
Copy link to clipboard
Copied
Check the following:
65,535 is the Maximum capacity of a dictionary, in key-value pairs (this seems generous for a well coded PostScript file) - Make sure you don't have a recursive or looping operator definition in your input file.
There is an input file size limit for Distiller and I think it is either 2 or 4 GBytes - Make sure your input file is smaller than the limit.
- Marvin
Copy link to clipboard
Copied
Unless you have a very old version of Distiller, you should not find any file size limitation at 2GB or 4GB.
- Dov
Copy link to clipboard
Copied
Dov,
I am running Distiller Server 6.0.1 - Is there a file size limitation with it?
- Marvin
Copy link to clipboard
Copied
Distiller 6? In our book, that is an ancient version. I believe all Acrobat components had file size limitations removed in Acrobat 7.
- Dov
Copy link to clipboard
Copied
Dov,
Does Adobe offer a "Distiller Server" license beyond 6.0.1? The key word here is "Server".
- Marvin
Copy link to clipboard
Copied
There is Distiller Server 8 (see http://www.adobe.com/products/acrdis/?promoid=DJDVN) which can be licensed. Future development and features for PDF creation via distillation of PostScript on a server will be via the Adobe LiveCycle® PDF Generator ES server product (see <http://www.adobe.com/products/livecycle/pdfgenerator/> for further details).
- Dov
Copy link to clipboard
Copied
I run distiller 10
There is one main loop to read each line and format it and the print it .
I even started the loop with clear and end it with cleartomark in order to ensure no leakage in memory
I don't build dictionary for parameters I use the user dictionary and stack !!!
If the error due to the limitation of 65 K dictionary size then it should be the user dictionary and number of variables and procedures saved there !!
If I build several user dictionaries perhaps I can avoid this error ?
Perhaps every time the loop advanced the more variables store into the dictionary !! when it is redfined
for example /VAR1 exch def
if this line executed once per loop , well the same variable - memory space was ovverite or simply additional version and space dedicated to it !! that is a question that might answer why I rich the 65K limitation.
Regards'
Dr. Adam
Copy link to clipboard
Copied
Dr. Adams,
The example code you posted - " /VAR exch def" could be the culprit due to the preceding object on the stack, how large or what type of object.
If you are willing to post (or email) a complete set of your processing code it would probably take the guess work out of it.
- Marvin
Copy link to clipboard
Copied
here is the main code
{
mark
currentfile 500 string readline
{
/MYLINE exch def'
/COUNTER COUNTER 1 add def
..
...
---
There are many /XXX mmmm def operators
}
{
exit
} ifelse
cleartomark
} loop
If the variable is overwritten more than once e.g /COUNTER'
Would that occupy double space ! or the Entepreter (here distiller V 10x) simply overwrite the value that was before !!! (I tried all options Standard , Press quality etc )
It seems every time I re-write /COUNTER the engine create new variable without removing the older one ! and that's why the the user dictionary run out of space quickly.
Copy link to clipboard
Copied
Dr. Adam,
The /MYLINE exch def' has a single quote at the end - is that a typo?
If the same dictionary (userdict) is the current dictionary then the redefinition of an operator should not use more memory unless the definition itself consumes more memory. In your example "/COUNTER COUNTER 1 add def" statement I believe the value of COUNTER is going to use the same memory space for the integer whether the value is 0 or the maximum 2**32 - 1.
If your string length of 500 characters was too short to contain a complete readline including end-of-line chars, then you would get a rangecheck error, so the file you are gettting your data from must not be exceeding this.
Is there a reason that you aren't setting up all your operators in a procedure that is called like this and placed directly in front of the data to parse?:
/ITER {/COUNTER COUNTER 1 add} def
/ProcessStd { {markcurrentfile 500 string readline {/MYLINE exch def ITER}{exit}ifelse cleartomark}loop } def
ProcessStd
......
......
......
...end-of-file
Without seeing if you remapped currentfile it appears that the readline is going to read in "{" first and then "/MYLINE exch def" second, etc. etc., so I would recommend using the example I wrote above instead and see if that fixes the problem.
- Marvin
Copy link to clipboard
Copied
yes the quote it is mistyping
Well this is what I expect but I wanted to be sure that PS engine would not double the memory upon definition of the same variable.