「java解析ttf」java解析json报文

博主:adminadmin 2022-12-12 08:24:11 66

本篇文章给大家谈谈java解析ttf,以及java解析json报文对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 如何读取otf字体?急求高手解答。。

import java.io.FileOutputStream;

import com.lowagie.text.Document;

import com.lowagie.text.Font;

import com.lowagie.text.Paragraph;

import com.lowagie.text.pdf.BaseFont;

import com.lowagie.text.pdf.PdfWriter;

public class MainClass {

public static void main(String[] args) throws Exception {

Document document = new Document();

PdfWriter.getInstance(document, new FileOutputStream("2.pdf"));

document.open();

BaseFont bf = BaseFont.createFont("esl_gothic_shavian.otf", "Cp1252", BaseFont.EMBEDDED);

System.err.println(bf.getClass().getName());

Font font = new Font(bf, 12);

document.add(new Paragraph("abced"));

document.add(new Paragraph("this is a test", font));

document.close();

}

}

这段程序貌似是把pdf设置成otf字体输出,改一下就好!

这程序绝对经得起考研!从国外教程网站找到d!

把esl_gothic_shavian.otf换成你的字体

java 解析文件到数据库

楼主,是想整个文件保存 吗? 不然为何要拼接起来! 每行是一次保存,就读一行、拆分一行、保存一行。。。。。。。。。。。。。。。。。。。。

java怎么把ttf字体文件转换成 java中可获取的16进制字符串?

这个也不用转呀

String

s

=

"\u5F20\u4E09";

System.out.println(s);

输出的就是张三

希望回答能给你带来帮助,如果还又不明白的地方请追问

你的采纳是我前进的动力答题不易互相理解

java中如何读取ttf字体文件,生成Font数组

1.读取

import java.awt.Font;

import java.io.File;

import java.io.FileInputStream;

public class Loadfont

{

public static Font loadFont(String fontFileName, float fontSize) //第一个参数是外部字体名,第二个是字体大小

{

try

{

File file = new File(fontFileName);

FileInputStream aixing = new FileInputStream(file);

Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, aixing);

Font dynamicFontPt = dynamicFont.deriveFont(fontSize);

aixing.close();

return dynamicFontPt;

}

catch(Exception e)//异常处理

{

e.printStackTrace();

return new java.awt.Font("宋体", Font.PLAIN, 14);

}

}

public static java.awt.Font Font(){

String root=System.getProperty("user.dir");//项目根目录路径

Font font = Loadfont.loadFont(root+"/data/PRISTINA.ttf", 18f);//调用

return font;//返回字体

}

public static java.awt.Font Font2(){

String root=System.getProperty("user.dir");//项目根目录路径

Font font = Loadfont.loadFont(root+"/data/XXXX.ttf", 18f);

return font;//返回字体

}

}

2.转换:

public static String ascii2native(String ascii) {

int n = ascii.length() / 6;

StringBuilder sb = new StringBuilder(n);

for (int i = 0, j = 2; i n; i++, j += 6) {

String code = ascii.substring(j, j + 4);

char ch = (char) Integer.parseInt(code, 16);

sb.append(ch);

}

return sb.toString();

}

如何获取android系统的字体名称

在java环境中有一个专门的获取ttf文件的头信息的Font类

Font f = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("seguisym.ttf"));

String name = f.getName();

System.out.println(name);

但是在android环境下,我们无法直接用到该类去解析TTF文件,下面我将附上代码来解析ttf文件

TTFParser.Java

import java.io.IOException;

import java.io.RandomAccessFile;

import java.nio.charset.Charset;

import java.util.HashMap;

import java.util.Map;

/**

* TTF Font file parser

* p

* sample:

* codepre

* File fs = new File("C:\\Windows\\Fonts");

* File[] files = fs.listFiles(new FilenameFilter() {

* public boolean accept(File dir, String name) {

* if (name.endsWith("ttf")){ return true;}

* return false;

* }

* });

* for (File file : files) {

* TTFParser parser = new TTFParser();

* parser.parse(file.getAbsolutePath());

* System.out.println("font name: " + parser.getFontName());

* }

* /pre/code

* p/

* Copyright: Copyright (c) 12-8-6 下午3:51

* p/

* Version: 1.0

* p/

*/

public class TTFParser {

public static int COPYRIGHT = 0;

public static int FAMILY_NAME = 1;

public static int FONT_SUBFAMILY_NAME = 2;

public static int UNIQUE_FONT_IDENTIFIER = 3;

public static int FULL_FONT_NAME = 4;

public static int VERSION = 5;

public static int POSTSCRIPT_NAME = 6;

public static int TRADEMARK = 7;

public static int MANUFACTURER = 8;

public static int DESIGNER = 9;

public static int DESCRIPTION = 10;

public static int URL_VENDOR = 11;

public static int URL_DESIGNER = 12;

public static int LICENSE_DESCRIPTION = 13;

public static int LICENSE_INFO_URL = 14;

private MapInteger, String fontProperties = new HashMapInteger, String();

/**

* 获取ttf font name

* @return

*/

public String getFontName() {

if (fontProperties.containsKey(FULL_FONT_NAME)) {

return fontProperties.get(FULL_FONT_NAME);

} else if (fontProperties.containsKey(FAMILY_NAME)) {

return fontProperties.get(FAMILY_NAME);

} else {

return null;

}

}

/**

* 获取ttf属性

* @param nameID 属性标记,见静态变量

* @return 属性值

*/

public String getFontPropertie(int nameID) {

if (fontProperties.containsKey(nameID)) {

return fontProperties.get(nameID);

} else { return null; }

}

/**

* 获取ttf属性集合

* @return 属性集合(MAP)

*/

public MapInteger, String getFontProperties() { return fontProperties; }

/**

* 执行解析

* @param fileName ttf文件名

* @throws IOException

*/

public void parse(String fileName) throws IOException {

fontProperties.clear();

RandomAccessFile f = null;

try {

f = new RandomAccessFile(fileName, "r");

parseInner(f);

} finally {

try {

f.close();

}catch (Exception e) {

//ignore;

}

}

}

private void parseInner(RandomAccessFile randomAccessFile) throws IOException {

int majorVersion = randomAccessFile.readShort();

int minorVersion = randomAccessFile.readShort();

int numOfTables = randomAccessFile.readShort();

if (majorVersion != 1 || minorVersion != 0) { return; }

//jump to TableDirectory struct

randomAccessFile.seek(12);

boolean found = false;

byte[] buff = new byte[4];

TbleDirectory tableDirectory = new TableDirectory();

for (int i = 0; i numOfTables; i++) {

randomAccessFile.read(buff);

tableDirectory.name = new String(buff);

tableDirectory.checkSum = randomAccessFile.readInt();

tableDirectory.offset = randomAccessFile.readInt();

tableDirectory.length = randomAccessFile.readInt();

if ("name".equalsIgnoreCase(tableDirectory.name)) {

found = true;

break;

}else if (tableDirectory.name == null || tableDirectory.name.length() == 0) {

break;

}

}

// not found table of name

if (!found) { return; }

randomAccessFile.seek(tableDirectory.offset);

NameTableHeader nameTableHeader = new NameTableHeader();

nameTableHeader.fSelector = randomAccessFile.readShort();

nameTableHeader.nRCount = randomAccessFile.readShort();

nameTableHeader.storageOffset = randomAccessFile.readShort();

NameRecord nameRecord = new NameRecord();

for (int i = 0; i nameTableHeader.nRCount; i++) {

nameRecord.platformID = randomAccessFile.readShort();

nameRecord.encodingID = randomAccessFile.readShort();

nameRecord.languageID = randomAccessFile.readShort();

nameRecord.nameID = randomAccessFile.readShort();

nameRecord.stringLength = randomAccessFile.readShort();

nameRecord.stringOffset = randomAccessFile.readShort();

long pos = randomAccessFile.getFilePointer();

byte[] bf = new byte[nameRecord.stringLength];

long vpos = tableDirectory.offset + nameRecord.stringOffset + nameTableHeader.storageOffset;

randomAccessFile.seek(vpos);

randomAccessFile.read(bf);

String temp = new String(bf, Charset.forName("utf-16"));

fontProperties.put(nameRecord.nameID, temp);

randomAccessFile.seek(pos);

}

}

@Override

public String toString() {

return fontProperties.toString();

}

private static class TableDirectory {

String name; //table name

int checkSum; //Check sum

int offset; //Offset from beginning of file

int length; //length of the table in bytes

}

private static class NameTableHeader {

int fSelector; //format selector. Always 0

int nRCount; //Name Records count

int storageOffset; //Offset for strings storage,

}

private static class NameRecord {

int platformID;

int encodingID;

int languageID;

int nameID;

int stringLength;

int stringOffset; //from start of storage area

}

}

java代码解析

一楼的说的够全面了,不过稍有误解.

再来表示抱歉,我对编程语言中的中文名词非常不了解,所以如果以下的回复对你的阅读或者理解造成困难,请见谅.

1.首先,要明白这个问题的答案,需要了解call (pass) by value 和 call (pass) by reference 的区别.简单来说:

call by value通常是复制这个parameter的值去另外一块内存里,然后传给function, 所以在method/function里边对这个变量的所有变更,实际上都是对复制过来的镜像进行操作,不会对原本的variable有任何影响.

call by reference是将parameter的reference传给function,简单点理解就是直接把variable传给function.所以说这个variable的值是可以被function改变的.这个用法在c/c++中非常常见,用法是variable_name.

2.再来,在Java里边,你可以很简单的理解为: Java中只有call by value, 也就是说,所以所有传给function的parameter本身都不会被改变. (这是最简单直白的理解,当然也有另一种常从sun的人那边听到的说法:Java是call by value + call by reference by value)

3.那么现在的问题就是为什么第二个结果是2了. 首先说一下sun官方的解释: 对于reference type在作为parameter/argument的时候,也是call by value, 但是在你拥有足够权限时(比方说那个变量是public的, 不是final的等等各种符合的情况),可以修改这个object中fields的值(也就是属于这个object(严谨点讲是an instance of the object) 内部的变量, 在你的例子中, ko 里边的 a 就是一个field, 所以update(ko)会使ko.a变成2).

4.如果你是一个有过c/c++学习经验的人或者你以上的解释很难理解,以下这种说法或许更适合你 (当然了,这只是大多包括我在内有c经验的人的一种理解方式)

这里可以引入一个新的概念,pointer. 这是一种比较特殊的变量,它内部所储存的东西,其实只是另外一个变量的内存地址. 如果对内存没有概念,你可以把它简单理解为是风筝的线轴,虽然看它本身看不出什么端倪,但是顺着摸过去总会找到风筝,看到它是什么样子. 以pointer方式理解Java的人,通常会说: Type variable = new Type(); 这个过程中,最后生成的这个variable其实就是一个pointer,而不是instance本身.

在Java中, 有c/c++经验的人通常认为Java是call by value.同时,当一个变量用在储存reference type的时候,实际上储存的是它的pointer,这也一样可以解释为什么ko.a会有2这个结果,因为虽然pointer被传到function里边时,本身是call by value,无法被改变.但这并不影响function本身对这个pointer指向的object的内容做任何改变. 当然,再次声明,这只是一种帮助有c/c++经验的人理解的方法. Sun本身严正声明Java里边没有pointer这个东西的存在.

5. 再来解释一下为什么说楼上所说的(或者说楼上引用的)理解略有偏差.

引用"我们上面刚学习了JAVA的数据类型,则有:值类型就是按值传递的,而引用类型是按引用传递的" 这句话很明显的有两点错误. 第一点,如果我上面所说的,Java是没有call by reference的.

第二点,暂且假设Java里边是有call by reference的, 这句话依然不成立.

Java中的变量有两种类型: primitive types 和 reference type.

primitive type包括byte, short, int, long, char, boolean, float和double.

而这8种之外的所有的,都是reference type.

下面是一段对你的贴上来的code的一点延伸,希望可以帮助你更好的理解Java中的argument / parameter到底是如何运作的.

public class Test {

public static void main(String[] args) {

int a = 1;

Koo koo = new Koo();

Object o = new Integer(1);

Koo newKoo = new Koo();

update(a);

update(koo);

update(o);

update(newKoo);

newUpdate(newKoo);

System.out.println(a);

System.out.println(koo.a);

System.out.println(o);

System.out.println(newKoo.a);

}

static void update(int a) {

a++;

}

static void update(Koo koo) {

koo.a++;

}

static void update(Object o) {

o = (int) (Integer.parseInt(o.toString()) + 1);

}

static void newUpdate(Koo koo) {

koo = new Koo();

}

}

class Koo {

int a = 1;

}

/*

o = (int) (Integer.parseInt(o.toString()) + 1); 这一行中的(int)纯粹是多余的,是否有这个casting对code本身没有任何影响. 如果你高兴也可以用

o = new Integer(Integer.parseInt(o.toString()) + 1);

或者干脆

o = Integer.parseInt(o.toString()) + 1;

*/

以上这些code运行之后会得到1 2 1 2的结果. 后面两个结果可以很好的说明, 即使对objects (reference type variables) 来看, Java所应用的也并不是call by reference. 否则的话,以上code运行结果应该是1 2 2 1

希望你可以真正理解这个新的例子中,产生1212这个结果的原因,从而对Java中的arguments有一个系统全面的认识.

图片是相关资料的链接,知道里貌似不能加网址

java解析ttf的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java解析json报文、java解析ttf的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-12,除非注明,否则均为首码项目网原创文章,转载请注明出处。