其他,使用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();
}
}
在JPG2PDFUtil.java,右鍵屬性 - >Run as - >Java Application ,輸出main的測試結果。
在jsp中執行
新建MyJPG2PDFTest.jsp
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.iori.webapp.util.*"%>
<%
JPG2PDFUtil pt=new JPG2PDFUtil("c:/temp/333.jpg", "c:/temp/333.pdf");
pt.imgtopdf();
%>
<!-- 下面這些html可以去掉 -->
<html>
<head>
<title>Simple jsp page</title>
</head>
<body>Place your content here</body>
</html>
在項目DocConverter根目錄,右鍵屬性 - >Run as - >MyEclipse Server Application
發布到之前安裝的Tomcat 6.0的根目錄,然后用url路徑訪問:Http://localhost:8080/DocConverter/MyDOC2PDFTest.jsp 進行測試。
仿百度文庫方案[openoffice.org 3+swftools+flexpaper](一) 之 tomcat6.0+jdk1.6環境配置
仿百度文庫方案[openoffice.org 3+swftools+flexpaper](二) 之 安裝openoffice.org
仿百度文庫方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter將office文檔轉換為pdf