pdf-api2 编程指南

上传人:第*** 文档编号:33557527 上传时间:2018-02-15 格式:DOC 页数:19 大小:177KB
返回 下载 相关 举报
pdf-api2 编程指南_第1页
第1页 / 共19页
pdf-api2 编程指南_第2页
第2页 / 共19页
pdf-api2 编程指南_第3页
第3页 / 共19页
pdf-api2 编程指南_第4页
第4页 / 共19页
pdf-api2 编程指南_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《pdf-api2 编程指南》由会员分享,可在线阅读,更多相关《pdf-api2 编程指南(19页珍藏版)》请在金锄头文库上搜索。

1、PDF:API2 编程指南PDF:API2 编程指南版本0.10 - 2004-08-20 - Original version posted at http:/.au/clients/pdfapi2/0.20 - 2007-02-14 - 完成代码修正、文档更新、页面样式调整。下载链接修正。 指南编程样例PDF 是一种强有力的文档发布媒体,掌握对它的处理将为你带来很大的优势。不过要提醒的是文档中有不少相关的术语,所以你可以直接使用样例代码,不必强求全面深入的理解。这篇文档是用来教你使用 PDF:API2 这个模块的,它可以说是 Perl 程序员可以使用的最深入的 PDF 工具模块了。但是本文

2、不会深入介绍 PDF 本身,如果你感兴趣的话,Adobe 的网站上有足够了解细节的规范可供下载。 为了使用 PDF:API2,有几个必要的步骤。这篇文章会涉及那些最基础的创建 PDF 的步骤。实际应用中应该还有很多其他的功能和选项可以考虑的。这篇文章最初是为了 PDF:API2 的 0.03.77 版本而编写的。如果你使用的是更早的版本,我建议你进行升级。当然不升级也许没问题,但是我不能保证。自从 0.04 版发布以来,我还没有发现有什么改动会与这个文档产生冲突。我是谁?我是一个 Perl 爱好者,就像你一样。只不过我在出版业工作了十二年以上,在印刷之前所有工序的技术问题上面都有些经验。我解决

3、过的问题包括数据和软件相关的,也有颜色管理方面的,还有照排或系统相关的。在编写本文档的时候,我正在为一个项目工作。那个项目中需要使用 PDF:API2 来实现在线文具订购系统的精确预览功能。之后我还用 PDF:API2 为一个垃圾邮件过滤公司实现了较为复杂的报表系统。如何使用 PDFPDF 的优势是可以在一个文件中嵌入各种信息,比如颜色、文字,以及字体和图片。所有这些内容都可以用单个文件发布出去,然后既可以在屏幕上显示,也可以进行高精度的打印输出。PDF 的内置颜色管理功能对于那些高端输出系统来说是非常受欢迎的。因为 PDF 集成了这么许多功能,对于它的编程也会比较复杂,不过你还是可以逐渐上手

4、。这个指南主要介绍了那些比较复杂的边框处理功能。也许有一天我会有时间进一步介绍其他的细节。不过对于 PDF 来说,你其实不必了解所有的细节也能使用它或进行相关的编程。你可以在 LGPL 协议的约束下使用 text_block 这个子程序。一些重要的 PDF 概念媒体框、出血框、媒体框和作品框当你观察一篇打印的文档时,可能会注意到某个图片或某个色块恰好覆盖到了纸的边界。让我告诉你一个秘密吧:其实它会超出边界!每个打印机生厂商可能会有不同程度的越界宽度,但是肯定都支持越界。这种界限被称为出血线。另外一件要注意的事就是我们并非在真正的纸张大小范围中打印。如果是那样的话,出血线以外的东西也会被打印在纸

5、上,这可不是什么好事。所以在 A4 纸(或者信纸)上打印的时候,其实我们会稍稍超出 A4 的范围一些,这样出血线就能和纸张边缘尽量靠近。我们把纸张称为媒体,因为你可能还会在塑料、幻灯片、T 恤等物品上打印。在打印之后,我们可以把打印件切成你需要的大小。这个界限就被称为裁切范围。理论上说,任何需要最终展示的信息都不应该超过这个范围,除非打印机有什么限制。现在还剩下的就是作品框了。这个范围顾名思义就是用来容纳真正重要的“艺术品” 的地方。一般来说这个范围离裁切框的距离和出血框离裁切框的距离相等。这么规定是因为尽管现在的打印机都很精确,但是还不能算完美。如果你的文档中有些重要的内容超越了这个界限,那

6、么很有可能在实际的输出中会看不到它。核心字体、postscript 字体、truetype 字体和构造字体如同之前介绍的,PDF 能把各种信息集成在一个文件中,也包括其中使用的字体。字体的来源比较多,但是对于 PDF:API2 来说,真正支持的字体其实只有核心字体、 postscript 字体和 truetype 字体。我们不会在这个文档中介绍所有的字体,而只会使用核心字体,因为它完全不依赖于外部文件。度量系统以及座标原点PDF 默认情况下会使用” 点 “作为长度单位,不过这里的例子程序会显示如何使用那些大家更加习惯的单位(下面会看到,我用的是毫米)。座标轴的原点被定在 左下角 ,这类似于笛卡

7、尔座标。一般来说我们习惯于把左上角定义为 (0,0),座标轴指向右下角。但是在处理 PDF 的时候,你需要习惯这种左下角为原点的座标系统。当然,要是能知道纸张的大小,那么应该很容易写一个函数进行两种座标的转换,不过这里不会介绍它的实现。软件安装安装 PDF:API2 的步骤在这个文档中不会介绍,不过类似于其他所有的 CPAN 模块的安装那样,在 Linux 或其他 Unix 衍生系统上你可以用下面的命令:sudo perl -MCPAN -e install PDF:API2如果你遇到了安装问题,那么可以问问系统管理员或者某个信得过的高手。实在不行的话还可以去 PerlMonks 碰碰运气.

8、创建文档一个例子在这个指南中,我们会创建一个如上的文件(你可以用自己的照片,我用的是前澳大利亚首相的照片)。这里要注意的是我们定义了裁切框,所以在 Acrobat、kpdf、xpdf 或者其他各种 PDF 浏览器中查看的时候,它看起来应该类似这样:你可以在这里下载源程序: pdf-api2.txt (10k 字节),最终生成的 PDF 文件在此下载: pdf-api2.pdf (59k 字节)载入模块大多数情况下,你只要 use 这个模块就可以了。这样,在需要的时候,它会自动调用软件包中附带的其他模块。当然,在这里我们还会一并 use strict 和 warnings,因为我们都是好程序员,

9、不是么?1: #!/usr/bin/perl2:3: use strict;4: use warnings;5:6: use PDF:API2;定义基本常量这些常量使得 PDF:API2 的长度更加容易衡量。PDF 习惯于使用点来作为大小和长度的单位,而这些常量使我们能使用其他的单位。比如 5/mm 就能返回 5 毫米对应的点数。而这里的点数(pt)是用来更加清晰的显示长度单位是点数的情况。注意这些定义都不是必须的,只是为了便于使用 Perl 来创建 PDF 文件而已。 对于那些喜欢数字的人 :每英寸有 72 个 postscript 的点,而一英寸相当于 25.4 毫米。8: use con

10、stant mm = 25.4 / 72;9: use constant in = 1 / 72;10: use constant pt = 1;12: my ( $paragraph1, $paragraph2, $picture ) = get_data();定义 PDF这是创建 PDF 文件的第一步,而这里需要的仅仅是定义而已。这个例子中我们还一并设置了文件的名字,但这不是必须的,其实我们可以在最后再指定它。14: my $pdf = PDF:API2-new( -file = $0.pdf );创建页面每当你调用 $pdf-page($page) 的时候,就会获得一个新的页面。这里 -

11、page 方法其实调用了 PDF:API2:Page 类的构造器,只不过它还会把这个页面附加到当前 PDF 的末尾。如果你在调用此方法的时候还设置了页号,那么这个页面会插入到那一页之后;如果没有那么多页,那它就会成为文档的最后一页。16: my $page = $pdf-page;设置属性对于 PDF 来说,每一页都可以有自己的大小定义。我们之前介绍了描述页面大小的四种边框。在这里例子里我们只会设置媒体框(纸张大小)和裁切框(裁剪后剩余的范围)。大多数边框会自动继承父容器的定义,所以这里真正需要定义的其实只有媒体框。这里媒体框只需要设置宽度和高度。而出血框, 裁切框和作品框都需要分别设置左、下

12、、右、上边界。17: $page-mediabox (105/mm, 148/mm);18: #$page-bleedbox( 5/mm, 5/mm, 100/mm, 143/mm);19: $page-cropbox (7.5/mm, 7.5/mm, 97.5/mm, 140.5/mm);20: #$page-artbox ( 10/mm, 10/mm, 95/mm, 138/mm);定义字体字体是在 PDF 级别定义的,然后所有的页面都可以使用。所以一般是在程序开始时候进行定义,这样可以避免在 PDF 中反复嵌入相同的字体。类似页面的定义,我们可以用另一个函数来定义字体对象。在这个例子中,

13、我们只会使用核心字体。这类的字体 Adobe 已经授权开发人员在文件中免费的使用了。另外,PDF:API2 还提供了一些微软授权使用的核心字体。如何存储这些对象是你的自由。我喜欢使用嵌套的哈希来集中存放它们,这样以后用起来显得更加方便些。但是,只要你高兴,可以把 Helvetica Bold 存储在 $foo 或者 $helveticabold 这样的变量中.你可能需要注释掉这里的某些行,因为它们可能不必定义。要知道,每定义一个字体,就会在 PDF 中多嵌入一种字体,哪怕你从来都没有用过它。22: my %font = (23: Helvetica = 24: Bold = $pdf-core

14、font( Helvetica-Bold, -encoding = latin1 ),25: Roman = $pdf-corefont( Helvetica, -encoding = latin1 ),26: Italic = $pdf-corefont( Helvetica-Oblique, -encoding = latin1 ),27: ,28: Times = 29: Bold = $pdf-corefont( Times-Bold, -encoding = latin1 ),30: Roman = $pdf-corefont( Times, -encoding = latin1 )

15、,31: Italic = $pdf-corefont( Times-Italic, -encoding = latin1 ),32: ,33: );做点有意义的事情目前为止还没有发生任何事情。如果你保存这个 PDF 文件(执行 $pdf-save; $pdf-close;),那么打开它时会看到一个空的 PDF 文件。现在我们开始做点有意义的事情。PDF 是自底向上创建的,后绘制的内容会浮在之前绘制的内容的上面。对于我们的样例 PDF 来说,有两个主要的区域:标题区域和文本区域。这两个区域互相不覆盖,所以我们先绘制哪个都可以。我们先从文档的顶部开始,首先定义那块蓝色的区域,因为它出现在其他对象的下面。追加内容绘制蓝色方块为了完成这个任务,我们需要从页面获取一个图形句柄。我们可以把它命名为 $gfx ,用它来完成所有图形元素的绘制,但是这样会导致 PDF 的事后编辑非常困难。如果你并不打算以后再编辑创建的文件,那么这样做是可以的。在这里,我们会每次用一个新的句柄来绘制新的对象。 注意:一般认为最佳实践是每用完一个句柄就对它调用 save() 和 restore() 方法。也许我会在下一版实践它。35: my $blue_box = $page-gfx;下一步我们需要设置的是画笔的颜色。记住,这里定义的只是颜色,我们

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号