2013-01-25 9 views
9

Linux kullanarak bazı vektör verilerini (veya daha kesin: bazı nokta ve çoklu çizgileri) yazdırmam gerekiyor. Bunun için Google'a sorduğumda bana birçok öğretici ve belge gösteriliyor - ancak son kullanıcılar için, programlama örnekleri yok.Linux/CUPS yazdırma örneği/öğretici?

Linux altında yazdırmayı gösteren iyi bir programcılar NASIL/öğretici bilen var mı?

Teşekkürler!

cevap

13

CUPS kendi belge açıklaması API'ye sahip değil. Birine gerek yok: PostScript, PDF ve JPEG gibi formatlar, CUPS'nin birinci sınıf vatandaşlarıdır. Böyle bir dosya oluşturmak için hangi programı veya API'yi kullanırsanız kullanın ve ardından CUPS'ye (lpr veya CUPS API ile) gönderirsiniz ve CUPS bunu uygun dahili biçime dönüştürür ve yazıcıya gönderir.

Durumunuza göre, PostScript'i yazmak için Cairo gibi bir vektör grafik kitaplığını kullanabilir ve sonra bunu yazdırmak için CUPS'ye gönderirsiniz. CUPS API bir dere inşa etmeyi sağlar ve bu içine sayfa verilerini yayabilir (ancak bir dosya hata ayıklama için kullanışlıdır):

// 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; 
} 

Kesinlikle o geçici dosya gerekmez: Burada basit bir C örneği .