FME实现图片JPG\PNG合并到PDF的输出
目录
前言
日常工作中,某些项目上涉及到外业收集到的资料照片需要在入库或者归档时分别存入PDF文件中。
此工作空间演示了如何把“资料照片”按类型多张合并转为PDF文件输出。
01资料照片及PDF文件
资料照片共包含jpg、png两种格式,类型为房屋照片、户口本、身份证、许可证;其中户口本、身份证、许可证输出后均为两张照片一页,考虑到有些房屋存在较多房屋照片设置为可选2张每页或4张每页。
图1 资料照片
图2 PDF照片
02读取照片信息
因为有些照片0KB也可以打开,我们用Directory and File Pathnames读取照片获取信息,”Recurse Into Subfolders”和”Retrieve file Properties”设置为”Yes”;Tester过滤0KB照片。
然后利用正则获取路径上的宗地代码和FilenamePartExtractor获取文件夹名称用于构成输出路径。
03读入照片
将路径连接到FeatureReader,我先读的是JPG格式的,读不到的就用PNG再读(因为有的照片后缀名是.JPG实际上是PNG格式),如果还读不到,照片可能是损坏的或者不是这两种格式的照片,同时两个FeatureReader的”Accumulation Mode”均设置为”Merge Initiator and Result”这样就得到了前面的属性。
04 PNG图片处理
png图片比jpg多了一个Alpha通道, 一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,png图片采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。PNG图片格式本身是一种无背景的图像格式,当PNG图像插入到PDF文件中时,如果没有正确设置PNG图像的透明度,那么PNG图像周围的透明部分将会被填充为黑色,从而形成黑色。
我解决这个问题的方法是直接去掉Alpha通道只保留RGB,而不是进行设置;
通过RasterSelector和RasterBandRemover先选择Alpha通道波段,在移除,这样再输出到PDF就和JPG一样的正常显示了。
05处理照片信息用于设置PDF属性
通过RasterPropertyExtractor获得照片的长、宽用于后面计算照片在PDF的位置和缩放比例,因为除了房屋照片外每页只插入两张照片,那么”照片序号/2”向上取整就得到了照片所在的页码。
Counter设置分组如下图,得出每张照片在当前页码的顺序。
06PDF属性计算设置
要对PDF属性进行设置就要先了解其对应的名称和格式,想要灵活的把照片插入PDF中显示符合居中,保持纵横比,固定大小就要涉及到三个PDF属性:
pdf_frame_fixed_aspect(纵横比,只有两个属性”Yes””No”),
pdf_page_size(纸张大小)
pdf_frame_rectangle(PDF的矩形对象)
pdf_world_rectangle(是插入对象的大小)
pdf_world_rectangle属性每个数字中间有一个空格:0 -278 265 0;如果pdf_world_rectangle没有设置那么照片插入PDF就是按照照片本身的大小,过小看不见,过大超出页面。
pdf_frame_rectangle是设置照片放置的位置属性,矩形用于描述插入内容在页面上的位置和 PDF 中多个对象的边界框,例如照片。矩形表示为四个数字,按该顺序指定矩形的左下角 x、左下角 y、右上角 x 和右上角 y 坐标(每个数字中间有一个空格)。如下图(A4),注意和PDFPageFormatter显示不同的是坐标原点是在画布的左下角。
有了以上的了解和处理我们就可以根据要求计算每张照片的数据进行对应属性的设置。
07写出PDF
按前面拼接的输出路径设置写模块扇出,输出的文件已经符合我们的要求。
08总结
一开始我想到的是用PDFPageFormatter处理照片的输出位置,但是结果并不理想,因为里面的参数是不能引用字段属性,无法做到参数随不同照片变化;以上纯属个人理解,如有不对请多指教。
模板整体: