Linux/CUPS 打印示例/教程
Linux/CUPS printing example/tutorial?
我需要使用 Linux 打印一些矢量数据(或者更准确地说:一些点和折线)。当我向谷歌询问时,它向我展示了许多教程和文档 - 但都是针对最终用户的,没有编程示例。
那么有谁知道一个好的程序员 HOWTO/教程,它显示了在 Linux 下打印?
谢谢!
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 wordn", 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 允许您构造流,您可以将页面数据发送到其中(但文件便于调试)。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- C++ GDB Python 漂亮的打印教程
- Linux/CUPS 打印示例/教程