CUPS không có API mô tả tài liệu riêng. Nó không cần một: các định dạng như PostScript, PDF và JPEG là các công dân hạng nhất của CUPS. Bạn sử dụng bất kỳ chương trình hoặc API nào bạn muốn tạo một tệp như vậy và sau đó bạn gửi nó tới CUPS (với lpr
hoặc với CUPS API) và CUPS sẽ chuyển đổi nó sang định dạng nội bộ thích hợp và gửi nó tới máy in.
Vì vậy, đối với trường hợp của bạn, bạn có thể sử dụng thư viện đồ họa véc tơ như Cairo để viết PostScript, sau đó bạn gửi nó tới CUPS để in. Dưới đây là một C ví dụ đơn giản:
// 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;
}
đúng bạn không cần phải có tập tin tạm thời: CUPS API cho phép bạn xây dựng một dòng suối và bạn có thể phát ra các dữ liệu trang vào đó (nhưng một tập tin là có ích để gỡ lỗi) .
Nguồn
2013-02-01 21:26:15