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

介绍如何利用iText Java库将JPEG、JPG或PNG格式的图片转换成PDF文档,包括图片压缩处理和多张图片合成一个PDF的方法。

其他,使用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>
 
 
 
 
转自:星辰博客:http://www.cnblogs.com/star-studio/archive/2012/01/11/2319545.html
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值