2013-01-25 100 views
9

मुझे लिनक्स का उपयोग करके कुछ वेक्टर डेटा (या अधिक सटीक होने के लिए: कुछ बिंदुओं और पॉलिलाइन) मुद्रित करने की आवश्यकता है। जब मैं इसके लिए Google से पूछता हूं तो यह मुझे कई ट्यूटोरियल और दस्तावेज दिखाता है - लेकिन सभी अंतिम उपयोगकर्ताओं के लिए, प्रोग्रामिंग उदाहरण नहीं।लिनक्स/सीयूपीएस प्रिंटिंग उदाहरण/ट्यूटोरियल?

तो क्या कोई भी एक अच्छा प्रोग्रामर हाउटो/ट्यूटोरियल जानता है जो लिनक्स के तहत प्रिंटिंग दिखाता है?

धन्यवाद!

उत्तर

13

सीयूपीएस का अपना दस्तावेज़ विवरण API नहीं है। इसकी आवश्यकता नहीं है: पोस्टस्क्रिप्ट, पीडीएफ, और जेपीईजी जैसे प्रारूप सीयूपीएस के प्रथम श्रेणी के नागरिक हैं। आप इस तरह की एक फ़ाइल बनाने के लिए जो भी प्रोग्राम या एपीआई पसंद करते हैं, उसका उपयोग करते हैं, और फिर आप इसे CUPS (lpr या सीयूपीएस एपीआई के साथ) भेजते हैं और सीयूपीएस इसे उचित आंतरिक प्रारूप में बदल देगा और इसे प्रिंटर पर भेज देगा।

तो, आपके मामले के लिए, आप लेखक पोस्टस्क्रिप्ट के लिए Cairo जैसे वेक्टर ग्राफिक्स लाइब्रेरी का उपयोग कर सकते हैं, और फिर आप इसे प्रिंट के लिए CUPS पर भेज सकते हैं। यहाँ एक सरल सी उदाहरण है:

// compile with: 
// gcc -Wall -o cairo_print cairo_print.c `pkg-config --cflags --libs cairo` `cups-config --cflags --libs` 

#include <stdio.h> 
#include <cairo.h> 
#include <cairo-ps.h> 
#include <cups/cups.h> 

// A4 width, height in points, from GhostView manual: 
// http://www.gnu.org/software/gv/manual/html_node/Paper-Keywords-and-paper-size-in-points.html 
#define WIDTH 595 
#define HEIGHT 842 

int main(int argc, char** argv) { 
    if (argc!= 2){ 
    fprintf (stderr, "usage: %s word\n", argv[0]); 
    return 1; 
    } 

    // setup 
    char* tmpfilename = tempnam(NULL,NULL); 
    cairo_surface_t* surface = cairo_ps_surface_create(tmpfilename, 
                WIDTH, 
                HEIGHT); 
    cairo_t *context = cairo_create(surface); 

    // draw some text 
    cairo_select_font_face(context, 
         "Arial Black", 
         CAIRO_FONT_SLANT_NORMAL, 
         CAIRO_FONT_WEIGHT_NORMAL); 
    cairo_set_font_size(context, 30); 
    cairo_move_to(context, WIDTH/2, HEIGHT/2); 
    cairo_show_text(context, argv[1]); // the text we got as a parameter 

    // draw a dotted box 
    const double pattern[] = {15.0, 10.0}; 
    cairo_set_dash(context, pattern, 2, 0); 
    cairo_set_line_width(context, 5); 
    cairo_rectangle(context, WIDTH*0.33, HEIGHT*0.33, WIDTH*0.5, WIDTH*0.5); 
    cairo_stroke(context); 

    // finish up 
    cairo_show_page(context); 
    cairo_destroy(context); 
    cairo_surface_flush(surface); 
    cairo_surface_destroy(surface); 

    // print 
    cupsPrintFile(cupsGetDefault(), tmpfilename, "cairo PS", 0, NULL); 
    unlink(tmpfilename); 

    return 0; 
} 

कड़ाई से आप जिनके लिए अस्थायी फ़ाइल की जरूरत नहीं है: कप एपीआई आप एक धारा का निर्माण करने की अनुमति देता है और आपको लगता है कि में पेज डेटा फेंकना सकते हैं (लेकिन एक फ़ाइल डीबगिंग के लिए उपयोगी है) ।