TIFF图像文件转换为PDF文件的实现
JAVA中PDF文件转成TIFF文件的2种方式

JAVA中PDF⽂件转成TIFF⽂件的2种⽅式由于在⼯作中使⽤到了PDF->TIFF的技术,所以稍微研究了⼀下实现⽅式,通过资料查阅,暂时发现了2种⽅式,2种⽅式有所区别:第⼀种⽅式转化后的tiff⽂件是⿊⽩的,第⼆种⽅式转化后的tiff⽂件是有⾊彩的(跟PDF⽂件相同),如果不对⾊彩要求严格的话,建议使⽤第⼀种⽅式,因为转化的⽂件较⼩。
第⼀种PDF转化TIFF的⽅式(⿊⽩):注意主要依赖pdfbox的版本是1.8.9,⽽新版本的依赖不适⽤,例如2.0.0-RC2。
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>1.8.9</version><scope>compile</scope></dependency>/*** 把PDF读⼊输⼊流,转化每⼀页为TIF* @param inputStream PDF输⼊流* @param dir 存放的路径* @param dpi dpi* @return转化后的tif⽂件列表*/public List<File> pdf2tif(InputStream inputStream, File dir, int dpi) {try (PDDocument pdf = PDDocument.load(inputStream)) {BufferedImage[] images = new BufferedImage[pdf.getNumberOfPages()];List<File> files = new ArrayList<>();long suffix = System.currentTimeMillis();for (int i = 0; i < images.length; i++) {PDPage page = (PDPage) pdf.getDocumentCatalog().getAllPages().get(i);BufferedImage image;image = page.convertToImage(BufferedImage.TYPE_BYTE_BINARY, dpi);images[i] = image;File file = new File(dir.getAbsolutePath() + File.separator + suffix + "-" + (i + 1) + ".tiff");try (FileOutputStream out = new FileOutputStream(file);ImageOutputStream ios = ImageIO.createImageOutputStream(out)) {TIFFImageWriterSpi tiffWriter = new TIFFImageWriterSpi();ImageWriter writer = tiffWriter.createWriterInstance();ImageWriteParam param = writer.getDefaultWriteParam();ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB);param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);param.setCompressionType("CCITT T.6");param.setCompressionQuality(1);IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, param);IIOMetadataNode hps = new IIOMetadataNode("HorizontalPixelSize");hps.setAttribute("value", Double.toString(1d / 300d * 25.4d));IIOMetadataNode vps = new IIOMetadataNode("VerticalPixelSize");vps.setAttribute("value", Double.toString(1d / 300d * 25.4d));IIOMetadataNode dim = new IIOMetadataNode("Dimension");dim.appendChild(hps);dim.appendChild(vps);IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");root.appendChild(dim);metadata.mergeTree("javax_imageio_1.0", root);writer.setOutput(ios);writer.write(metadata, new IIOImage(image, null, metadata), param);} catch (IOException e) {e.printStackTrace();}files.add(file);System.out.println(file.getAbsolutePath());}return files;} catch (IOException e) {e.printStackTrace();return null;}}第⼆种PDF转化TIFF⽂件的⽅式(有⾊彩):注意主要的依赖:(maven可能拉不下来,建议去⽹上下载)<dependency><groupId>com.sun.media</groupId><artifactId>jai_codec</artifactId><version>1.1-mr</version></dependency><dependency><groupId>javax.media</groupId><artifactId>jai_core</artifactId><version>1.1-mr</version></dependency><dependency><groupId>com.sun.medialib</groupId><artifactId>mlibwrapper_jar</artifactId><version>1.1</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC2</version></dependency>/*** 从输⼊流读取pdf,转化为tiff后写⼊输出流.<br/>* @param is 输⼊流,提供pfg内容.* @param outPath 输出⽬录.*/public static List<File> pdf2Tiff(InputStream is, String outPath) {PDDocument doc = null;FileOutputStream fos = null;List<File> files = new ArrayList<>();try {doc = PDDocument.load(is);int pageCount = doc.getNumberOfPages();PDFRenderer renderer = new PDFRenderer(doc); // 根据PDDocument对象创建pdf渲染器List<PlanarImage> piList = new ArrayList<PlanarImage>(pageCount - 1);TIFFEncodeParam param = new TIFFEncodeParam();// 创建tiff编码参数类param.setCompression(PRESSION_DEFLATE);// 压缩参数param.setExtraImages(piList.iterator());// 设置图⽚的迭代器for (int i = 0; i < pageCount; i++) {BufferedImage fimg = renderer.renderImageWithDPI(i, DPI, ImageType.RGB);PlanarImage fpi = JAI.create("mosaic", fimg); // 通过JAI的create()⽅法实例化jai的图⽚对象File file = new File(outPath + (i + 1) + ".tiff");fos = new FileOutputStream(file);ImageEncoder enc = ImageCodec.createImageEncoder("tiff", fos, param);enc.encode(fpi);// 指定第⼀个进⾏编码的jai图⽚对象,并将输出写⼊到与此files.add(file);if (fos !=null) {fos.close();}}} catch (IOException e) {e.printStackTrace();} finally {try {if (doc != null)doc.close();} catch (IOException e) {e.printStackTrace();}}return files;}注意:第⼆种⽅式可能会报错(有关JAI的错误),但是不影响程序正常运⾏,也不影响结果。
图像电子文件的归档格式及其转换研究

业 务 研 究档案管理1/2017总第224期1 图像文件格式的归档属性分析图像文件作为多媒体电子文件归档,必须保证其原真性。
理论上,图像文件应采用未压缩或无损压缩的图像格式进行保存。
但采用未压缩或无损压缩的图像格式保存图像文件时,大量图像文件会占用巨大的存储空间,欠可操作性。
而事实上,正是压缩技术的完善与发展,使数字化存储和网络传输成为可能[1]。
因此,图像文件归档,要兼顾原真性和图像文件磁盘占用空间。
此外,操作系统、应用软件的种类繁多与频繁升级,都给图像文件可识读性带来了挑战。
这要求图像文件归档时,优选标准化程度较高的开放格式;工具软件支持较多、业界广泛使用的主流格式;对技术环境的独立程度较高、对不同应用系统兼容性较好的可移植格式。
基于此,对几种主流图像文件格式作如下归档属性分析(见表1)。
表1 几种主流图像文件格式归档属性分析除此之外,常见的图像格式还有PSD 、PCX、TGA、JPEG XR、JPEG 2000等。
综合上述图像文件格式归档属性分析,推荐JPEG、TIFF、PDF为通用档案格式。
中华人民共和国国家标准GB/T18894-2002指出,“对用扫描仪等设备获得的采用非通用文件格式的图像电子文件,收集时应将其转换成通用格式”[2]。
2 图像处理软件及其对应的图像文件格式对图像文件格式进行转换,需要借助于特定的图像转换工具,即图像处理软件。
图像处理软件分为图片查看器和图片编辑器。
图片编辑器的体积通常大于图片查看器,功能较图片查看器也更多。
表2是常用的图片查看器,表3是常用的图片编辑器。
表2 常用图片查看器表3 常用图片编辑器图像处理软件对常用图片文件格式支持情况见表4。
为了简单明确地表达笔者的想法,笔者对本文中出现的“图像处理软件的格式支持”作如下说明:如果A图像软图像电子文件的归档格式及其转换研究夏伟伟,张照余摘 要:本文从来源、压缩编码标准、兼容性、原真性保存等方面分析了主流图像文件格式的归档属性,进而推荐JPEG、TIFF、PDF为档案长久保存格式;从开发者、软件免费开源情况、版本更新情况、格式支持等角度研究了常用图像处理软件,优选出适合作为图像文件归档格式转换工具的软件;在反复实验的基础上,梳理出图像文件格式转换通道,同时对格式转换过程中可能出现的问题作了说明。
使用activePDF Toolkit如何将TIFF文件转换为PDF

使用activePDF Toolkit如何将TIFF文件转换为PDF来自慧都控件网通过代码,activePDF Toolkit除了能实现图片,JPEG的转换,还能将TIFF文件转换为PDF格式。
示例代码如下:// Copyright (c) 2013 activePDF, Inc.// Example created 01/14/13// Make sure to add the activePDF product .NET DLL(s) to your application.// .NET DLL(s) are typically found in the products 'bin' folder.class Examples{public void main(){string strPath;int intJPEGToPDF;int intTIFFToPDF;int intImageToPDF;strPath = AppDomain.CurrentDomain.BaseDirectory;// Instantiate ObjectAPToolkitNET.Toolkit oTK = new APToolkitNET.Toolkit();// Toolkit can directly convert an image to a PDF file// If the image is a JPEG file use JPEGToPDFintJPEGToPDF = oTK.JPEGToPDF(strPath + "IMG.jpg", strPath + "JPEG.pdf"); if (intJPEGToPDF < 1){ErrorHandler("JPEGToPDF", intJPEGToPDF);}// If the image file is a TIFF file use TIFFToPDFintTIFFToPDF = oTK.TIFFToPDF(strPath + "IMG.tif", strPath + "TIFF.pdf");if (intTIFFToPDF != 1){ErrorHandler("TIFFToPDF", intTIFFToPDF);}// Any supported image file can be converted to PDF with ImageToPDF intImageToPDF = oTK.ImageToPDF(strPath + "IMG.jpg", strPath + "IMG.pdf"); if (intImageToPDF != 1){ErrorHandler("ImageToPDF", intImageToPDF);}// Release ObjectoTK = null;// Process CompleteSystem.Diagnostics.Debug.WriteLine("Done!");}// Error Handlingpublic static void ErrorHandler(string strMethod, object rtnCode){System.Diagnostics.Debug.WriteLine(strMethod + " error: " + rtnCode.ToString());}}。
pdg转换为pdf

具体分两个步骤:第一步:先将文件转制成图片,使用Pdg2Pic.exe;第二步:再使用FreePic2Pdf.exe,将图片转制成PDF,批量生成,简便快捷!!Q:Pdg2Pic是什么?A:这是一个将PDG文件转成图像文件(包括TIFF、JPG、PNG)的免费软件,具有下列特色:1.转换过程不占用系统剪贴板,因此在转换时,不影响用户在前台的正常工作。
2.在打开目录时自动对PDG文件进行格式统计,并报告结果。
当然此功能也可以选择关闭。
3.可以自动将文件按封面、前言、目录、正文、附录的顺序排列,也可以手动调整文件顺序。
4.提供预览功能,在转换前可以先浏览PDG图像和PDG文件信息。
此功能也可以选择关闭。
5.如果转换过程中出现错误,将给出错误日志,便于定位有问题的PDG文件。
6.PDG文件的扫描DPI自动转存入生成的TIFF、PNG、JPG、BMP文件,便于转换成PDF文件时指定页面大小。
7.如果检查发现PDG文件是纯正的JPG文件,将不进行任何转换,直接将PDG复制为JPG,并填写扫描DPI;黑白PDG文件转存为CCITT G4压缩的TIFF文件以获取高压缩比,或PNG、BMP文件以兼容更多的软件;灰度/彩色PDG重新压缩为有损的JPG或采用JPEG压缩的TIFF文件,或无损压缩的PNG、BMP文件,或JPEG 2000(JP2)文件(质量系数为100%时,JPEG 2000为无损压缩,否则为有损压缩)。
8.对于多层(T3)PDG,可以将各层合并成单一文件,也可以通过接口文件与FreePic2Pdf配合,无损转换成多层PDF。
9.对于文本格式(其实是PDF格式)的PDG文件,转换成PDF并按InfoRule.dat中指定的顺序重新编号,便于用Acrobat合并成一个PDF文件;并将catalog.dat转换成符合FreePic2Pdf接口规范的书签文件,便于用FreePic2Pdf将书签添加到合并后的PDF文件。
利用Python裁切tiff图像且读取tiff,shp文件的实例

利⽤Python裁切tiff图像且读取tiff,shp⽂件的实例我就废话不多说了,还是直接看代码吧!from osgeo import gdal, gdalnumeric, ogrfrom PIL import Image, ImageDrawfrom osgeo import gdal_arrayimport osimport operatorfrom functools import reduceeExceptions()def readTif(fileName):dataset = gdal.Open(fileName)if dataset == None:print(fileName+"⽂件⽆法打开")returnim_width = dataset.RasterXSize #栅格矩阵的列数im_height = dataset.RasterYSize #栅格矩阵的⾏数im_bands = dataset.RasterCount #波段数band1=dataset.GetRasterBand(1)print(band1)print ('Band Type=',gdal.GetDataTypeName(band1.DataType))im_data = dataset.ReadAsArray(0,0,im_width,im_height)#获取数据im_geotrans = dataset.GetGeoTransform()#获取仿射矩阵信息im_proj = dataset.GetProjection()#获取投影信息im_blueBand = im_data[0,0:im_height,0:im_width]#获取蓝波段im_greenBand = im_data[1,0:im_height,0:im_width]#获取绿波段im_redBand = im_data[2,0:im_height,0:im_width]#获取红波段im_nirBand = im_data[3,0:im_height,0:im_width]#获取近红外波段return(im_width,im_height,im_bands,im_data,im_geotrans,im_proj,im_blueBand,im_greenBand,im_redBand,im_nirBand)#保存tif⽂件函数import gdalimport numpy as npdef writeTiff(im_data,im_width,im_height,im_bands,im_geotrans,im_proj,path):if 'int8' in im_:datatype = gdal.GDT_Byteelif 'int16' in im_:datatype = gdal.GDT_UInt16else:datatype = gdal.GDT_Float32if len(im_data.shape) == 3:im_bands, im_height, im_width = im_data.shapeelif len(im_data.shape) == 2:im_data = np.array([im_data])else:im_bands, (im_height, im_width) = 1,im_data.shape#创建⽂件driver = gdal.GetDriverByName("GTiff")dataset = driver.Create(path, im_width, im_height, im_bands, datatype)if(dataset!= None):dataset.SetGeoTransform(im_geotrans) #写⼊仿射变换参数dataset.SetProjection(im_proj) #写⼊投影for i in range(im_bands):dataset.GetRasterBand(i+1).WriteArray(im_data[i])del dataset# This function will convert the rasterized clipper shapefile# to a mask for use within GDAL.def imageToArray(i):"""Converts a Python Imaging Library array to agdalnumeric image."""a=gdalnumeric.fromstring(i.tobytes(),'b')a.shape=i.im.size[1], i.im.size[0]return a"""Converts a gdalnumeric array to aPython Imaging Library Image."""i=Image.frombytes('L',(a.shape[1],a.shape[0]),(a.astype('b')).tobytes())return idef world2Pixel(geoMatrix, x, y):"""Uses a gdal geomatrix (gdal.GetGeoTransform()) to calculatethe pixel location of a geospatial coordinate"""ulX = geoMatrix[0]ulY = geoMatrix[3]xDist = geoMatrix[1]pixel = int((x - ulX) / xDist)line = int((ulY - y) / xDist)return (pixel, line)## EDIT: this is basically an overloaded# version of the gdal_array.OpenArray passing in xoff, yoff explicitly# so we can pass these params off to CopyDatasetInfo#def OpenArray( array, prototype_ds = None, xoff=0, yoff=0 ):ds =gdal_array.OpenArray(array)if ds is not None and prototype_ds is not None:if type(prototype_ds).__name__ == 'str':prototype_ds = gdal.Open( prototype_ds )if prototype_ds is not None:gdalnumeric.CopyDatasetInfo( prototype_ds, ds, xoff=xoff, yoff=yoff ) return dsdef histogram(a, bins=range(0,256)):"""Histogram function for multi-dimensional array.a = arraybins = range of numbers to match"""fa = a.flatn = gdalnumeric.searchsorted(gdalnumeric.sort(fa), bins)n = gdalnumeric.concatenate([n, [len(fa)]])hist = n[1:]-n[:-1]return histdef stretch(a):"""Performs a histogram stretch on a gdalnumeric array image."""hist = histogram(a)im = arrayToImage(a)lut = []for b in range(0, len(hist), 256):# step sizestep = reduce(operator.add, hist[b:b+256]) / 255# create equalization lookup tablen = 0for i in range(256):lut.append(n / step)n = n + hist[i+b]im = im.point(lut)return imageToArray(im)def main( shapefile_path, raster_path ):# Load the source data as a gdalnumeric arraysrcArray = gdalnumeric.LoadFile(raster_path)# Also load as a gdal image to get geotransform# (world file) infosrcImage = gdal.Open(raster_path)geoTrans = srcImage.GetGeoTransform()# Create an OGR layer from a boundary shapefilelyr = shapef.GetLayer( os.path.split( os.path.splitext( shapefile_path )[0] )[1] )poly = lyr.GetNextFeature()# Convert the layer extent to image pixel coordinatesminX, maxX, minY, maxY = lyr.GetExtent()ulX, ulY = world2Pixel(geoTrans, minX, maxY)lrX, lrY = world2Pixel(geoTrans, maxX, minY)# Calculate the pixel size of the new imagepxWidth = int(lrX - ulX)pxHeight = int(lrY - ulY)clip = srcArray[:, ulY:lrY, ulX:lrX]## EDIT: create pixel offset to pass to new image Projection info#xoffset = ulXyoffset = ulYprint ("Xoffset, Yoffset = ( %f, %f )" % ( xoffset, yoffset ))# Create a new geomatrix for the imagegeoTrans = list(geoTrans)geoTrans[0] = minXgeoTrans[3] = maxY# Map points to pixels for drawing the# boundary on a blank 8-bit,# black and white, mask image.points = []pixels = []geom = poly.GetGeometryRef()pts = geom.GetGeometryRef(0)for p in range(pts.GetPointCount()):points.append((pts.GetX(p), pts.GetY(p)))for p in points:pixels.append(world2Pixel(geoTrans, p[0], p[1]))rasterPoly = Image.new("L", (pxWidth, pxHeight), 1)rasterize = ImageDraw.Draw(rasterPoly)rasterize.polygon(pixels, 0)mask = imageToArray(rasterPoly)# Clip the image using the maskclip = gdalnumeric.choose(mask, \(clip, 0)).astype(gdalnumeric.uint8)# This image has 3 bands so we stretch each one to make them# visually brighterfor i in range(4):clip[i,:,:] = stretch(clip[i,:,:])# Save new tiff## EDIT: instead of SaveArray, let's break all the# SaveArray steps out more explicity so# we can overwrite the offset of the destination# raster#### the old way using SaveArray## gdalnumeric.SaveArray(clip, "OUTPUT.tif", format="GTiff", prototype=raster_path) #####gtiffDriver = gdal.GetDriverByName( 'GTiff' )if gtiffDriver is None:raise ValueError("Can't find GeoTiff Driver")gtiffDriver.CreateCopy( "beijing1.tif",OpenArray( clip, prototype_ds=raster_path, xoff=xoffset, yoff=yoffset ))print(raster_path)# Save as an 8-bit jpeg for an easy, quick previewclip = clip.astype(gdalnumeric.uint8)gdalnumeric.SaveArray(clip, "beijing1.jpg", format="JPEG")gdal.ErrorReset()if __name__ == '__main__':#shapefile_path, raster_pathshapefile_path = r'C:\Users\Administrator\Desktop\裁切shp\New_Shapefile.shp'raster_path = r'C:\Users\Administrator\Desktop\2230542.tiff'main( shapefile_path, raster_path )补充知识:python代码裁剪tiff影像图和转换成png格式+裁剪Png图⽚先来看⼀下需要转换的tiff原始图的信息,如下图所⽰。
论文高清tiff图片制作方法

论文高清tiff图片制作方法论文高清tiff图片制作方法(东南大学土木工程馆304博士教研室制作)不论是大论文还是小论文,都设置到数据处理后数据图片制作问题。
有些文章对图片质量要求一般,但有的期刊对图片质量有着严格的要求,特别是国外SCI期刊,对图片质量要求之严近似苛刻。
为了解决这一类问题,在此重点介绍两种方法以及简单介绍专用软件制作的图片。
对于图片的格式,国外一般要求采用tiff格式图片(要求打印输出分辨率至少大于600dpi)或采用图片容量大于1M的jpg格式图片。
其中,tiff图片常用于数据曲线的处理,然jpg图片常用于背景图片的使用。
第一种方法:专业软件的使用常用专业数据软件,如Sigmaplot, Original等软件均可以直接制作符合要求的tiff格式图片,一般SCI期刊要求tiff图片输出分辨率必须至少是600dpi;国内期刊的tiff格式一般满足300dpi即可。
如果是大论文书写的话,个人建议采用300dpi即可,因为分辨率提高的话,相应图片容量也很大,论文中数据较大的时候会加重word处理负担,后续会说到一个word中设置图片的问题。
不建议直接拷贝excel数据中制作的图片,因为excel中拷贝图片到word中会使曲线样式发生改变,调整起来比较麻烦,特别是图片较多时候,调整很费时间。
第二种方法:PDF+EXCEL操作方法Step1 先在excel中将数据处理好,图表制作好,同时调整好样式,如图1所示。
图1 excel中预先制作好的曲线图Step 2 鼠标左键单击图片,使图片属于被选中状态,按下Ctrl+P(打印快捷键)进行打印,然后显示打印状态,在“打印机”中选中PDF打印机,然后选择“页面设置”,如图2所示。
图2 打印页面Step 3 在页面设置中将“打印质量”选择为1200点(或者更高精度)。
然后点击“确定”,然后打印界面,点击“打印”,开始打印。
图3 打印精度设置Step4 打印出来的是PDF文件,如图4所示。
怎么将图片转换成PDF的方法

怎么将图片转换成PDF的方法有时去一个地方总会被它的景色给深深迷住,这时你就会拿出上的单板相机来抓拍,将这些拍摄出来的相片保存留念,可是时间久了,经常会因为照片繁多而翻看麻烦,那么此刻你是否考虑做一个电子相册,或者干脆把照片做成一本精致的PDF数据来翻看呢?提供一种最简单易行的方法,直接可以用软件转换,简单快捷。
而迅捷JPG转换成PDF 转换器给我们提供了最方便的解题方案。
PDF格式转换器的好处是,清晰度和原版一致,可以肯定的说是绝对的无损转换!!!该软件的功能介绍:将图像文件(包括TIFF、JPG、PNG、GIF、BMP、JPEG 2000)合并、转换成PDF文件的软件。
1.对有损/无损压缩的JPEG 2000、有损压缩的JPG文件及采用JPEG/OJPEG算法压缩的TIFF文件,直接将原始数据流嵌入PDF文件,避免因为重新压缩而造成图像质量下降;2.可以指定生成的PDF文件的页面大小(除A4、B5等,还支持国内常用的32开、16开、大32开)及页边距。
如果不指定页面的纸张大小,可以指定页面的固定宽度(长度随图像大小伸缩),避免连续阅读时因为页面宽度变来变去而影响阅读。
3.支持通过接口自动生成多级书签、分段页码、添加文本页、设置PDF的Document Properties。
那么如何将JPG图片转成PDF呢?斑竹给你一个最简单的方法,可以轻松搞定上述问题。
首先你得先把这些拍摄的相片放到电脑上去,建立一个“图片文件夹”,用来存放需要转换的JPG图片,再设置另一个文件夹,取名为“PDF”文件夹”,存放转换之后的图片。
不过在些之前,你还得装一下迅捷JPG转换成PDF转换器(最好是试用版V6.0).百度“JPG 转PDF转换器”——官方网中“软件下载”—本地下载地之一—下载,安装就可以了。
接下来双击软件图标,启动软件,即进入JPG转为PDF转换软件界面;点击“目标转换文件”的“图片转PDF”,点击“添加文件”,开始上传电脑桌面上的“图片文件夹”,如果你想转换所有的图片,可按住“CTRL+A”,打开所有的图片。
ghostscript用法

Ghostscript用法什么是Ghostscript?Ghostscript是一个开源的图像处理软件,它可以将PostScript和PDF文件转换为各种格式,如图像文件(JPEG,PNG,TIFF等)和文本文件。
它是一个非常强大和灵活的工具,广泛用于打印和文档处理领域。
Ghostscript是一种命令行工具,可以在Windows、Linux和Mac等操作系统上运行。
它提供了大量的参数和选项,允许用户根据自己的需求来定制转换过程。
安装Ghostscript在开始使用Ghostscript之前,我们首先需要安装它。
以下是在不同操作系统上安装Ghostscript的步骤:Windows在Windows上安装Ghostscript可以通过以下步骤完成:1.访问Ghostscript的官方网站()。
2.在下载页面上,找到适用于Windows的安装程序,并下载最新版本的Ghostscript。
3.双击下载的安装程序,按照提示进行安装。
4.在安装过程中,可以选择安装位置和其他选项。
默认情况下,Ghostscript会安装到C:Files。
5.安装完成后,可以在命令提示符下运行gswin64c命令来验证Ghostscript是否成功安装。
Linux在Linux上安装Ghostscript可以通过以下步骤完成:1.打开终端。
2.使用适合你的Linux发行版的包管理器,例如apt-get(Debian/Ubuntu)或yum(CentOS/Fedora),来安装Ghostscript。
例如,在Debian/Ubuntu上,可以运行以下命令来安装Ghostscript:sudo apt-get updatesudo apt-get install ghostscript3.安装完成后,可以在终端中运行gs命令来验证Ghostscript是否成功安装。
Mac在Mac上安装Ghostscript可以通过以下步骤完成:1.打开终端。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TIFF图像文件转换为PDF文件的实现3李明伍方丽萍(西华大学图书馆成都610039) (郫县友爱中心校成都611730)【摘要】介绍了在. NET平台中用C#结合itextsharp控件实现TIFF图像文件转换为PDF文件的开发,并给出实现业务的关键代码,希望对于图书馆资源的数字化建设有所帮助。
【关键词】格式转换TIFF PDF图像数字化数字图书馆C#Itextsharp 【分类号】G250. 72G354. 4Implement of Converting the TIFF Image File into the PDF DocumentL iM ingwu(L ibrary of X ihua Un iversity, Chengdu 610039, China)Fang L ip ing(Center School of Y ouA i, Chengdu 611730, China)【Abstract】This article use itextsharp componentwith C# to convert the TIFF image file into the PDF documentin the . NET p latform. Hope this article can help for the digital construction of library resources.【Keywords】Format conversion TIFF PDF Image Digital library C#Itextsharp 收稿日期: 2005 - 11 - 013 本文系四川省教育厅“图书馆、情报与文献学”规划项目“四川高等教育文献保障体系建设—特色数据库”(项目编号: 04216098)和四川省高校特色数据库建设规划项目“汽车特色数据库”的研究成果之一。
目前,图书馆的信息化建设已经从基础硬件建设阶段进入到以数字图书馆[ 1 ] (Digital Library, DL)为特征的内容建设阶段。
资源的数字化、标准化、规范化是该阶段的特点,其中对印刷文献数字化的处理流程如图1所示。
在CAL IS[ 2 ]以及其他数字图书馆的建设规范[ 3 ]中,要求扫描数据格式为TIFF[ 4 ] ( Tagged Image File Format ) ,并最终将TIFF格式转换为PDF[ 5 ] ( Portable Document For2mat)格式存储并上网提供服务。
本文结合“四川高校文献保障体系———特色数据库”本地建库系统的研发,重点讨论在. NET平台实现TIFF文件转换为PDF文件,并给出实现业务的关键代码。
图1印刷文献数字化处理流程1系统设计1. 1系统结构系统由底层系统接口、功能模块、用户界面三个部分组成。
底层系统接口主要包括TIFF文件的读取、PDF文件的输出等模块。
各功能模块在. NET平台利用C#语言[ 6 ]来编程实现分辨率更改、PDF文件参数设置、格式转换等模块。
用户界面利用平台支持的标准控件来设计,实现与用户的交互。
系统的结构如图2。
图2系统结构图图3系统功能图1. 2系统功能本系统主要实现TIFF文件转换为标准PDF文件,系统的功能结构如图3。
(1)文件选择。
系统支持对同一目录的单个文件或多个文件的选择,同时支持不同目录的多文件的选择,还必须支持直接从Web或Ftp网站下载文件。
(2) TIFF文件读取。
既可以打开单页的TIFF文件,也可以打开多页的TIFF文件,还必须支持各种格式的TIFF文件。
(3)更改分辨率。
根据用户的需要,调整当前图像的分·89·《现代图书情报技术》2006年第3 期工作交流总第134期辨率或调整整个图片的分辨率。
(4)参数管理。
设置是将当前图片转换为一个PDF文件,还是将多个文件转换为一个PDF文件,并按规范同时生成一个24页的PDF文件;设置PDF文件的命名规则;设置PDF文件输出目录,设置PDF文件的版式。
(5)格式转换。
转换后的文件要保持原有的版式,要适应各类PDF阅读器,要使生成的PDF文件足够小。
(6)书签生成。
转换后的文件要有书签导航功能。
(7)输出控制。
将转换后的文件备份到指定的目录或上传到指定的服务器中。
2系统实现2. 1实现原理系统开发的难点在TIFF文件的读取与格式转换,但由于TIFF与PDF文件标准相当灵活、复杂,因此我们直接在. NET平台与开放源代码的itextsharp[ 7 ]函数库基础上编制了软件,以保证对标准的全面支持和兼容。
(1) TIFF图像文件读取,主要利用GD I + ( Graphics De2vice Interface Plus) [ 8 ]来进行图形输出和显示。
GD I +的Image类封装了对BMP、GIF、JPEG、PNG、TIFF、WMF和EMF图像文件的调入、格式转换以及简单处理的功能。
图像操作函数如表1。
表11NET平台图像操作关键函数名称与功能名称功能备注new 新建一个对象System. Drawing. B itmapGetFrameCount 获取图片个数System. Drawing. B itmap SelectActiveFrame 获取当前图片System. Drawing. B itmap(2)格式转换,包括更改分辨率与格式转换,主要利用了itextsharp中的两个类库itextsharp. text和itextsharp. text. pdf。
其关键类与功能如表2。
itextsharp. text. pdf类库提供了Pdf2Writer类与itextsharp. text的document对象关联, 用于产生PDF格式的文档,这是进行格式转换的关键所在。
实现转换的关键函数如表3。
表2itextsharp关键类与功能名称功能备注document类产生文档对象以便于在其中加入数据itextsharp. textimage类向文档对象插入图片数据itextsharp. textPdfW riter类PDF文件操作itextsharp. text. pdfPdfContentByte类设置图片在文档对象中的位置itextsharp. text. pdf 表3格式转换关键函数名称与功能名称功能备注getInstance建立PdfW riter对象与document对象关联,通过PdfW riter对象将文档写入到磁盘中PdfW riter类getInstance 获取当前图像对象实例Image类scalePercent 置当前图像的分辨率Image类add Image 向文档中添加图像数据PdfContentByte类newPage 在document对象中新建一页document类2. 2系统流程首先,用户进行参数设置,选择要转换的TIFF文件并顺序打开,获取文件包含的图像数目,然后读出当前图像的分辨率并根据用户的需要重新设置该图片的分辨率,最后进行格式转换并生成导航书签,按用户设定的文件名保存文件。
系统流程如图4。
图4系统流程图3系统开发3. 1开发环境程序开发的硬件环境为一般PC兼容机,操作系统为Windows2000 Server,开发平台为VS. NET 2003,语言为C#。
同时将下载的itextsharp控件包释放到本地。
3. 2程序界面程序的主界面如图5。
图5程序主界面3. 3关键的代码System. Drawing. Bitmap bm = new System. Drawing. Bitmap (“test. tif”) ; / /打开TIFF文件。
int total = bm. GetFrameCount ( FrameDimension. Page) ; / /获取当前文件图像个数。
Document pdfdoc = new Document( PageSize. A4, 50, 50, 50, 50) ;/ /建立Document对象的实例,并设置Document的大小与边距。
PdfWriter writer = PdfWriter. getInstance ( pdfdoc, new FileStream (“c: \ tiff2pdf. pdf”, FileMode. Create) ) ; / /建立一个PdfWriter对象·90·《现代图书情报技术》2006年第3 期工作交流总第134期Writer与document对象关联,通过Writer可以将文档写入到磁盘中。
pdfdoc. Open ( ) ; / /打开文档。
PdfContentByte cb = writer. DirectContent;for ( int k = 0; k < total; + + k)}bm. SelectActiveFrame ( FrameDimension. Page, k) ;Image img = Image. getInstance ( bm, null, true) ;img. scalePercent(72f / 200f 3 100) ; / / 设置当前图片的分辨率为200dp i。
img. setAbsolutePosition (0, 0) ;cb. add Image ( img) ; / /向文档中添加图像数据。
pdfdoc. newPage ( ) ;}pdfdoc. Close ( ) ; / /关闭文档,将缓冲区的内容写入磁盘以保存文件。
图6转换后的文件在Acrobat Reader中正常显示4结论本文设计的TIFF文件转换为PDF文件系统已经成功的应用到四川高校特色数据库的本地建库系统中,图6是通过该系统转换成的PDF文件在Acrobat Reader中的显示效果。
实践证明,该系统不仅操作简便、通用性强,满足了项目的需要,而且具有良好的扩展性,便于维护,稍加修改,就可以将其他格式的图像文件转换为标准的PDF文件。
参考文献:1什么是数字图书馆. http: / /www. digitalearth. net. cn /debooks/de100 /5 - 12. htm (Accessed Oct. 17, 2005)2 CAL IS. http: / /www. calis. edu. cn / calisnew/ calis_ index. asp? fid =3&class =5 (Accessed Oct. 16, 2005)3我国数字图书馆标准与规范建设. http: / / cdls. nstl. gov. cn /2003 /Whole /TecReports. html#allreports(Accessed Oct. 16, 2005)4光艳良,申宝成. TIF图像文件与BMP图像文件的转换研究. 太原重型机械学院学报, 2001 (1) : 75 - 775李睿. 数字图书馆资源格式选择分析. 情报理论与实践, 2003 ( 3) :283 - 2846窦芳. V isual C#. NET从入门到精通. 北京:电子工业出版社120037itextsharp. http: / / sourceforge. net/p rojects/ itextsharp / (Accessed Oct.16, 2005)8GD I +. http: / /www. crazy - bit. com / articles/gdip lusintro. htm (Ac2cessed Sep t. 25, 2005)(作者E - mail: littfox@163. com)动态微软与大英图书馆合作数字化2500万页资料2005年11月4日,微软和大英图书馆宣布一项战略合作计划,在2006年对该馆的2500万页馆藏资源进行数字化,并将长期承担数字化的任务以完成更多资源的数字化工作。