2016-06-08 5 views
3

J'essaie de convertir les données de fichier raster PWG en données postscript. J'ai généré au fichier de test est la suivante:erreur dans la conversion du fichier raster en fichier postscript

%!PS-Adobe-3.0 
%%BoundingBox: 0 0 5100 6600 
%Creator: Cups-Filters 
%LanguageLevel: 2 
%DocumentData: Clean7Bit 
%EndComments 
%BeginProlog 
%EndProlog 

%Pages: (atend) 
%%Page: 1 1 
%%BeginPageSetup 
<< /PageSize[5100 6600]/ImagingBBox null>> setpagedevice 
%%EndPageSetup 
gsave 
gsave 
5100 6600 scale 
5100 6600 8 [5100 0 0 -6600 0 6600] 
{currentfile 3 5100 string readhexstring pop} bind 
false 3 colorimage 

...hexadecimal information cut... 

grestore 
showpage 
%PageTrailer 
%Trailer 
%%Pages: 1 
%EOF 

Chaque fois que je tente d'exécuter le programme en utilisant Ghostscript interpretor, je reçois l'erreur suivante:

$ ghostscript sample.ps 
GPL Ghostscript 9.18 (2015-10-05) 
Copyright (C) 2015 Artifex Software, Inc. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Error: /typecheck in --colorimage-- 
Operand stack: 
    --nostringval-- 3 (\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000...) 
Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1977 1 3 %oparray_pop 1976 1 3 %oparray_pop 1960 1 3 %oparray_pop 1852 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 1878 7 3 %oparray_pop 
Dictionary stack: 
    --dict:1194/1684(ro)(G)-- --dict:0/20(G)-- --dict:78/200(L)-- 
Current allocation mode is local 
Current file position is 399 
GPL Ghostscript 9.18: Unrecoverable error, exit code 1 

Le fichier PS est d'environ 128 Mo avec environ 99% des données étant la représentation hexadécimale de l'image colorée.

J'ai essayé de le rechercher et une source a suggéré d'ajouter le paramètre 'setpagedevice' au fichier PS. Je l'ai ajouté mais sans effet.

Comment puis-je me débarrasser de cette erreur? De même, existe-t-il un autre moyen de représenter de très grandes images dans postscript?

+0

avez-vous essayé sans la liaison après le '{currentfile 3 5100 string readhexstring pop}'? Je ne le vois pas avec bind dans [PSLRM] (https://www.adobe.com/products/postscript/pdfs/PLRM.pdf) –

+0

bind ne devrait pas poser de problème, tout ce qui se passe est que les définitions de l'opérateur sont remplacés par leurs valeurs actuelles au moment de la liaison. Donc, si vous redéfinissez, par exemple, readhexstring après la procédure, mais avant d'exécuter la procédure, vous obtiendrez des résultats différents avec et sans liaison. Je dirais que le problème est le code qui lit les données. Voir ci-dessous. – KenS

Répondre

2

Votre code contient:

{currentfile 3 5100 string readhexstring pop} bind 

Si nous rompons cela et ajouter des commentaires sur le contenu de la pile, nous obtenons:

{ 
    currentfile % Stack contents: -file- 
    3    % stack contents: -file- 3 
    5100   % stack contents: -file- 3 5100 
    string   % string consumes the top operand, creates a string 
       % object of that size, and places the string on the stack 
       % stack contains: -file- 3 (string) 
    readhexstring % consume string and file operands, return substring, bool 
       % 
    pop   % pop the boolean 
} 

Le problème est que readhexstring attend de voir -file- (string) mais la pile effectivement contient 3 (chaîne), 3 n'est pas un objet fichier, donc vous obtenez une erreur typecheck.

+0

Cela m'a beaucoup aidé (même pour d'autres choses avec lesquelles je me débattais). J'ai enlevé le '3' et tout fonctionne bien maintenant. Merci – Pranjal