web-dev-qa-db-fra.com

Aplatissement PDF transparence

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

Bien que conserver la transparence reste agréable pour l’édition, cela peut poser un problème pour l’impression. L'impression implique généralement la conversion de PDF à PS. PostScript ne supportant pas la transparence, cela nécessite soit

  • mettre à plat, c’est-à-dire créer un graphique vectoriel qui fonctionne sans transparence

ou

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

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

Malheureusement, convertir les figures PDF en EPS (avant de les inclure dans LaTeX) n'aide pas beaucoup, car pdftops et pdf2ps (encore, Cairo ou Ghostscript) pixellisent l'image, c'est-à-dire restituent un bitmap (enregistré sous EPS). (C'est légèrement mieux, car cela n'affecte pas la page entière, mais je préférerais quand même un graphisme vectoriel.)

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

10
Jan

Un moyen de contourner le problème de rastérisation est de convertir manuellement votre document PDF en postscript, car il sera converti de toute façon lorsque vous appelez CUPS via evince ou une autre interface graphique.

Vous pouvez essayer pdftops -r 1200 document.pdf pour augmenter la résolution par rapport au minimum par défaut de 300, puis imprimer le postscript obtenu. Cependant, avec les imprimantes au travail, cela n’a pas apporté d’amélioration significative. Le texte normal sur les pages avec et sans images transparentes avait toujours un aspect différent - flou ou clair.

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

Ce serait formidable d'avoir une solution Linux uniquement à ce problème.

5
Fred Schoen

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 trouvée sur Internet consistait à rendre le PDF complètement sous forme d'image avec pdf2ps et ps2pdf13, mais le résultat Ce 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.

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

TL; DR:

  1. Isolez toutes les transparences problématiques sur une couche (masques de transparence, ombres, etc.)
  2. Rendre visibles uniquement le calque et le fond problématiques
  3. Exporter en PNG
  4. Importez le fichier PNG que vous venez de créer et utilisez-le comme arrière-plan
  5. Rendre toutes les couches visibles sauf la couche problématique
  6. Exporter au format PDF
  7. Sourire :)
1
Edgar

Une solution consiste à créer une zone blanche dans Inkscape de la même taille que votre page et à l'envoyer au calque inférieur. Cela exportera votre image avec un arrière-plan blanc au lieu d'un arrière-plan transparent.

0
brousch