网站推广具体内容,动易网站 价格,站外推广方式有哪些,wordpress装好域名打不开1. 基本环境 ① 打开、关闭、文档信息设定#xff1a; 新建PDFLib对象#xff0c;PDF_new() 设定错误处理的方式#xff0c;PDF_set_parameter(p, errorpolicy, return)#xff0c;return标示当发生错误时直接从Lib函数中返回。 设定文档信… 1. 基本环境 ① 打开、关闭、文档信息设定 新建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_delete() 例外处理PDF_TRY()和PDF_CATCH() ② 示例代码 #include stdio.h
#include pdflib.hint main(int argc, char *argv[])
{Example();return 0;
}int Example(void)
{PDF *p;if ((p PDF_new()) (PDF *) 0){printf(Couldnt create PDFlib object (out of memory)!/n);return(2);}PDF_TRY(p) {/* This means we must check return values of load_font() etc. */PDF_set_parameter(p, errorpolicy, 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, hypertextencoding, host);PDF_set_parameter(p, fakebold, true);PDF_set_info(p, Creator, hello.c);PDF_set_info(p, Author, Thomas Merz);PDF_set_info(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), PDF_get_apiname(p), PDF_get_errmsg(p));PDF_delete(p);getchar();return(2);}PDF_delete(p);return 0;
} 2. 文字输出 ① 加载字体 使用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, ); 也可以通过制定字体文件加载字体如 PDF_set_parameter(p, FontOutline, MKZ2C://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系统中具体的字体编码方式操作系统能够自动处理无需我们显式的指定。 加载字体是一件很耗费时间的工作大概能占到整个处理的1/4左右。PDFLib已经作了些优化当一个字体只要加载过一次再次加载就会使用前面产生的字体句柄不再重新生成。 PDFLIb加载字体时默认是嵌入的这样会增大输出的PDF文件。好处是当文件被移动到其他系统上时打开文件时不受字体的影响否则打开文件前需要先安装字体。我们这次的项目生成的PDF文件需要用FTP转送到Solaris系统并且要送入打印机所以必须以嵌入方式加载的字体。 ② 设置字体 使用PDF_setfont函数如 PDF_setfont(p, font, 30); 30指的是字号也就是字体的高度。但这个和系统的缩放比例相关。如果设字体前设定系统的缩放比例为2,实际输出的字体的高度为60个单位。PSEdit的字体的输出过程中绝大部分采用的是变换系统坐标的方法来确定字体的大小所以编程中使用了PDF_setfont(p, font, 1)的方式即字体的大小为当前系统的缩放比例的值相同。 ③ 文字输出 PDFLib的文字处理较PostScript而言加强了功能增加了大量文字及段落等的处理。但本次PSEdit编程中受于以前软件框架的限制只使用了单字输出的功能PDF_info_textline尽管这个函数也能用于输出一个字符串。 PDF_info_textline函数有个选项列表提供的功能相当丰富。基本上覆盖了对字体的所有的变化和变形。如倾斜、旋转、缩放、着色、偏移以及指定字体等等。 ④ 文字阴影 采用在相互错开的位置上输出两次同样的字符实现阴影。 ⑤ 空心字 通过指定PDF_info_textline函数的三个选项参数textrendering、strokewidth 、strokecolor来实现。如输出空心字边缘宽1个单位边缘色为青色边缘线圆头连接 PDF_setlinejoin(p, 1); PDF_fit_textline(p, ABCDEF, 0, 50, 550, textrendering1 strokewidth1 strokecolor{CMYK 1 0 0 0}); ⑥ 立体字和艺术字这个属于描画字的范围输出方式是组合起来的多组直线和曲线线段封闭后剪切区域形成字体的轮廓区域然后再用某中颜色或填充模式进行填充。所以每一个立体字和艺术字都是一个复杂的剪切图形。 3. 图像输出 ① 图像的输出使用PDF_load_image和PDF_fit_image输出图像变得相当简单了。当然简单的副作用就是限制了许多对所加载的图像的处理功能。保留的几个功能是着色缩放旋转。这似乎对一般的PDF文件也足够了。 ② 图像的最小网点似乎只是报纸打印行业为了使图像不失真而采取的一种特殊的图像离散化处理。这种处理功能在很通用的图像处理中间件LeadTools中没有提供可见最小网点并非一种普遍适用的图像处理手段应该在更为专业性的图像处理工具中才有。 4. 图形输出 ① 路径path指的是某个特定区域的边界。路径是任何图形的基础。 ② 能够长生路径的操作事实上只有两种画直线PDF_movetoPDF_lineto和画曲线圆PDF_circle、弧PDF_arc和PDF_arcn、曲线PDF_curveto ③ 描边PDF_stroke沿路经使用指定的颜色PDF_setcolor和指定的线宽PDF_setlinewidth进行着色。 ④ 填充PDF_fill首先关闭路径PDF_closepath把最后一个点和开始点连接直线然后用指定的颜色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,extend0true extend1true N1 ); PDF_shfill( p, handle ); 要实现多组颜色梯度填充只能把区域安相关颜色分成多个区域每个区域安两种颜色填充。 ⑥ 剪切PDF_clip把当前封闭的区域独立出来任何超出这个剪切区域的操作都将无效。剪切尤其是复杂区域的剪切是图形图像处理中的高级处理其低层实现需要极高超的编程技巧和理论水平。剪切处理应当说是PostScript和PDF中最具有技术含量的部分。 剪切时值得注意的是要恢复到前切前的状态只能使用PDF_save和PDF_restore完成。 ⑦ 坐标变换位移PDF_translate、旋转PDF_rotate、缩放PDF_scale、歪斜PDF_skew、应用转换矩阵PDF_concate。这种对于应用者而言比较简单的坐标系统其实是整个系统的精华所在它为各种形式的图形表现提供的最基本和坚实的支持。 5. 嵌入PDF文档 ① 把其他的PDF文件的页嵌入到当前的PDF文件中可以指定位置、大小、旋转但无法改变颜色。例 handle PDF_open_pdi_document(p, d://font.pdf, 0, );
if (handle -1) {printf(Error: %s/n, PDF_get_errmsg(p));return(2);
}
page PDF_open_pdi_page(p, handle, 1, );
if (handle -1) {printf(Error: %s/n, PDF_get_errmsg(p));return(2);
}PDF_fit_pdi_page(p, page, 50, 150, );
PDF_close_pdi_page(p, page);
PDF_close_pdi_document(p, handle); 6. 颜色 ① CMYK色和本次开发相关的颜色空间是CMYK色彩空间。颜色的值为0~1全部为0标示白色全部为1表示黑色。 ② 专色和这个名字反映出来的意思一样就是某种特殊的颜色。一般都和打印机相关指某种超出打印机混合色之外的颜色。 在PSEdit的改造过程中使用了两个但不一定都用了自定义的特色S1和S2。没有使用其他的如工业标准定义的特色。但为什么要这么做我还无法理解也许仅仅是为了分版的需要 ③ 在PDFLib中每一个特色都得按一个颜色空间的级别对待。比如画一条线除了基本的CMYK色要画一次外应用几个特色就需要重画几次在PDF文件中可以设定OverPrint属性来查看最终的混合色显示效果。 ④ 例 调用内置专色 handle PDF_makespotcolor(p, PANTONE 871 C, 0);
PDF_setcolor(p, stroke, spot, handle, 0.5, 0, 0);
PDF_moveto(p, 100, 620);
PDF_lineto(p, 250, 620);
PDF_stroke(p); 生成自定义专色 PDF_setcolor(p, stroke, cmyk, 0, 0, 1, 0);
handle PDF_makespotcolor(p, S1, 0);
PDF_setcolor(p, stroke, spot, handle, 0.4, 0, 0);
PDF_moveto(p, 100, 620);
PDF_lineto(p, 250, 620);
PDF_stroke(p);