zoukankan      html  css  js  c++  java
  • itextpdf使用中文字体的三种方式

    使用itextpdf时,默认的字体没有中文,总结了一下使用中文字体的方式。

    1、使用windows系统下的字体,该种方式的具体操作可以看另一篇博客:https://www.cnblogs.com/whalesea/p/11714681.html

    2、使用自己的字体资源,可以是在别的地方下载的资源,也可以是吧windows的字体资源复制到项目内使用。

    3、使用iTextAsian.jar中的字体,这是一个itext支持中文的包,可以使用其中字体。该包在有个问题经常会导致报错,具体原因大致为:在itext5.x版本对font和encoding文件都是从 RESOURCE_PATH = “com/itextpdf/text/pdf/fonts/”加载的,而itextasian1.5.x.jar的包名是com.lowagie.text.pdf.fonts, 包名不一致,导致路径错误

    下面是统一的代码演示:

    package dbzx.pdf;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.junit.Test;
    
    import com.itextpdf.text.BaseColor;
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.FontFactory;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfWriter;
    
    public class FontTest {
        
        /**
         * 生成pdf文件
         */
        public void createPdf(Font font) throws FileNotFoundException, DocumentException {
            
            String path = "E:/demo/pdfCreat/"+System.currentTimeMillis()+".pdf";
            File file = new File(path);
            file.getParentFile().mkdirs();
            Document doc = new Document(PageSize.A4);
            PdfWriter.getInstance(doc, new FileOutputStream(file));
            doc.open();
            doc.add(new Paragraph("字体测试",font));
            doc.close();
        }
        
        @Test
        /**
         * 使用windows系统下的字体,new Font方式
         */
        public void test1_1() throws DocumentException, IOException {
            String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径
            BaseFont bf = BaseFont.createFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font font = new Font(bf, 10f, Font.NORMAL, BaseColor.BLACK);
            createPdf(font);
        }
        
        @Test
        /**
         * 使用windows系统下的字体,FontFactory方式
         */
        public void test1_2() throws DocumentException, IOException {
            String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径
            Font font = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK);
            createPdf(font);
        }
        
        @Test
        /**
         * 使用自己查找的字体,FontFactory方式
         */
        public void test2() throws DocumentException, IOException {
            String path = "src/main/resources/file/pdf/font/SIMYOU.TTF";//自己的字体资源路径
            Font font = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK);
            createPdf(font);
        }
        
        
        /**
         * 使用iTextAsian.jar中的字体,FontFactory方式
         */
        @Test
        public void test3() throws DocumentException, IOException {
            Font font = FontFactory.getFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK);
            createPdf(font);
        }
        
        
        
        
        
        
    }
    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    thinkphp3.2.3版本在windows本地apache环境运行正常,上传到centos服务器apache环境中出现:thinkphp 上传根目录不存在!请尝试手动创建:uploads/
    [POI2013]LUK-Triumphal arch
    【背包问题】
    2016 acm香港网络赛 A题. A+B Problem (FFT)
    tomcat部署项目的三种方式
    仿照ArrayList自己生成的MyList对象
    使用回调函数实现回文判断
    关于angularjs的model的一些问题
    关于使用Tomcat服务器出现413错误的解决办法(Request Entity Too Large)
    关于angularjs+typeahead的整合
  • 原文地址:https://www.cnblogs.com/whalesea/p/11752086.html
Copyright © 2011-2022 走看看