基于Publisher自定义模板的自动排版系统.docx
《基于Publisher自定义模板的自动排版系统.docx》由会员分享,可在线阅读,更多相关《基于Publisher自定义模板的自动排版系统.docx(6页珍藏版)》请在冰豆网上搜索。
![基于Publisher自定义模板的自动排版系统.docx](https://file1.bdocx.com/fileroot1/2023-6/2/88313d1a-719d-4f5d-9d0b-9c5b0a3454c8/88313d1a-719d-4f5d-9d0b-9c5b0a3454c81.gif)
基于Publisher自定义模板的自动排版系统
论文导读:
:
构建基于Publisher的自定义模板页,通过建立图片、文字、配色等模板页元素与数据库字段的映射关系,实现日历设计的自动快速排版与拼版。
提出了针对模板页图片元素的位置、大小、旋转及叠层次序的自动识别及处理方法,解决了多合一拼版的时效问题。
论文关键词:
Publisher,日历,自定义模板,排版
0引言
日历等印刷片的版面设计,具有页数多,格式系列化的特点,即图片、文字、艺术字等页面元素在每一页的大小及相对位置是基本不变的,只是其图片摘要求时,设计的工作量较大,设计周期也较长,不易满足用户的需求。
如果能将日历设计中一年365天所用到的所有图片、文字及艺术字等相关信息保存在数据库中,每条记录存放一页的元素属性信息,则可以通过对MicrosoftOfficePublisher对象编程,根据数据库中的记录的页面元素的属性值,按页将版面元素添加到各个页面并正确地设置其属性。
为了简化数据库结构及减少记录的信息量,象元素在页面中的位置及大小等信息通常是无需记录的,可通过预设一个页面模板,自动生成其它页面时按此模板页进行定制即可。
也就是说,每当设计一种新的版式时,人工只需设计一个模板页,其它页面由软件按此模板自动生成,它带来的另一个好处是,定制板式也能较快实现,只需修改模板页即可。
1系统原理
通常一个Publisher模板页上有四五十个排版元素,如图1.1所示。
元素可分为两类:
一是在每页中保持不变的元素,如每页中的背景底图等;二是在各页中内容或格式等有变化的元素,如日期、星期、插图等。
第一类元素的处理方法较简单,只要通过复制模板页就能完成,这里不作讨论,对模板中的第二类元素首先要进行与数据库中字段的“关联”日历,以便在自动生成新页时让系统能“识别”出模版中的某个元素是否可变,若可变,则能找出它的属性值记录在哪个字段中。
简单地说,“关联”就是指将模板页中的可变元素与数据库表中的字段名进行一一对应的映射过程。
Publisher
图1.1模板页示例
模板页中的可变元素的“关联”结果应能随Publisher模板页保存,但不破坏模板页元素的外观效果,同时,软件系统能设置、修改、识别其“关联”信息。
显然,将“关联”信息写入到可变元素的某个特定的属性中是较好的解决方案,即,只要将字段名写入到相应元素对象的某个属性。
根据MicrosoftOfficePublisher的对象模型,Publisher模板页上的图片、文本框、艺术字对象都有一个Tags属性集合,此属性集可用于存放出版物的标签或自定义属性,非常适合用于记录“关联”信息,利用它提供的Add方法能将新的Tag对象添加到指定的Tags中,并返回新的Tag对象,其格式如下:
obj.Tags.Add(Name,Value)
obj表示Publisher模板页上的元素对象。
Name:
String类型。
要添加的标签的名称。
如果已经存在具有同名的标签,将会出现错误。
Value:
Variant类型。
指定给标签的值。
实用时在这里可指定关联的字段名。
在“关联”算法的设计中,系统首先对模板页中所有的排版元素进行检测,列出所有元素对象的类型、名称及关联信息,并将此信息按对象的类型分类显示在列表框中,由用户通过鼠标在此列表中选择欲关联的对象,系统将自动根据用户选中的元素在Publisher模板页上将其用选定符标出。
值得注意的是,不应让用户直接用鼠标在Publisher文档上选取,因为当页面元素较多或元素较小时,很难找准哪个对象是我们所需要的,也容易产生漏选。
元素选定后,由用户指定与之“关联”的字段名后保存,“关联”信息也将随Publisher模板页一起保存。
自动生成其它页面时,系统接收用户指定所需的页数,利用模板页复制出各生成页,通过检测每页中各元素对象的Tags集合的Tag对象的Name和Value,提取出与之关联的字段名,从数据库中取出对应的值进行设置或修改。
这种处理手段对文本框、艺术字对象是有效的,因为通过文本框对象的TextEffect.Text属性及艺术字对象的TextFrame.TextRange.Text属性可设置文字内容,其它如文字颜色等属性也可通过CMYK参数进行设置和修改核心期刊。
但对于图片对象无法采用这种处理方法,因为在MicrosoftOfficePublisher的对象模型中,已添加到Publisher文档的图片对象是不能通过属性值更换图片的,只有通过先删除再添加的方法进行操作,因此,对于可变图片应采用特殊的处理手段,为了将新添加的图片准确地插入到模板图片的位置,在进行自动生成前,不但要有与它关联字段的信息(保存的是图片文件所在路径及文件名),还应保存模板图片在本页中的Left、Top、Width、Height等属性,当存下这些信息后,可将模板页中的可变图片删除,在新生成的页面时,按保存信息中的字段名及Left、Top、Width、Height等属性将新图片插入到相应的页面中的指定位置。
2图片叠层处理
模板页中通常有若干幅图片,且某些图片之间有可能有叠层关系,比如背景图片在所有图片的底层。
在MicrosoftOfficePublisher的对象模型中,其叠层关系是通过图片对象的ZOrderPosition属性值的大小进行描述,ZOrderPosition值从底层到顶层对应为从小到大。
由于对模板页中的可变图片处理时,这了提高效率,对可变图片记录下相应的关联值后将从模板页中删除,复制生成新页面后再根据记录的关联值从新插入日历,为了保持原来图片的叠层关系,需对它们的叠层位置进行调整。
Publisher对象模型中,提供了调整图层位置的方法,调用Shapes集合中Shape对象的ZOrder方法可调整图层次序(即更改Shape对象的z顺序位置)。
格式如下:
expression.ZOrder(ZOrderCmd)
expression:
该表达式代表图片对象。
ZOrderCmd:
MsoZOrderCmd类型。
指定将指定形状移动到相对于其他形状的位置。
它可取的值为:
msoSendToBack=1,msoBringForward=2,msoSendBackward=3,msoBringInFrontOfText=4,msoSendBehindText=5。
2.1预处理模板页
定义用于保存图片对象主要信息的结构picState。
PrivateTypepicState
picIDAsString‘图片对象的标识(唯一)
picFdAsString‘与此图片关联的数据字段名
picPageAsInteger‘此图片在publisher文档中的页码
picTopAsDouble‘图片左上角与页面顶部的距离
picLeftAsDouble‘图片左上角与页面左边的距离
picHeightAsDouble‘图片的高度
picWidthAsDouble‘图片的宽度
picZOrderPositionAsLong‘图片在Z轴上的叠层顺序位置
picRotationAsSingle‘图片旋转角度
EndType
首先,遍历模板页中的所有图片对象,为每个图片对象构建一个picState结构的数据,组成一个结构数组,以图片对象的属性值填充picState结构,其中,图片对象的Name、ZOrderPosition属性除了填入picState结构中的picID和picZOrderPosition,还应将它们通过Tags集合的Add方法加入到Tags集合中,作为以后的图层次序调整时的原始依据。
然后,对picState结构数组以ZOrderPosition为关键字从大到小的降序进行排序并保存,最后,删除模板页中的所有的可变的图片对象。
用模板页复制出来的新的生成页中,只保留了不变的图片对象,可变图片对象全部已删除,只需在新页面中插入可变图片对象后调整它们的ZOrderPosition值使它们保持原来的相对位置即可。
2.2图片对象插入和保序
通过调用指定页面的Shapes集合的AddPicture方法可图片对象加入到指定的Publisher文档的指定页面中,调用格式如下:
AddPicture(FileName,LinkToFile,SaveWithDocument,Left,Top,Width,Height)
功能是将指定的图片文件按指定的位置和大小插入到指定的页面中,但新加入的图片对象总是处于顶层,与通过复制过来的不可变的图片对象不能保持原来的叠层位置关系,若不进行调序,必然会导致叠层次序的混乱。
由于我们在预处理模板页时已将所有的图片对象按ZOrderPosition值的从大到小的降序保存在一个结构数组中,即按顶层图片到底层图片次序保存,图片次序恢复时的处理流程如图2.1所示。
从结构数组中读取第一个元素,检查是不是可变图片,若是则说明此图片在模板页中已删除,则应调用AddPicture将它先插入到新页中,然后再利用ZOrdermsoSendToBack将其移到底层;若不是可变图片,则说明此图片在新页中已存在,无需插入,只要在新页中找到此图片的对象名,利用方法ZOrdermsoSendToBack移到底层。
新页中的不变图片是通过模板页保留的图片对象复制过来的,复制后的图片对象的名称(name属性)与原始图片对象的名称是不同的,即无法通过图片对象的name属性从新页面中识别图片的来源。
但是,图片对象的Tags集合中的所有信息在复制过程中保持不变的,而在构建picState结构时已将模板页中图片的name属性存入了Tags集合中,即,可以通过picState结构中的picID的值,可以在新页面中找到与之相匹配的图片的对象名,从而通过调用它的ZOrder方法进行调序。
图2.1恢复图片叠层次序流程
3拼版处理
在实际排版中,为了充分利用版面,往往在一个版面中要排多个页面,且允许有横向、纵向的页面在同一版面中,这种情况称为拼版,如图3.1所示,各页面的风格、大小及方向都可能不同。
以16合1拼版为例,若以平均每个模板页45个元素计算,拼版后模板页元素达720个之多,但前述的关联数据库字段只能采用手工完成,这么多元素在一屏显示日历,肉眼很难分辩清楚,即使采用缩放处理,由于缩放操作极其频繁,工作效率会变得十分低下,经过实际测试,在这种情况下,对拼版页上元素的一个简单选择操作,响应时间为“秒”级,这是用户无法接受的。
图3.1拼版格式示例
在多合一的拼版处理过程中,首先,针对每个页面建立一个独立的模板页,分别将各模板页中的元素与数据库进行关联,这种处理方法可以保证数据关联时一屏上的元素不会过多;其次,将已做关联的模板页中的元素进行组合,复制后粘贴到拼版页面中,并指定关联的组编号,组编号是用做本页来自哪个模板页的识别标志,此标志将写入各元素的Tags集合中,再进行平移、旋转等操作,使之符合设计要求;最后,将各组合打散,以便系统能准确的检测互各页面元素,完成拼版。
4结束语
本文主要讨论和解决了基于自定义模板的排、拼版过程中两个重要问题,一是自定义模板页图片叠层次序处理问题;二是多合一拼版时系统处理时效问题。
目前,基于Publisher自定义模板的自动排版软件已开发完成,已将它应用于日历设计排、拼版的实际使用,提高了设计效率,减少了人为错误,并且可以根据客户(customer)(customer)的特殊要求定制模板,更有效地为客户(customer)(customer)提供个性化服务。
参考文献:
[1]MicrosoftCorporation.MicrosoftOfficePublisher2007VisualBasic参考,2007
[2]李素强,吕红霞.OLE自动化技术二次开发MicrosoftPublisher.微型电脑应用[J],2008,第9期
[3]刘静,张郭军.VBA程序开发在办公自动化中的应用[J].渭南师范学院学报(综合版).2009,第5期
[4]余梓唐.VBA组卷中自动排版系统[J].电脑编程与维护技巧,2009,第1期