Linuxを使用してベクターデータを印刷する必要があります(正確にはいくつかのドットとポリライン)。 Googleには、多くのチュートリアルやドキュメントが表示されますが、すべてのエンドユーザー向けにプログラミング例はありません。Linux/CUPSの印刷例/チュートリアル?
誰でも、Linuxでの印刷を示す良いプログラマーのHOWTO /チュートリアルを知っていますか?
ありがとうございます!
Linuxを使用してベクターデータを印刷する必要があります(正確にはいくつかのドットとポリライン)。 Googleには、多くのチュートリアルやドキュメントが表示されますが、すべてのエンドユーザー向けにプログラミング例はありません。Linux/CUPSの印刷例/チュートリアル?
誰でも、Linuxでの印刷を示す良いプログラマーのHOWTO /チュートリアルを知っていますか?
ありがとうございます!
CUPSには独自のドキュメント記述APIがありません。 PostScript、PDF、JPEGなどのフォーマットは、CUPSの一流の市民です。そのようなファイルを作成するプログラムやAPIを使用し、CUPS(lpr
またはCUPS APIの場合)に送信すると、CUPSはこれを適切な内部形式に変換してプリンタに送信します。
あなたのケースでは、Cairoのようなベクターグラフィックスライブラリを使用してPostScriptを作成し、それを印刷用にCUPSに送信することができます。ここでは簡単なCの例です:
// 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;
}
厳密にあなたは一時ファイルという必要はありません:CUPS APIを使用すると、ストリームを構築することを可能にし、そのにページデータを発することができる(ただし、ファイルがデバッグ用に便利です) 。