0
votes

Le marqueur de culture n'est pas défini en position appropriée dans le script de fantôme

J'essaie d'ajouter un marqueur de culture dans le fichier PDF. Mais le marqueur de culture n'est pas réglé dans le côté droit ou le côté supérieur dans le coin approprié. J'essaie d'obtenir la taille de la page et définir le marqueur par PostScript, mais mon postScript Obtenez la nouvelle page de la largeur de la page et de la hauteur et de la mise en place du marqueur, mais une position de marqueur n'est pas correcte. Mon commandement fantôme est: - gswin64c.exe -o e: \ sortie.pdf -dbatch -dnopause -ddopdfmarks -sdevice = pdfwrite -dfixedmedia -dpdffitpage -ddevicewidthpoints = 612 test.ps -f e: \ comic.pdf

Lien de fichier de sortie PDF d'entrée PDF de sortie

et mon post-script pour le marqueur de culture est xxx


1 commentaires

Quelles sont vos exigences? Y a-t-il de nombreux fichiers PDF à convertir? La taille initiale est-elle toujours la même 496x756? La taille finale est-elle toujours 396x612? Votre ligne de commande définit toujours l'interprète pour créer une sortie 396x612 afin qu'elle ne se soucie pas de la taille d'entrée et que les informations soient ignorées. Ces exemples placent les marques de culture sur la page avant que le redimensionnement réel de l'original sur les nouvelles pagesize, qui doit évidemment être après la fin de l'état EndPage. J'ai trouvé un processus de distillation en 2 étapes fonctionne pour placer les marques de culture, puis redimensionner la page. Est-ce que cela fonctionne à vos besoins?


3 Réponses :


1
votes

Idéalement, vous ne devez pas simplement créer de nouvelles paires de clé / valeur dans tout le dictionnaire actuel se produit lorsque vous exécutez les procédures de butspage ou de livraison. La raison en est que vous ne pouvez pas compter exactement sur quel dictionnaire se trouve sur le dessus de la pile de dictionnaire au moment où ils sont exécutés, et cela peut être différent.

Ceci peut conduire aux touches que vous attendez d'être présente. ne pas être défini, et peut (potentiellement) vous conduire à écraser des touches / une valeur de valeur déjà dans le dictionnaire.

En fait, il est généralement considéré comme une meilleure pratique, dans PostScript, de ne pas définir des variables transitoires dans un dictionnaire à Tout, mais simplement pour les stocker sur la pile et les accéder à partir de là. Cela annule la possibilité de scrupuler les valeurs et des opérations de pile sont généralement plus rapides que les opérations de dictionnaires. Il existe donc un (léger) avantage de performance.

Votre procédure de EndPage effectue tous les calculs et exécute le trait, même lorsque Cela ne va pas transmettre la page à l'appareil, ce qui est clairement gaspillé, vous devez utiliser un si, à la place. Vous utilisez GSAVE et Grestore ensemble comme une paire, c'est une performance inutile et très coûteuse sage. C'est une sauvegarde et une restauration de l'état graphique, si vous ne faites rien entre les deux, il n'a aucun effet.

Enfin, votre procédure de buTourpage définit / comptez, mais vous ne semblez rien faire avec IT!

Si j'étais vous, je les réécrireais comme suit: xxx

évidemment, vous pouvez laisser tomber tous les commentaires, ils sont purement explicatifs. À partir de ce point, vous pouvez trouver la valeur associée à compter en faisant: xxx

alors: xxx

Notez que je n'a pas testé le code, il est juste là pour illustration.

Le point réel de ceci est que la raison de vos coups est égaré est parce que vous avez échoué la page.

-DFITPAGE Fonctionne en ajustant la matrice de transformation en cours sur l'échelle du contenu de la page afin qu'elles entrent dans les nouvelles dimensions de la page. tout après ce point sera mis à l'échelle, ce qui inclut la construction de chemins dans votre procédure de EndPage.

démontrer; Essayez d'exécuter la ligne de commande sans -dfixedmedia etc. et que vous devriez voir que la page sort la taille d'origine et avec les traits du bon endroit.

afin de placer les traits Correctement, vous devez savoir quel facteur d'échelle a été appliqué et multiplie les valeurs coordonnées par l'inverse de ce montant. C'est-à-dire que si le facteur d'échelle était de 0,5 (c'est-à-dire une demi-taille), vous auriez besoin de multiplier les positions de 2.


9 commentaires

Erreur de code de code dans l'erreur: / typecheck in /--.endpage-- ou / - BuTwepage. Pouvez-vous m'expliquer à ce sujet


Si je retirais -dfixedmedia, rien d'effet sur la sortie PDF, mais si je supprimez -dpdffactpage, la taille PDF ne change pas


Si vous obtenez une erreur 'Tyepecheck', cela signifie que le programme a utilisé un opérateur en attendant un type particulier de données (par exemple un entier) et un type de données différent a été fourni. Il y a clairement un bug dans le programme, j'ai dit que c'était non testé. Oui, évidemment si vous supprimez -dpdffagePage, la taille n'est pas modifiée, c'était le point. Si vous le faites, vous verrez que vos marques de COPR sont correctes. Votre problème est que le CTM est mis à l'échelle, vous devez appliquer la mise à l'échelle inverse à vos coordonnées ou utiliser les coordonnées qui auraient fonctionné pour la page d'origine.


J'essaie de résoudre / écrire une erreur de type, mais je ne suis pas capable de. Si vous avez un autre exemple pour ajouter un marqueur de culture avec la ligne de commande de Ghost


Utilisez simplement votre code existant, c'est probablement le plus facile.


Le moyen le plus simple pour moi était d'abord de redistiller le PDF en ajoutant uniquement les cultures, puis de redistiller le PDF résultant avec le redimensionnement. C'est une étape de distillation supplémentaire de sorte que votre question ne répond pas vraiment à votre question, évite simplement les mathématiques d'échelle inverse. C'est un problème intéressant alors j'ai beaucoup appris.


Une approche en 2 étapes est certainement une solution, mais je serais averti que ce n'est pas, en général, une bonne idée de faire des fichiers de triple-traduits plus de fois que cela est absolument nécessaire. Chaque fois que vous traitez l'entrée, il existe une certaine possibilité de dégrader la sortie, plus vous effectuez ce traitement, plus il est probable de produire une sorte de perte de qualité ou d'un autre problème.


Pouvez-vous utiliser par défautMatrix pour obtenir la mise à l'échelle correcte ou est-ce affectée par -dpdffitpage aussi?


Vous pouvez utiliser cela, mais je suis hésitant à le suggérer sans tester. En outre, il existe un plan à long terme pour remplacer l'interpréteur PDF existant et sa non encore défini sur la manière dont tout cela va interagir. Depuis que GhostScript vous donne des outils pour trouver la tailles de page PDF, il semble plus facile de faire le calcul vous-même.



0
votes

C'était amusant. Testé pour mettre uniquement des marques de culture et sans erreurs encore sans échelle inverse, donc pas pour le redimensionnement instantané. La décision de passer à deux pas de ré-distillation dépendrait des exigences que l'approche de deux étapes fonctionne maintenant, tandis que le développement supplémentaire pourrait atteindre des résultats tout-en-un à l'avenir. XXX PRE>

EDIT : Voici les deux étapes: P>

$ pdfimages -list comic11.pdf tmp/
tmp/-0000.ppm: page=1 width=2063 height=3150 hdpi=300.00 vdpi=300.00 colorspace=DeviceRGB bpc=8
tmp/-0001.pgm: page=1 width=2063 height=3150 hdpi=300.00 vdpi=300.00 colorspace=DeviceGray bpc=8

$ pdfimages -list comic11-cropmarks.pdf tmp/
tmp/-0000.ppm: page=1 width=2063 height=3150 hdpi=300.00 vdpi=300.00 colorspace=DeviceRGB bpc=8
tmp/-0001.pgm: page=1 width=2063 height=3150 hdpi=300.00 vdpi=300.00 colorspace=DeviceGray bpc=8

$ pdfimages -list comic11-resized.pdf tmp/
tmp/-0000.ppm: page=1 width=2063 height=3150 hdpi=375.09 vdpi=375.09 colorspace=DeviceRGB bpc=8
tmp/-0001.pgm: page=1 width=2063 height=3150 hdpi=375.09 vdpi=375.09 colorspace=DeviceGray bpc=8


0 commentaires

0
votes

Voici une solution tout-en-un. Je devais changer la ligne de commande Ghostscript.

Edit: Voici une bande passante tout-en-une dans tout-dessous, car vous avez dit que la taille de la page ne fonctionnait pas pour ma tentative précédente: P>

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -r300 -dPDFFitPage -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=396 -dDEVICEHEIGHTPOINTS=612 -sOutputFile=comic.pdf -f comic.ps


2 commentaires

Marqueur de culture au bon endroit mais final PDF Taille non conforme à 396x612. Donc ce n'est pas correct


Essayez la conversion en deux étapes de mon message précédent au lieu du tout-en-un. Je peux penser à de nombreuses façons de le faire, je ne sais tout simplement pas ce qui est vraiment nécessaire. Je démarrerais à partir de zéro et tout fait dans PostScript, alors les dimensions peuvent être spécifiées avec précision et un bon PDF créé. Il y a deux images dans le comic11.pdf pouvant être extraites et redimensionnées (PNM et PGM) si elles sont nécessaires. Sinon, le post-scriptum serait très facile. Si vous avez juste besoin d'un PDF qui fonctionne, essayez ma réponse à deux étapes.