仿百度文库方案[openoffice.org 3+swftools+flexpaper](七) 之 使用iText将jpg、jpeg、png转换为pdf

原文出处:http://www.cnblogs.com/star-studio/archive/2012/01/11/2319545.html

 

其他,使用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)