科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Windows系统打印选项在Linux上的移植 (2)

Windows系统打印选项在Linux上的移植 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

移植是实现传统高层应用程序跨平台运行的一项核心技术。打印子系统移植是应用程序移植的重要组成部分。实现打印选项设置模块在不同平台上的用户接口UI(User Interface)转换是实现打印子系统移植过程中的一项核心技术。

作者:龚奕平 来源:IBM DW中国 2007年10月18日

关键字: 操作系统 Linux 打印 Windows

  • 评论
  • 分享微博
  • 分享邮件
 

2. Linux GNOME Print打印选项设置

在Linux平台上,可以使用GNOME Print来实现打印设置功能。GNOME Print是GNOME支持Linux打印的模块。GNMOE Print涵盖了打印实现的各个方面,比如设置打印功能,生成打印文档,设置打印字体等等。以下仅针对GNOME Print中和设置打印选项相关的功能进行阐述。

图2 Linux GNOME Print系统打印设置对话框

Linux GNOME Print系统打印设置对话框如图2所示。该对话框是GNOME Print打印设置的前台UI界面。在GNOME Print中,打印设置的后台数据被封装在结构GnomePrintConfig中。同时,GNOME Print还提供了一系列函数,如gnome_print_config_set()和gnome_print_config_get(),来访问该结构。详细内容请参考第四小节。

Linux GNOME Print系统打印设置和Windows系统打印设置在数据接口和定义上是完全不同的。必须通过数据转换才能实现他们之间的互操作。这就是移植的核心,也是本文重点阐述的内容。

3. GNOME Print打印选项设置移植结构

图3 GNMOE Print打印选项设置移植结构

图3展示了在Linux平台上实现Windows打印选项设置移植的基础结构。从图中可以看出,打印选项设置移植的核心就是实现不同平台数据接口的转换:即Windows平台打印选项设置结构DEVMODE和Linux GNOME Print打印选项设置结构GnomePrintConfig之间的转换。下一小节将详细阐述这些数据结构之间的转换细节。

4 GNOME Print打印设置移植细节

为了使用Linux GNOME Print实现打印设置,通常要引入下列头文件:

#include <libgnomeprintui/gnome-print-dialog.h>
#include <libgnomeprint/gnome-print.h>

在GNOME Print中,和前台UI对话框的相关的结构和接口被定义在第一个头文件中;而和后台数据处理相关的结构和接口则被定义在第二个头文件中。

使用GNMOE Print实现打印设置移植的流程如图4所示。以下将逐一讨论这个流程中的各个细节。

图4 GNMOE Print打印设置移植流程

4.1 设置GNOME Print打印作业

启动GNOME Print打印设置的第一步是使用gnome_print_job_new() 来创建一个打印作业,即GnomePrintJob。每一个GnomePrintJob都和一个打印作业设置,即GnomePrintConfig,相关联。事实上,使用GNOME Print设置打印选项就是通过设置GnomePrintConfig来完成的。将参数NULL传递给gnome_print_job_new() 意味着创建一个新的GnomePrintJob,并用默认值设置和它关联的GnomePrintConfig。

GnomePrintJob * pJob;
GnomePrintConfig *pConfig;
pJob = gnome_print_job_new(NULL);
if (!pJob) 
    return 0;

GnomePrintConfig的默认值可以通过接下来的调用
gnome_print_job_get_config() 来获得:

    pConfig = gnome_print_job_get_config(pJob);
if (!pConfig) 
    return 0;

4.2 设置GNOME Print打印参数

得到GnomePrintConfig后,用户可以根据需要修改打印作业设置。如下代码设置了三个重要的打印参数:

1. 打印纸张名称:A4。

2. 打印纸张方向:R0。在GNOME Print中,R0和R180表示打印纸张方向为纵向;R90和R270则表示打印纸张方向为横向。

3. 打印纸张长度单位表示:cm(厘米)。长度可以使用厘米或英寸(inch)等单位来表示。在此时使用cm以方便移植。

//设置参数变量
    const char *pPaperName     = "A4";
    const char *pPaperOrientation = "R0";
const char *pPreferedUnit   = "cm";
//设置纸张名称
    gnome_print_config_set( pConfig,
                         (const guchar*)GNOME_PRINT_KEY_PAPER_SIZE,
                         (const guchar*)pPaperName );
    //设置打印纸张方向
    gnome_print_config_set( pConfig,
                         (const guchar*)GNOME_PRINT_KEY_PAPER_ORIENTATION,
                         (const guchar*)pPaperOrientation )
    //设置纸张大小
    gnome_print_config_set( pConfig,
                         (const guchar*)GNOME_PRINT_KEY_PREFERED_UNIT,
                         (const guchar*)pPreferedUnit) );
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章