Aplatir la transparence des PDF

11

J'ai un PDF, réalisé avec Inkscape, qui utilise des couleurs transparentes. Cette image doit être utilisée dans un document LaTeX.

Bien que la préservation de la transparence soit agréable pour l'édition, cela peut être un problème pour l'impression. L'impression implique généralement une conversion PDF en PS. Étant donné que Postscript ne prend pas en charge la transparence, cela nécessite soit

  • aplatissement, c'est-à-dire création d'un graphique vectoriel qui fonctionne sans transparence

ou

  • tramage, c'est-à-dire rendu d'une image bitmap.

Lorsqu'un document PDF contenant une telle figure est imprimé (ou converti en PS) en utilisant Evince (ou Cairo ou Ghostscript), la page entière est rendue sous forme de bitmap, rendant les polices moches (différentes des autres pages). (Adobe Acrobat gère bien ces fichiers PDF.)

Malheureusement, la conversion des figures PDF en EPS (avant de les inclure avec LaTeX) n'aide pas beaucoup, car à la fois pdftops et pdf2ps (encore une fois, Le Caire ou Ghostscript) pixellisent l'image, c'est-à-dire rendent un bitmap (enregistré au format EPS). (C'est un peu mieux, car cela n'affecte pas toute la page, mais je préférerais quand même un graphique vectoriel.)

Comment puis-je aplatir la transparence avec Inkscape ou un autre logiciel sous Linux?

Jan
la source
2
Question interessante. Il serait très complexe d'aplatir le svg car chaque intersection possible de formes devrait créer une nouvelle forme opaque avec un remplissage composite.
artfulrobot
@artfulrobot Exactement. Les graphiques vectoriels résultants peuvent en général devenir assez complexes. Cependant, pour un certain nombre de graphiques typiquement vectoriels, le résultat devrait toujours bien fonctionner sur une imprimante Postscript moderne.
Jan
La meilleure méthode que j'ai trouvée est une méthode manuelle fastidieuse, impliquant un nouveau dessin après une étape initiale: utilisez inkscape pour convertir votre pdf en svg, ouvrez le svg dans un bon éditeur de texte. Remplacez toutes les occurrences de «opacity: [0] [0-9 \.]» Par «opacity: 1» (version regex) ou recherchez «opacity: 0». et remplacer manuellement par l'opacité 1 (version fastidieuse). Ouvrez le svg dans inkscape et rendez-le à nouveau agréable (la partie difficile), puis revenez au pdf et à eps.
Chris H

Réponses:

6

Une façon de contourner une mauvaise pixellisation consiste à convertir manuellement votre document PDF en post-scriptum, car lorsque vous appelez CUPS via evince ou tout autre interface graphique, il sera de toute façon converti.

Vous pouvez essayer pdftops -r 1200 document.pdfd'augmenter la résolution à partir de la valeur par défaut basse de 300, puis imprimer le post-script résultant. Cependant, avec les imprimantes à l'œuvre, cela n'a pas entraîné d'amélioration significative. Le texte normal sur les pages avec et sans images transparentes était toujours différent - flou vs clair.

J'ai donc fini par utiliser Acrobat Professional (sur une machine Windows) pour aplatir les images transparentes utilisées dans mon document en latex, ce qui a donné des résultats optimaux. Vérifiez que se Transparency Flattener Presettrouve [High Resolution]dans la configuration d'impression avancée. Mon collègue a mentionné que l'on pourrait peut-être transférer un fichier pdf directement sur une imprimante réseau laserjet moderne, sans passer par la conversion postscript. Je n'ai pas essayé ça.

Ce serait génial d'avoir une solution Linux uniquement pour ce problème.

Fred Schoen
la source
1

J'ai eu le même problème et voici ma solution (pour référence future):

J'ai essayé beaucoup de choses, et jusqu'à présent, la meilleure solution de travail que j'ai trouvée sur Internet était de rendre le PDF complètement sous forme d'image avec pdf2pset ps2pdf13, mais le résultat n'était pas satisfaisant pour moi, car toutes les formes vectorielles ont été perdues. Je voulais rendre uniquement les parties critiques, mais conserver les graphiques vectoriels.

L'astuce pour moi a été d'isoler toutes les parties critiques dans Inkscape et de les placer sur un calque séparé (dans mes images, c'était toutes les ombres). J'ai rendu visible uniquement ce calque (et le calque d'arrière-plan) et je l'ai exporté au format PNG, ce qui a rendu tous les effets de transparence, mais seulement eux. Je l'ai réimporté et utilisé dans un nouveau calque. Après avoir inversé toutes les visibilités des calques (calque de transparence: désactivé, tous les autres: activé), le PDF exporté fonctionnait parfaitement avec LaTeX et était imprimable sans rendre la page entière sous forme d'image.

TL; DR:

  1. Isolez toutes les transparences problématiques sur un seul calque (masques de transparence, ombres, etc.)
  2. Rendre visible uniquement le calque et l'arrière-plan problématiques
  3. Exporter en PNG
  4. Importez le PNG juste créé et utilisez-le comme arrière-plan
  5. Rendre tous les calques visibles sauf le calque problématique
  6. Exporter au format PDF
  7. Sourire :)
Edgar
la source
0

Une façon consiste à créer une boîte blanche dans Inkscape de la même taille que votre page et à l’envoyer à la couche inférieure. Cela exportera votre image avec un fond blanc au lieu d'une image transparente.

brousch
la source
1
Le problème n'est pas un fond transparent et l'ajout d'un fond blanc ne le résout pas. La question de l'image utilise des formes semi-transparentes sur d'autres formes (opaques). SVG et PDF le supportent, mais pas PS.
Jan
0

J'ai ouvert le fichier pdf en utilisant Ubuntu / Gimp et j'ai imprimé une page à la fois en vérifiant l'aperçu avant impression à chaque fois.

Client
la source
-1
pdftops -origpagesizes input.pdf output.ps

puis

ps2pdf -r600x600 output.ps input-new.pdf
HinzundKunz
la source