其他,使用iText将jpg/jpeg/png转换为pdf
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。1.在企业的信息系统中,报表处理一直占比较重要的作用,iText--一种生成PDF报表的Java组件,通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。2.支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。
继续笔者的DocConverter项目。开发环境是MyEclipse 9.0。笔者下载的是iText5.0.4。
新建JPG2PDFUtil.java
package com.iori.webapp.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfWriter;
public class JPG2PDFUtil {
private String inputFileString;
private String outputFileString;
public JPG2PDFUtil(String inputFile, String outputFile) {
this.inputFileString = inputFile;
this.outputFileString = outputFile;
}
public void imgtopdf()
{
//创建一个文档对象
Document doc = new Document();
try {
//定义输出文件的位置
PdfWriter.getInstance(doc, new FileOutputStream(outputFileString));
//开启文档
doc.open();
//设定字体 为的是支持中文
//BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
//向文档中加入图片
/*//以下是多图合成一个pdf,暂时用不到
for(int i=1;i<32;i++)
{
//取得图片~~~图片格式:
Image jpg1 = Image.getInstance("c:/"+i+".jpg"); //原来的图片的路径
//获得图片的高度
float heigth=jpg1.height();
float width=jpg1.width();
System.out.println("heigth"+i+"----"+heigth);
System.out.println("width"+i+"-----"+width);
//合理压缩,h>w,按w压缩,否则按w压缩
//int percent=getPercent(heigth, width);
//统一按照宽度压缩
int percent=getPercent2(heigth, width);
//设置图片居中显示
jpg1.setAlignment(Image.MIDDLE);
//直接设置图片的大小~~~~~~~第三种解决方案,按固定比例压缩
//jpg1.scaleAbsolute(210.0f, 297.0f);
//按百分比显示图片的比例
jpg1.scalePercent(percent);//表示是原来图像的比例;
//可设置图像高和宽的比例
//jpg1.scalePercent(50, 100);
doc.add(jpg1);
}
*/
//向文档中加入图片
//取得图片~~~图片格式:
Image jpg1 = Image.getInstance(inputFileString); //原来的图片的路径
//获得图片的高度
float heigth=jpg1.height();
float width=jpg1.width();
System.out.println("heigth----"+heigth);
System.out.println("width-----"+width);
//合理压缩,h>w,按w压缩,否则按w压缩
//int percent=getPercent(heigth, width);
//统一按照宽度压缩
int percent=getPercent2(heigth, width);
//设置图片居中显示
jpg1.setAlignment(Image.MIDDLE);
//直接设置图片的大小~~~~~~~第三种解决方案,按固定比例压缩
//jpg1.scaleAbsolute(210.0f, 297.0f);
//按百分比显示图片的比例
jpg1.scalePercent(percent);//表示是原来图像的比例;
//可设置图像高和宽的比例
//jpg1.scalePercent(50, 100);
doc.add(jpg1);
//关闭文档并释放资源
doc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 第一种解决方案
* 在不改变图片形状的同时,判断,如果h>w,则按h压缩,否则在w>h或w=h的情况下,按宽度压缩
* @param h
* @param w
* @return
*/
public int getPercent(float h,float w)
{
int p=0;
float p2=0.0f;
if(h>w)
{
p2=297/h*100;
}
else
{
p2=210/w*100;
}
p=Math.round(p2);
return p;
}
/**
* 第二种解决方案,统一按照宽度压缩
* 这样来的效果是,所有图片的宽度是相等的,自我认为给客户的效果是最好的
* @param args
*/
public int getPercent2(float h,float w)
{
int p=0;
float p2=0.0f;
p2=530/w*100;
p=Math.round(p2);
return p;
}
/**
* 第三种解决方案,就是直接压缩,不安像素比例,全部压缩到固定值,如210*297
*
* @param args
*/
public static void main(String[] args) {
JPG2PDFUtil pt=new JPG2PDFUtil("c:/temp/ddd.jpg","c:/temp/ddd.pdf");
pt.imgtopdf();
}
}