2016-03-30 8 views
0

gibt es eine Möglichkeit, farbigen Text in Dateien mit C-Programmiersprache auf Ubuntu Linux zu drucken, können Sie Farbcodes mit printf() verwenden und farbigen Text zu Konsole oder Terminalfenster drucken, aber wie man Text drucken Textdateien mit Farben?C fprintf mit Farben

+0

Farbige Ausgabe verwendet wird, ist nicht eine Frage der c von printf. Bessere Verwendung von Termcap a/o ncurses oder ähnlichem – ikrabbe

+3

Die Codes, auf die Sie sich beziehen, sind nur im Zusammenhang mit einem Terminal sinnvoll. Wenn Sie die Datei an das Terminal ausgeben, sehen Sie die gleichen Farben ... aber in einer Textdatei gibt es keinen "farbigen Text". – FatalError

+0

Die meisten Terminals können farbige Ausgaben drucken und z.B. 'printf (" \ 033 [33; 1mBold Yellow \ 033 [0m) "] druckt" Bold Yellow "in fettem Gelb. –

Antwort

0

Die kurze Antwort ist, können Sie nicht, die lange Antwort ist, müssen Sie eine Art von Mark-up zusammen mit Ihrem Text in einer Vielzahl von Formaten, die verfügbar sind. Es gibt keinen universellen Standard, den Sie verwenden können, also müssen Sie einen auswählen.

Die Farbcodes sind spezifisch für die Konsole und nicht zum Drucken geeignet, wenn Sie den Text einfach wieder auf dem Bildschirm anzeigen, kein Problem, aber wenn Sie es dann drucken möchten, müssen Sie tun etwas Arbeit.

Am einfachsten ist es, HTML-Tags für die Anzeige in einem Browser zu schreiben und von dort aus zu drucken. Das Schreiben in den Drucker mit den Markup-Codes des Druckers ist ebenfalls möglich und kann bei einigen Druckern einfach (oder fast unmöglich) sein. Der Nachteil ist, dass dies eine druckerspezifische Lösung ist. Wenn Sie wirklich ehrgeizige Ausgabe im PDF-Format (es ist nur Text), RTF oder einem anderen Dokument-Format, aber das dauert Zeit und Fähigkeiten.

+0

Vielen Dank für Ihre Antwort, ja, ich werde die kurze Antwort nehmen, keine Farben im Klartext c auf Linux, weil es so einfach zu lesen und zu schreiben gemacht wurde, alles in Linux ist eine Datei, also wenn ich Text mit drucken möchte Farben, entweder in Terminal oder in Textdatei drucken und HTML-Tags hinzufügen und Farben für Text angeben. –

0

ich diese Lösung verwende, die recht ordentlich ist, wenn Sie in Ströme sind und eine Frage der Terminalemulation

#include <cstdlib> 
#include <iostream> 
#include <sstream> 

namespace sps { 
    namespace colors { 
    enum color { 
     none = 0x00, 
     black = 0x01, 
     red  = 0x02, 
     green = 0x03, 
     yellow = 0x04, 
     blue = 0x05, 
     magenta = 0x06, 
     cyan = 0x07, 
     white = 0x08 
    }; 
    } 
    namespace faces { 
    enum face { 
     normal = 0x00, 
     bold  = 0x01, 
     dark  = 0x02, 
     uline  = 0x04, 
     invert = 0x07, 
     invisible = 0x08, 
     cline  = 0x09 
    }; 
    } 

    /** 
    * Generate string for color codes for std::iostream's 
    * 
    * @param foreground 
    * @param background 
    * 
    * @return 
    * 
    * Usage: 
    * 
    * using namespace sps; 
    * std::cout << "These words should be colored [ " 
    *   << set_color(colors::red) << "red " 
    *   << set_color(colors::green) << "green " 
    *   << set_color(colors::blue) << "blue" 
    *   << set_color() << " ]" << std::endl; 
    * 
    */ 
    static inline std::string set_color(sps::colors::color foreground = sps::colors::none, 
             sps::colors::color background = sps::colors::none) { 
    std::stringstream s; 
    s << "\033["; 
    if (!foreground && ! background){ 
     s << "0"; // reset colors if no params 
    } 
    if (foreground) { 
     s << 29 + foreground; 
     if (background) s << ";"; 
    } 
    if (background) { 
     s << 39 + background; 
    } 
    s << "m"; 
    return s.str(); 
    } 

    /** 
    * 
    * 
    * @param face 
    * 
    * @return 
    */ 
    static inline std::string set_face(sps::faces::face face = sps::faces::normal) { 
    std::stringstream s; 
    s << "\033["; 
    if (!face) { 
     s << "0"; // reset face 
    } 
    if (face) { 
     s << face; 
    } 
    s << "m"; 
    return s.str(); 
    } 
} 

int main(int agrc, char* argv[]) 
{ 
    using namespace sps; 
    std::cout << "These words should be colored [ " 
     << set_color(colors::red) << "red " 
     << set_color(colors::green) << "green " 
     << set_color(colors::blue) << "blue " 
     << set_color(colors::cyan) << "cyan " 
     << set_color(colors::magenta) << "magenta " 
     << set_color(colors::yellow) << "yellow" 
     << set_color() << " ]" << std::endl; 
    return EXIT_SUCCESS; 
} 
++

C
+1

Das ist erstaunlich, vielen Dank noch einmal. –

+0

Gern geschehen. Es tut mir leid, dass im Beispiel keine Gesichter enthalten sind, aber diese funktionieren auch, z. '<< set_face (faces :: bold) <<" Bold "' gibt ein fettes Gesicht. –

+0

Danke, ich schreibe normalerweise in C, aber C++ hat manchmal eine sauberere Art, den Code zu organisieren. –