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 .