¿Ejemplo / tutorial de impresión de Linux / CUPS?

Necesito imprimir algunos datos vectoriales (o para ser más exactos: algunos puntos y polilíneas) usando Linux. Cuando le pido a Google que me muestre muchos tutoriales y documentaciones, pero todo para usuarios finales, no hay ejemplos de progtwigción.

Entonces, ¿alguien sabe un buen progtwigdor / tutorial de progtwigdores que muestre la impresión en Linux?

¡Gracias!

CUPS no tiene su propia descripción de documento API. No necesita uno: formatos como PostScript, PDF y JPEG son ciudadanos de primera clase de CUPS. Utiliza cualquier progtwig o API que quieras para crear un archivo de este tipo, y luego lo envías a CUPS (con lpr o con la API de CUPS) y CUPS lo transformará al formato interno apropiado y lo enviará a la impresora.

Entonces, para su caso, puede usar una biblioteca de gráficos vectoriales como Cairo para crear PostScript, y luego enviarlo a CUPS para imprimir. Aquí hay un ejemplo simple de C:

 // compile with: // gcc -Wall -o cairo_print cairo_print.c `pkg-config --cflags --libs cairo` `cups-config --cflags --libs` #include  #include  #include  #include  // 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; } 

Estrictamente no necesita ese archivo temporal: la API de CUPS le permite construir una secuencia y puede emitir los datos de la página (pero un archivo es útil para la depuración).