




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用PDFLib 生成 PDF 文档 ( C语言版)使用指导基本环境打开、关闭、文档信息设定:新建 PDFLib 对象,PDF_new()设定错误处理的方式,PDF_set_parameter(p, errorpolicy, return),return标示当发生错误时直接从Lib函数中返回。设定文档信息,PDF_set_value()新建一个 PDF 文件,PDF_begin_document()新建一个页面,PDF_begin_page_ext()关闭一个页面,PDF_end_page_ext()关闭 PDF 文件,PDF_end_document()释放 PDFLib 对象,PDF_de
2、lete()例外处理,PDF_TRY()和 PDF_CATCH()示例代码:#include #include pdflib.hExample。;return 0;int Example(void)PDF *p;f (p = PDF_new() = (PDF *) 0)printf(Couldnt create PDFlib object (out of memory)!/n);retum(2);PDF_TRY(p) /* This means we must check return values of load_font() etc. */PDF_set_parameter(p, erro
3、rpolicy, return);if (PDF_begin_document(p, d:/hello.pdf, 0, ) = -1) printf(Error: %s/n, PDF_get_errmsg(p);return(2);/* This line is required to avoid problems on Japanese systems */PDF_set_parameter(p, fakebold, true);PDF_set_info(p, Creator, hello.c);PDF_set_info(p, Author, Thomas Merz);PDF_set_inf
4、o(p, Title, Hello, world (C)!);PDF_begin_page_ext(p, a4_width, a4_height, );PDF_setcolor(p, fill, cmyk, 1, 0,0,0);PDF_rect(p, 250,250, 100, 50);PDF_fill(p);PDF_end_page_ext(p, );PDF_end_document(p, );PDF_CATCH(p) printf(PDFlib exception occurred in sample:/n);printf(%d %s: %s/n,PDF_get_errnum(p), PD
5、F_get_apiname(p), PDF_get_errmsg(p);PDF_delete(p);getchar();厂;PDF_delete(p);广;文字输出加载字体使用PDF_load_font()函数。目前在Windows平台下,似乎只能加载可以安 装到Windows系统中的字体。如果加载已经安装到系统中的字体(在C:/windows/fonts文件夹下),可 以直接通过字体的名字加载,如:font = PDF_load_font(p, MS UI Gothic, 0, host, );font = PDF_load_font(p, MKZ2, 0, unicode, );也可以通过
6、制定字体文件加载字体,如:PDF_set_parameter(p, FontOutline, MKZ2=C:/windows/fonts/ MKZ2.ttf);font二 PDF_load_font(p, MKZ2, 0, unicode, );host和unicode是用于字体编码的方式,host日文系统下具体与代码页 cp932等相关,中文系统下与cp936相关。Unicode与PDF所规定的CMAP 文件相关,如:UniJIS-UCS2-H、EUC-H等的编码文件。因为字体已经安装 到了 Windows系统中,具体的字体编码方式,操作系统能够自动处理,无需 我们显式的指定。加载字体是一件
7、很耗费时间的工作,大概能占到整个处理的1/4左右。PDFLib已经作了些优化,当一个字体只要加载过一次,再次加载就会使用 前面产生的字体句柄,不再重新生成。PDFLIb加载字体时默认是嵌入的,这样会增大输出的PDF文件。好处是当 文件被移动到其他系统上时,打开文件时不受字体的影响,否则,打开文件 前需要先安装字体。我们这次的项目,生成的PDF文件需要用FTP转送到 Solaris系统,并且要送入打印机,所以必须以嵌入方式加载的字体。设置字体使用PDF_setfont ()函数,如:PDF_setfont(p, font, 30);30指的是字号,也就是字体的高度。但这个和系统的缩放比例相关。如
8、果 设字体前设定系统的缩放比例为2,实际输出的字体的高度为60个单位。PSEdit的字体的输出过程中,绝大部分采用的是变换系统坐标的方法来确 定字体的大小,所以编程中使用了 PDF_setfont(p, font, 1)的方式,即字 体的大小为当前系统的缩放比例的值相同。文字输出PDFLib的文字处理,较PostScript而言,加强了功能,增加了大量文字及段 落等的处理。但本次PSEdit编程中,受于以前软件框架的限制,只使用了单字 输出的功能PDFnfo_textline (),尽管这个函数也能用于输出一个字符串。PDF_info_textline函数有个选项列表,提供的功能相当丰富。基本
9、上覆盖了 对字体的所有的变化和变形。如:倾斜、旋转、缩放、着色、偏移以及指定字 体等等。文字阴影采用在相互错开的位置上输出两次同样的字符,实现阴影。空心字通过指定 PDF_info_textline 函数的三个选项参数 textrendering、strokewidth、 strokecolor来实现。如输出空心字,边缘宽1个单位,边缘色为青色,边缘线 圆头连接:PDF_se tl inejoin(p, 1);PDF_fit_textline(p, ABCDEF, 0, 50, 550, textrendering=1 strokewidth=1 strokecolor=CMYK 1 0 0
10、0);立体字和艺术字,这个属于描画字的范围,输出方式是组合起来的多组直线和 曲线,线段封闭后,剪切区域形成字体的轮廓区域,然后再用某中颜色或填充 模式进行填充。所以每一个立体字和艺术字,都是一个复杂的剪切图形。图像输出图像的输出使用PDF_load_image和PDF_fit_image,输出图像变得相当简 单了。当然,简单的副作用就是,限制了许多对所加载的图像的处理功能。保 留的几个功能是:着色,缩放,旋转。这似乎对一般的PDF文件也足够了。图像的最小网点,似乎只是报纸打印行业为了使图像不失真而采取的一种特 殊的图像离散化处理。这种处理功能在很通用的图像处理中间件LeadTools中 没有提
11、供,可见最小网点并非一种普遍适用的图像处理手段,应该在更为专业 性的图像处理工具中才有。图形输出路径(path),指的是某个特定区域的边界。路径是任何图形的基础。能够长生路径的操作事实上只有两种:画直线(PDF_moveto, PDF_lineto) 和画曲线(圆 PDF_circle、弧 PDF_arc和 PDF_arcn、曲线 PDF_curveto)描边(PDF_stroke),沿路经使用指定的颜色(PDF_setcolor)和指定的 线宽(PDF_setlinewidth)进行着色。填充(PDF_fill),首先关闭路径(PDF_closepath把最后一个点和开始点 连接直线),然后
12、用指定的颜色(PDF_setcolor)对封闭区域着色。梯度填充(PDF_shfill),是从一种颜色平滑过渡到令一种颜色的填充。填 充前先需要生成颜色模式(PDF_shading)。例如梯度填充一个矩形,颜色 为从蓝色从红色过渡:PDF_setcolor(p, fill, cmyk, 1, 0, 0, 0);PDF_rect(p, 200,500, 200, 100);PDF_clip(p);handle = PDF_shading( p, axial, 210, 550, 350, 550, 0, 1, 0,0,ex tend0=true ext end1=true N=1);PDF_sh
13、fill( p, handle );要实现多组颜色梯度填充,只能把区域安相关颜色分成多个区域,每个区域 安两种颜色填充。剪切(PDF_clip),把当前封闭的区域独立出来,任何超出这个剪切区域 的操作都将无效。剪切,尤其是复杂区域的剪切是图形图像处理中的高级处 理,其低层实现需要极高超的编程技巧和理论水平。剪切处理应当说是 PostScript和PDF中最具有技术含量的部分。剪切时值得注意的是,要恢复到前切前的状态,只能使用PDF_save和 PDF_restore 完成。坐标变换:位移(PDF_translate)、旋转(PDF_rotate)、缩放(PDF_scale)、 歪斜(PDF_s
14、kew)、应用转换矩阵(PDF_concate)。这种对于应用者而言 比较简单的坐标系统,其实是整个系统的精华所在,它为各种形式的图形表现, 提供的最基本和坚实的支持。5.嵌入PDF文档 把其他的PDF文件的页嵌入到当前的PDF文件中,可以指定位置、大小、旋 转,但无法改变颜色。例:handle = PDF_open_pdi_documen t(p, d:/fon t.pdf, 0,);if (handle = -1) pri nt f(Error: %s/n, PDF_ge t_errmsg(p); ret urn(2);page = PDF_open_pdi_page(p, handle,
15、 1,);if (handle = -1) pri nt f(Error: %s/n, PDF_ge t_errmsg(p); ret urn(2);PDF_fi t_pdi_page(p, page, 50, 150, );PDF_close_pdi_page(p, page);PDF_close_pdi_documen t(p, handle);CMYK色:和本次开发相关的颜色空间是CMYK色彩空间。颜色的值为01, 全部为0标示白色,全部为1表示黑色。专色:和这个名字反映出来的意思一样,就是某种特殊的颜色。一般都和打印 机相关,指某种超出打印机混合色之外的颜色。在PSEdit的改造过程中
16、使用了两个(但不一定都用了)自定义的特色:S1和 S2。没有使用其他的(如工业标准定义的)特色。但为什么要这么做,我还无 法理解,也许仅仅是为了分版的需要,在PDFLib中,每一个特色都得按一个颜色空间的级别对待。比如画一条线, 除了基本的CMYK色要画一次外,应用几个特色,就需要重画几次,在PDF 文件中,可以设定OverPri nt属性,来查看最终的(混合色)显示效果。例:调用内置专色:handle = PDF_makespo tcolor(p, PANTONE 871 C, 0);PDF_setcolor(p, stroke, spot, handle, 0.5, 0, 0);PDF_move to(p,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新入员工安全培训考试试题附参考答案(综合题)
- 2025新员工入职安全培训考试试题附参考答案(达标题)
- 铜陵学院《新调为临床微生物学检验》2023-2024学年第二学期期末试卷
- 南开大学滨海学院《中学语文课件设计与制作》2023-2024学年第二学期期末试卷
- 厦门华厦学院《动画与运动规律》2023-2024学年第二学期期末试卷
- 山东省青岛市西海岸新区达标名校2025届初三第二学期数学试题周练七含附加题含解析
- 三江学院《综合技能实训》2023-2024学年第二学期期末试卷
- 上海健康医学院《建筑给水排水工程》2023-2024学年第二学期期末试卷
- 内蒙古包头市回民中学2025届下学期学业水平监测期末联考高三物理试题含解析
- 江西科技师范大学《食品感官及理化检测》2023-2024学年第二学期期末试卷
- 立绘买断合同协议
- 2025春季学期国开电大本科《人文英语3》一平台在线形考综合测试(形考任务)试题及答案
- 针灸推拿治疗失眠的禁忌
- 利达消防L0188EL火灾报警控制器安装使用说明书
- 河南省驻马店市部分学校2024-2025学年高三下学期3月月考地理试题(含答案)
- 2025江苏盐城市射阳县临港工业区投资限公司招聘8人高频重点模拟试卷提升(共500题附带答案详解)
- 2025至2030年中国声音感应控制电筒数据监测研究报告
- DB50T 1041-2020 城镇地质安全监测规范
- 2025-2030年中国冰激凌市场需求分析与投资发展趋势预测报告
- 体育赛事运营方案投标文件(技术方案)
- 海绵城市施工质量保证措施
评论
0/150
提交评论