利用java实现excel转pdf文件

2019-12-01 13:24栏目:竞技宝app
TAG:

4:excel转PDF字段内容无故中间部分换行:

 

3.构造方法
public SimpleDateFormat() 默认模式
public SimpleDateFormat(String pattern)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
4.成员方法
public final String format(Date date) 把日期格式转换成String类型
public Date parse(String source)  把给定的字符串解析成日期格式

  这是我碰到的最坑的一个地方,这个时候你只需要在excel单元格里面设置自动换行即可,无需代码强行自动换行(强行换行有可能只出现多行数据只显示一行)。同时你需要如下代码:

3、方法。
说明:

2.构造方法

2:excel转pdf出现折行。

  1. static Double MAX_VALUE : 返回最大双精度数,在不同硬件平台中由Double.longBitsToDouble(0x7fefffffffffffffL)计算得出。
  2. static Double MIN_VALUE : 返回最小双精度数,在不同硬件平台中由Double.longBitsToDouble(0x1L)计算得出。
  3. static Double NaN : 表示非数值类型的双精度数,在不同硬件平台中由Double.longBitsToDouble(0x7ff8000000000000L)计算得出。
  4. static Double NEGATIVE_INFINITY:返回负无穷双精度数,在不同硬件平台中由Double.longBitsToDouble(0xfff0000000000000L)计算得出。
  5. static Double POSITIVE_INFINITY :返回正无穷双精度数,在不同硬件平台中由Double.longBitsToDouble(0x7ff0000000000000L)计算得出。
  6. static Class TYPE :返回当前类型。

2.SimpleDateFormat(可以把日期转换成String类型)

 public static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("license.xml"); //  license.xml应放在..WebRootWEB-INFclasses路径下
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {               
            e.printStackTrace();
        }
        return result;
    }
    
    
    public static void excelTransferPdf(String excelPath,String pdfPath) {
        if (!getLicense()) {
            System.out.println("license faile");
            return;
        }
        
        try {     
            Workbook wb = new Workbook(excelPath);
            FileOutputStream fileOS = new FileOutputStream(new File(pdfPath));
            wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
            fileOS.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2、方法。
说明:

StringBuffer(是同步的,数据安全,效率低)/StringBuilder(单线程使用,不同步,效率高。)
1.线程安全的可变字符串。

  当你未设置单元格大小而又没有设置单元格自动换行,比如你的A18单元格里面的字段超过了单元格的长度你还没有设置单元格大小而又没有设置单元格自动换行,就将抓取的字段填充在B18单元格里面,那么打印出来的pdf文件A18单元格超出单元格外的内容是不予显示的,此时你要么将抓取字段填充在C18单元格内要么将更改A18单元格格式

Double(double value) :以double类型为参数创建Double对象。
Double(String s) :以String类型为参数创建String对象。

1.Character 类在对象中包装一个基本类型 char 的值
 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然

你需要先获取抓取的字符串的长度,然后通过这个方法计算行高,再将excel需要填充的该行用Java代码设置行高(行高单位是像素),但是如果出现我上面说的字段内容无故中间部分换行,那么你获取的行高就会不足,这个时候你需要改动这个地方----->>>>Float rowHeight = (float) (lineCount * X);  x的值一定要设置的大一行,以防出现这种情况!

例子:
代码:
    String s = new String("The Java platform is the ideal platform for network computing");
    StringTokenizer st = new StringTokenizer(s);
    System.out.println( "Token Total: " + st.countTokens() );
    while( st.hasMoreElements() ){
      System.out.println( st.nextToken() );
           }
结果为:
Token Total: 10
The
Java
platform
is
the
ideal
platform
for
network
computing  

public BigInteger(String val)

    /**
     * 根据字符串长度获取行高
     *
     * @param str
     * @return
     */
    public static Float getRowHeight(String str) {

Character类的使用方法

public static int abs(int a)  返回 int 值的绝对值。
public static double ceil(double a)  向上取整
public static double floor(double a) 向下取整
public static int max(int a,int b)   比较两个数的最大值
public static double pow(double a,double b)  a的b次幂
public static double random()  随机数
public static int round(float a) 四舍五入
public static double sqrt(double a)  正平方根

3:抓取字段显示结果不完整:。

Interger:整数类型

2.成员方法

        Integer lineCount = (int) (getLength(str) / 64) + 1;
        if (str.contains("n")) {
            Integer tempLineCount = 1;
            String[] lines = str.split("n");
            for (String line : lines) {
                Integer everyLineCount = (int) (getLength(line) / 64) + 1;
                tempLineCount += everyLineCount;
            }
            lineCount = lineCount >= tempLineCount ? lineCount : tempLineCount;
        }
        Float rowHeight = (float) (lineCount * 20);
        return rowHeight;
    }

 

1.可以让超过Integer范围内的数据进行运算

 

例子:
代码:

public int get(int field) 返回给定日历字段的值。
public void add(int field,int amount)  根据给定的日历字段和对应的时间,来对当前的日历进行操作
public final void set(int year,int month,int date) 设定当前的日历时间

在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案。

3、方法。
说明:

public BigDecimal add(BigDecimal augend)  加法
public BigDecimal subtract(BigDecimal subtrahend)  减法
public BigDecimal multiply(BigDecimal multiplicand)  乘法
public BigDecimal divide(BigDecimal divisor)  除法
public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)

  excel转pdf出现折行的情况非常常见,因为在程序运行过程中很多字段是抓取的,你无法判断你的excel转成pdf会有几页,所以这个时候你就不要随意设置excel的预览格式,将excel的单元格式设置自动换行。

 

2.构造方法

    第一次excel转pdf是成功的,第二次开始后面皆是乱码,是因为我的pdf转excel方法出现的问题,解决办法是采用java自身底层的方法(详见下方代码)。

 

B:   equals()   比较两个对象是否相同,一般比较对象的成员变量的值是否相同。
例  (s1.equals(s2))  比较对象s1和对象s2的值
比较对象的成员变量的的时候可以自动生成 快捷键 alt+shift+s+h

1:excel转pdf出现乱码:

Double类的使用方法

Pattern/ Matcher
获取功能

/**
     * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为1,英文字符长度为0.5
     *
     * @param String
     *            s 需要得到长度的字符串
     * @return int 得到的字符串长度
     */
    public static double getLength(String s) {
        double valueLength = 0;
        if (s == null) {
            return 0;
        }
        String chinese = "[u4e00-u9fa5]";
        // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
        for (int i = 0; i < s.length(); i++) {
            // 获取一个字符
            String temp = s.substring(i, i + 1);
            // 判断是否为中文字符
            if (temp.matches(chinese)) {
                // 中文字符长度为2
                valueLength += 2;
            } else {
                // 其他字符长度为1
                valueLength += 1;
            }
        }
        // 进位取整
        return Math.ceil(valueLength);
    }

例子:与Float类的相似。

3.方法:
     判断功能
boolean equals(Object obj) 比较字符串的内容是否相同,区分大小写
例 s1.equals(s2) s1和s2比较
boolean equalsIgnoreCase(String str) 比较字符串内容是否相同,忽略大小写
例 s1.equals(s2) s1和s2比较,注意区分大小写
boolean contains(String str) 判断大字符串中是否包含小字符串
例 s1.contains("hello") 判断s1中有没有hello这个字符串
boolean startsWith(String str) 判断字符串是否以某个指定的字符串开头
例 s1.startWith("h")  判断s1中是否以h开头
boolean endsWith(String str) 判断字符串是否以某个指定的字符串结尾
例 s1.endWith("s")  判断s1中是否以s结尾
boolean isEmpty() 判断字符串是否为空
例 s1.isEmpty() 判断s1是否为空字符串

  1. static int getNumericValue(char ch) :返回字符ch的数值。
  2. static int getType(char ch) :返回字符所属类型。具体有哪些种类请查看Java文档资料。
  3. int hashCode() :返回当前字符的哈希表码。
  4. static boolean isDefined(char ch) :判断字符ch在Unicode字符集是否用明确定义。
  5. static boolean isDigit(char ch) :判断字符ch是否为数字。
  6. static boolean isIdentifierIgnorable(char ch) :判断字符ch是否为Unicode字符集中可忽略的字符。
  7. static boolean isISOControl(char ch) :判断字符ch是否为ISO标准中的控制字符。
    14.static boolean isJavaIdentifierPart(char ch) :判断字符ch是否为Java中的部分标识符。
  8. static boolean isJavaIdentifierStart(char ch) :判断字符ch是否为Java中的第一个标识符。
  9. static boolean isLetter(char ch) :判断字符ch是否为字母。
  10. static boolean isLetterOrDigit(char ch) :判断字符ch是否为字母或数字。
  11. static boolean isLowerCase(char ch) :判断字符ch是否为小写字母。
  12. static boolean isMirrored(char c) :根据Unicode表判断字符c是否存在与之方向相反的字符。例如:“〔”存在与之方向相反的“〕”,结果为:true。
  13. static boolean isSpaceChar(char ch) :判断字符ch是否为Unicode中的空格。
  14. static boolean isUpperCase(char ch) :判断字符ch是否为大写字母。
  15. static boolean isWhitespace(char ch) :判断字符ch是否为Java定义中的空字符。
    代码:
    其中包括:
      char c1 = '/u0009';//水平列表符
      char c2 = '/u000A';//换行
      char c3 = '/u000B';//垂直列表符
      char c4 = '/u000C';//换页
      char c5 = '/u000D';//回车
      char c6 = '/u001C';//文件分隔符
      char c7 = '/u001D';//组分隔符
      char c8 = '/u001E';//记录分隔符
      char c9 = '/u001F';//单元分隔符

  16. static char toLowerCase(char ch) :转换ch是否为小写。

  17. String toString() :将当前Character对象转换成字符串。
  18. static String toString(char c) :此为类方法,将c转换成字符串。
  19. static char toUpperCase(char ch) :转换ch是否为大写。

Object
1.是类层次结构的根类,所有类都直接或间接的继承自object类。

  1. int lastIndexOf(int ch)
  2. int lastIndexOf(int ch, int fromIndex)
  3. int lastIndexOf(String str)
  4. int lastIndexOf(String str, int fromIndex) 以上四个方法与13、14、15、16类似,不同的是:找最后一个匹配的内容。
  5. int length() :返回当前字符串长度。
  6. String replace(char oldChar, char newChar) :将字符号串中第一个oldChar替换成newChar。
  7. boolean startsWith(String prefix) :该String对象是否以prefix开始。
  8. boolean startsWith(String prefix, int toffset) :该String对象从toffset位置算起,是否以prefix开始。

public BigDecimal(String val)
3.方法

代码:
Float f = new Float(1237.45);
System.out.println("f.equals(fs): " + f.equals(fs) );
结果为:f.equals(fs): false

System

  1. String substring(int beginIndex) :取从beginIndex位置开始到结束的子字符串。
    26.String substring(int beginIndex, int endIndex) :取从beginIndex位置开始到endIndex位置的子字符串。
  2. char[] toCharArray() :将该String对象转换成char数组。
  3. String toLowerCase() :将字符串转换成小写。
  4. String toUpperCase() :将字符串转换成大写。

1.System 类包含一些有用的类字段和方法。它不能被实例化

Integer i = new Integer(1234);
System.out.println("i.compareTo: " + i.compareTo(new Integer(123)) );
结果为:i.compareTo: 1  

2.要掌握的方法
A:toString()  返回对象的字符串表示 
例 student [name = null, age = 0]
可以自动生成   快捷键:alt+shift+s+s

 

Math
  1.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

Double:双精度类型

     获取功能
int length() 获取字符串的长度
       例 s.length()
char charAt(int index) 获取指定位置索引的字符
例 s.charAt(7) 获取第七个位置的字符(从0开始)
int indexOf(int ch) 返回指定字符在此字符串中第一次出现的索引
例 s.indexOf("c") 获取 c 第一次出现的位置
int indexOf(String str) 返回指定字符串在此字符串中第一次出现的索引
例 s.indexOf("cake") 获取 cake 第一次出现的位置
int indexOf(int ch,int fromIndex) 返回指定字符在此字符串中从指定位置后第一次出现处的索引
例 s.indexOf("c",4) 从第4个索引后获取 c 的索引
int indexOf(String str,int fromIndex) 返回指定字符串在此字符串中从指定位置后第一次出现处的索引
例 s.indexOf("cake",4) 从第4个索引后获取 cake 的索引
String substring(int start) 从指定位置截取字符串,默认到结尾
例 s.substring(5) 从第5个位置截取字符串
String substring(int start,int end) 从指定位置开始到结束截取字符串
例 s.substring(5,8) 从第5个位置截取字符串到第8个结束,不包括第8个字符。(包左不包右)

代码:
  String s = new String("write once, run anywhere!");
  String ss = new String("write");
  String sss = new String("once");
  System.out.println("s.startsWith(ss): " + s.startsWith(ss) );
  System.out.println("s.startsWith(sss,6): " + s.startsWith(sss,6) );
结果为:
s.startsWith(ss): true
s.startsWith(sss,6): true

     B: 删除功能 
public StringBuffer deleteCharAt(int index) 删除指定位置的一个字符
public StringBuffer delete(int start,int end) 删除指定区间的所有字符(包左不包右)

Float类的使用方法

public Date() 根据当前的毫秒值创建日期对象
public Date(long date) 根据给定的毫秒值创建日期对象

for

  1.针对数组进行操作的的类(排序,查找...)
  2.方法
public static String toString(int[] a)  把数组转成字符串
public static void sort(int[] a)  对数组进行排序
public static int binarySearch(int[] a,int key)  二分查找(必须是排序后的数组才能查找)

  1. 所有方法均为public;
  2. 书写格式:〔修饰符〕 <返回类型> <方法名(〔参数列表〕)>
    如:
    static int parseInt(String s) 表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。

1.该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,
 还提供了处理 int 类型时非常有用的其他一些常量和方法

  System.out.println("s1.compareTo(s2): " + s1.compareTo(s2) );//返回长度差
  System.out.println("s1.compareTo(s3): " + s1.compareTo(s3) );//返回'k'-'a'的差
结果为:
s1.compareTo(s2): 4
s1.compareTo(s3): 10

3.方法
public int intValue()
public static int parseInt(String s)  把String类型转成int类型
public static String toString(int i)  把int类型转成String类型
public static Integer valueOf(int i)  把int类型转换成Integer类型
public static Integer valueOf(String s)  把string类型转换成Integer类型(里面必须是数字)

例子:
代码:
Integer i = new Integer("1234");
生成了一个值为1234的Integer对象。  

2.成员方法

platform

Scanner
1.常用格式 Scanner sc = new Scanner(System.in);

The

Calendar

  1. byte byteValue() :返回以字节表示的浮点数。
  2. static int compare(float f1, float f2) :此为类方法,比较f1和f2。相当于new Float(f1).compareTo(new Float(f2))。如果f1与f2相等,返回0;小于关系,返回负数;大于关系,返回正数。
  3. int compareTo(Float anotherFloat) :此为对象方法,当前对象与anotherFloat比较。与2的比较规则相同。
  4. int compareTo(Object o) :当前对象与o进行比较,如果o属于Float类,那么,相当于3;如果是其他类,则抛出ClassCastException异常。
  5. double doubleValue() :返回浮点数的双精度值。
  6. boolean equals(Object obj) :比较当前Float对象与obj的内容是否相同。大多数情况是比较两个Float对象的值是否相等,相当于f1.floatValue() == f2.floatValue()的值。与2、3、4不同的是:6返回boolean型。
  7. static int floatToIntBits(float value):按照IEEE 754转化成float并输出它的十进制数值。
  8. float floatValue() :返回该浮点数对象的浮点数值。
  9. int hashCode() :返回该Float对象的哈希表码。
  10. int intValue() :返回该Float对象的整数值(整数部分)。
  11. boolean isInfinite() :判断该Float对象是否是无穷。
  12. static boolean isInfinite(float v) :与11类似,不同的是:此为类方法,判断的是v。
  13. boolean isNaN() :判断该Float对象是否为非数值。
  14. static boolean isNaN(float v) :功能与13一样,只不过判断v。
  15. long longValue() :返回该Float对象的长整数值。
  16. static float parseFloat(String s) :将字符串转换成浮点数。
  17. short shortValue() :返回该Float对象的短整数值。
  18. String toString() :将该Float对象转换成字符串。
  19. static String toString(float f) :功能与18一样,只是转换f。
  20. static Float valueOf(String s) :将字符串转换成浮点数。

DateFormat

StringTokenizer:字符串分隔解析类型
属于:java.util包。

String
1.多个字符组成的一串数据,它可以和字符数组进行相互转换

例子:
代码:
int i1 = 54321;
System.out.println("Integer.toString(int i, int radix): " + Integer.toString(i1,16) );
结果为:Integer.toString(int i, int radix): d431

3.成员方法

  1. static String valueOf(boolean b)
  2. static String valueOf(char c)
  3. static String valueOf(char[] data)
  4. static String valueOf(char[] data, int offset, int count)
  5. static String valueOf(double d)
  6. static String valueOf(float f)
  7. static String valueOf(int i)
  8. static String valueOf(long l)
  9. static String valueOf(Object obj)
    以上方法用于将各种不同类型转换成Java字符型。这些都是类方法。

Date

1、属性。

 

 

public static void gc()  垃圾回收器
public static void exit(int status) 终止当前正在运行的虚拟机,参数给0就可以了。
public static long currentTimeMillis() 以毫秒为单位返回当前时间
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
数组复制
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

  1. 所有方法均为public;
  2. 书写格式:〔修饰符〕 <返回类型> <方法名(〔参数列表〕)>
    如:
    static int parseInt(String s) 表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。

3.成员方法
public BigInteger add(BigInteger val) 加法
例  s.add(s1) s和s1相加
public BigInteger subtract(BigInteger val) 减法
public BigInteger multiply(BigInteger val) 乘法
public BigInteger divide(BigInteger val) 除法
public BigInteger[] divideAndRemainder(BigInteger val) 返回商及余数的数组

System.out.println("f.compare(fs): " + f.compareTo(fs) );
System.out.println("f.compareTo(fd): " + f.compareTo(fd) );
System.out.println("Float.compare(1.23f,3.25f): " + Float.compare(1.23f,3.25f) );
结果为:
f.compare(fs): 1
f.compareTo(fd): -1
Float.compare(1.23f,3.25f): -1

public Random()  没有给种子,用的是默认种子,是当前时间的毫秒值。
例 Random r = new Random();
public Random(long seed)  给出指定的种子,给出种子后每次得到的随机数是相同的
例 Random r = new Random(1201);

版权声明:本文由龙竞技官网发布于竞技宝app,转载请注明出处:利用java实现excel转pdf文件