2013-01-25 43 views
9

Tôi cần in một số dữ liệu vectơ (hoặc chính xác hơn: một số dấu chấm và polylines) bằng Linux. Khi tôi yêu cầu Google cho rằng nó cho tôi thấy nhiều hướng dẫn và tài liệu - nhưng tất cả cho người dùng cuối, không có ví dụ lập trình.Ví dụ/hướng dẫn in Linux/CUPS?

Vì vậy, không ai biết một người lập trình tốt HƯỚNG DẪN/hướng dẫn cho thấy in dưới Linux?

Cảm ơn!

Trả lời

13

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) .

Các vấn đề liên quan