這兩天一直在和pdf打交道,總結一下這兩天的成果。這裡需要注意itext使用的是itext 1.4,不同的版本可能在api的形式上存在不同,可能不能相容,jar:http://cid-f41b44b9285d0b86.office.live.com/browse.aspx/%e5%85%ac%e5%bc%80%e6%96%87%e4%bb%b6%e5%a4%b9/J2EE%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e5%85%b1%e4%ba%ab
下面的這個例子中首先組建檔案索引(類似word的連結),然後存在一個報表和將圖片轉換成pdf的形式,代碼如下:
public void GenerateAllParts() {
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("d:\\all.pdf"));
// 產生字型
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
// 標題字型
Font f30 = new Font(bfChinese, 30, Font.NORMAL, Color.BLACK);
// 本文字型
Font f12 = new Font(bfChinese, 12, Font.NORMAL, Color.BLACK);
Font f6 = new Font(bfChinese, 6, Font.NORMAL, Color.BLACK);
Font f8 = new Font(bfChinese, 8, Font.NORMAL, Color.BLACK);
document.open();
// 標題
document.add(new Paragraph("報表執行個體", f30));
// 換行
document.add(new Chunk("\n\n"));
//
document.add(
new Paragraph(
new Chunk(".......................點擊查看報表", f12)
.setLocalGoto("table")));
// 換行
document.add(new Chunk("\n\n"));
document.add(
new Paragraph(
new Chunk(".......................點擊查看圖片", f12)
.setLocalGoto("image")));
document.add(new Chunk("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"));
///////////////////////////////////////////////////
// 報表位置
document.add(new Chunk("報表執行個體", f12).setLocalDestination("table"));
// 添加table執行個體
PdfPTable table = new PdfPTable(5);
table.setWidthPercentage(100);
table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
PdfPCell cell = new PdfPCell();
cell.setBackgroundColor(new Color(213, 141, 69));
cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
// 表格標題
cell.setPhrase(new Paragraph("標題一", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("標題二", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("標題三", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("標題四", f8));
table.addCell(cell);
cell.setPhrase(new Paragraph("標題五", f8));
table.addCell(cell);
// 表格式資料
PdfPCell newcell = new PdfPCell();
newcell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
newcell.setPhrase(new Paragraph("資料一", f8));
table.addCell(newcell);
newcell.setPhrase(new Paragraph("資料二", f8));
table.addCell(newcell);
newcell.setPhrase(new Paragraph("資料三", f8));
table.addCell(newcell);
newcell.setPhrase(new Paragraph("資料四", f8));
table.addCell(newcell);
newcell.setPhrase(new Paragraph("資料五", f8));
table.addCell(newcell);
document.add(table);
////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// 添加串連
document.add(new Chunk("圖片執行個體", f12).setLocalDestination("image"));
Image jpg = Image.getInstance("d:\\3.jpg");
document.add(jpg);
//////////////////////////////////////////////////////////
document.close();
} catch (Exception e) {
// TODO: handle exception
}
}
下面這個例子示範如何將將word轉換成pdf,這裡使用的是openoffice來實現的,參考:http://www.javaeye.com/topic/352103
3. 實現代碼:
/**
* 完成word2pdf的轉換
*/
public void GeneratePdfFromWord() {
Date date = new Date();
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(new File("d:\\test.doc"), new File("d:\\word2pdf.pdf"));
} catch (Exception e) {
// TODO: handle exception
} finally {
if(connection!=null){
connection.disconnect();
connection = null;
}
}
}
1、安裝OpenOffice 3:下載路徑:http://zh.openoffice.org/new/zh_cn/downloads.html 2、用以下命令啟動OpenOffice服務 cd C:\Program Files\OpenOffice.org 3\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard