zoukankan      html  css  js  c++  java
  • 仿百度文库方案[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 进行测试。

  • 相关阅读:
    __attribute__((noreturn))的用法
    selenium定位元素的方法
    zzz
    go语言的第一个helloworld
    mac eclipse 创建Java 工程
    Jmeter:图形界面压力测试工具
    使用 HAProxy, PHP, Redis 和 MySQL 轻松构建每周上亿请求Web站点
    从Log4j迁移到LogBack的理由
    SLF4J和Logback日志框架详解
    security with restful
  • 原文地址:https://www.cnblogs.com/m3Lee/p/3849137.html
Copyright © 2011-2022 走看看