java生成PDF文档

依赖jar包:iText-2.1.7.jar、iTextAsian.jar、itext-rtf-2.1.7.jar

代码如下:

package com.servlet;

import java.awt.Color;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

import com.dao.InformationDao;
import com.lowagie.text.Chapter;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
import com.model.Information;

public class WriteFile {
    private static int normal = Font.NORMAL; // 正常字体
    private static Color black = new Color(0, 0, 0); // 黑色
    private static Color red = new Color(255, 0, 0); // 红色
    private int bold = Font.BOLD; // 粗体
    private Color blue = new Color(0, 0, 255); // 蓝色
    private float setting = 20; // 首行缩进参数
    static int count=0;//用红色标注的字体个数
    static int cop_count=0;//用红色标注的片段个数
    static int sum=0;//总字数

    public static void main(String[] args) throws Exception {
        WriteFile pdfDemo = new WriteFile();
        pdfDemo.writePdf("E:\\20163587_姚雅丽\\大型数据库技术与应用\\信息技术手册检测报告.pdf");
        System.out.println("写入完成!");
    }
    public void write() throws Exception {
        WriteFile pdfDemo = new WriteFile();
        pdfDemo.writePdf("E:\\20163587_姚雅丽\\大型数据库技术与应用\\信息技术手册检测报告.pdf");
        System.out.println("写入完成!");
    }
    /*
    public void writeone(String title,int index) throws Exception {
        WriteFile pdfDemo = new WriteFile();
        pdfDemo.writePdfone("E:\\20163587_姚雅丽\\大型数据库技术与应用\\"+title+"信息技术手册检测报告.pdf",title,index);
        System.out.println("写入完成!");
    }*/
    public static Document createDoc(String filename) throws Exception {

        Document document = new Document(PageSize.A4, 50, 50, 50, 50);
        PdfWriter.getInstance(document, new FileOutputStream(filename));
        return document;
    }

    public void writePdf(String filename) throws Exception {
        InformationDao indao=new InformationDao();
        List<String> copys=indao.loadCopyAll();
        HashSet h = new HashSet(copys);
        copys.clear();
        copys.addAll(h);
        int length=0;
        int pianduan=0;
        for(String copy:copys)
        {
            length+=copy.length();
            pianduan++;
        }
        int sum2=0;
        List<Information> infoss=indao.loadAll();
        for (Information info : infoss) {
            sum2+=info.getContent().length();
        }
        Document document = createDoc(filename); // 打开文档
        document.open(); // 文档里写入
        Chunk chunk1 = new Chunk(convertChunkToChinese("信息技术手册检测报告", 20, bold, black));
        document.add(chunk1);
        document.add(new Paragraph("\n"));
        Paragraph pp = new Paragraph(convertParToChinese("检测范围:◎百度词条", 9, normal, black));
        document.add(pp);
        Paragraph pp1 = new Paragraph(convertParToChinese("颜色标注说", 9, normal, black));
        document.add(pp1);
        Paragraph pp2 = new Paragraph();
        pp2.add(new Phrase(convertParToChinese("口", 9, normal, red)));
        pp2.add(new Phrase(convertParToChinese(":复写片段(相似或疑似重)", 9, normal, black)));
        document.add(pp2);
        //InformationDao indao=new InformationDao();
        document.add(new Paragraph(convertParToChinese("检测结论:",22, normal, black)));
        Paragraph a1=new Paragraph();
        a1.add(new Phrase(convertParToChinese("全文相似度:", 9, normal, black)));
        sum();
        DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
        String p=decimalFormat.format((float)100*length/sum2);
        System.out.println(p);
        a1.add(new Phrase(convertParToChinese(p+"%", 9, normal, red)));
        document.add(a1);
        document.add(new Paragraph(convertParToChinese("总相似片段:" +pianduan, 9, normal, black)));
        List<Information> infos=indao.loadAll();
        for (Information info : infos) {
            Paragraph chapterTitle = new Paragraph("\n\n");
            Paragraph p0 = new Paragraph(convertParToChinese(info.getIndex() + "." + info.getTitle(), 14, bold, black));
            chapterTitle.add(p0);
            Paragraph p3 = new Paragraph(convertParToChinese("类别:" + info.getType(), 9, normal, blue));
            chapterTitle.add(p3);
            //Paragraph p = new Paragraph(convertParToChinese("摘要:" + , 9, normal, blue));
            //chapterTitle.add(p);
            Paragraph p1 = new Paragraph(convertParToChinese("关键词:" + info.getKeyword(), 9, normal, blue));
            chapterTitle.add(p1);
            Paragraph p2 = returnCopy(info.getIndex(), info.getContent());// 解释
            chapterTitle.add(p2);
            document.add(chapterTitle);
        }
        document.add(new Paragraph("\n\n"));

        document.close();
        count=0;
        sum=0;
        cop_count=0;
    }
    /*
    public void writePdfone(String filename,String title,int index) throws Exception {

        Document document = createDoc(filename); // 打开文档
        document.open(); // 文档里写入
        Chunk chunk1 = new Chunk(convertChunkToChinese(title+"信息技术手册检测报告", 20, bold, black));
        document.add(chunk1);
        document.add(new Paragraph("\n"));
        Paragraph pp = new Paragraph(convertParToChinese("检测范围:◎百度词条", 9, normal, black));
        document.add(pp);
        Paragraph pp1 = new Paragraph(convertParToChinese("颜色标注说", 9, normal, black));
        document.add(pp1);
        Paragraph pp2 = new Paragraph();
        pp2.add(new Phrase(convertParToChinese("口", 9, normal, red)));
        pp2.add(new Phrase(convertParToChinese(":复写片段(相似或疑似重)", 9, normal, black)));
        document.add(pp2);
        InformationDao indao=new InformationDao();
        Information info=indao.load(index);
            Paragraph chapterTitle = new Paragraph("\n\n");
            Paragraph p0 = new Paragraph(convertParToChinese(info.getIndex() + "." + info.getTitle(), 14, bold, black));
            chapterTitle.add(p0);
            Paragraph p3 = new Paragraph(convertParToChinese("类别:" + info.getType(), 9, normal, blue));
            chapterTitle.add(p3);
            //Paragraph p = new Paragraph(convertParToChinese("摘要:" + , 9, normal, blue));
            //chapterTitle.add(p);
            Paragraph p1 = new Paragraph(convertParToChinese("关键词:" + info.getKeyword(), 9, normal, blue));
            chapterTitle.add(p1);
            Paragraph p2 = returnExpain(info.getIndex(), info.getContent());// 解释
            chapterTitle.add(p2);
            document.add(chapterTitle);
        document.add(new Paragraph("\n\n"));
        document.add(new Paragraph(convertParToChinese("检测结论:",22, normal, black)));
        Paragraph a1=new Paragraph();
        a1.add(new Phrase(convertParToChinese("全文相似度:", 9, normal, black)));
        sum();
        DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
        String p=decimalFormat.format((float)100*count/sum);
        System.out.println(p);
        a1.add(new Phrase(convertParToChinese(p+"%", 9, normal, red)));
        document.add(a1);
        document.add(new Paragraph(convertParToChinese("总相似片段:" +cop_count, 9, normal, black)));
        count=0;
        sum=0;
        cop_count=0;
        document.close();
    }
    */
    //返回词语解释部分
    public static Paragraph returnCopy(int index, String explain) throws Exception
    {
        int chaoxi=0;//抄袭字数
        int pianduan=0;//抄袭片段
        int zongzishu=0;//总字数
        Paragraph a = new Paragraph();
        InformationDao indao=new InformationDao();
        List<String> copys=indao.loadCopy(index);
        HashSet h = new HashSet(copys);
        copys.clear();
        copys.addAll(h);
        System.out.println(copys);
        int pos[]=new int[100];
        int x=0;
        for(String copy:copys)
        {
            pos[x]=explain.indexOf(copy);
            x++;
        }
        Arrays.sort(pos);

        for(int i=0;i<explain.length();i++)
        {
            String word="";
            //word = word+explain.charAt(i);
            //a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));
            int max=0;
            boolean b=true;

            for(int position:pos)
            {
                if(i==position)//判断是否到达抄袭点
                {
                    b=false;//到达抄袭点
                }
            }
            if(b==false)
            {
                String cop="";
                for(String copy:copys)
                {
                    if(explain.indexOf(copy)==i)
                    {
                        cop=copy;
                    }
                }
                a.add(new Phrase(convertParToChinese2(cop, 12, normal, red)));
                chaoxi+=cop.length();
                pianduan++;
                i=i+cop.length();
            }
            word = word+explain.charAt(i);
            a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));

        }
        a.add(new Paragraph(convertParToChinese("检测结论:",22, normal, black)));
        Paragraph a1=new Paragraph();
        a1.add(new Phrase(convertParToChinese("全文相似度:", 9, normal, black)));
        sum();
        DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
        String p=decimalFormat.format((float)100*chaoxi/explain.length());
        System.out.println(p);
        a1.add(new Phrase(convertParToChinese(p+"%", 9, normal, red)));
        a.add(a1);
        a.add(new Paragraph(convertParToChinese("总相似片段:" +pianduan, 9, normal, black)));
        return a;

    }
    /*
    public static Paragraph returnExpain(int index, String explain) throws Exception {
        InformationDao indao=new InformationDao();
        String copy=indao.loadcpoy(index);
        String[]copys=copy.split("¢");
        Paragraph a = new Paragraph();
        String word = "";
        int j = 0;
        if (copy.length()!=0)
        {
            if(copys.length==1)
            {
                String c = copys[j];
                //j++;
                //System.out.println(index);
                for (int i = 0; i < explain.length(); i++)
                {
                    int position=explain.indexOf(copys[0]);

                    if (i < position)
                    {
                        //System.out.println("姚雅丽");
                        word = word + explain.charAt(i);
                        //System.out.println(word);

                    }
                    else if (i==position)
                    {
                            System.out.println(word);
                            a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));
                            a.add(new Phrase(convertParToChinese2(copys[0], 12, normal, red)));
                            count+=copys[0].length();
                            cop_count++;
                            word = "";
                    }
                    else if(i>=position+copys[0].length())
                    {
                        word = word + explain.charAt(i);
                        a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));
                        word = "";
                    }
                }
            }
            else
            {
            String c = copys[j];
            //j++;
            //System.out.println(index);
            for (int i = 0; i < explain.length(); i++)
            {
                int position=explain.indexOf(copys[0]);
                int pos2=explain.indexOf(copys[1]);
                int min=0;
                int max=0;
                String one="";
                String two="";
                if(position<pos2)
                {
                    min=position;
                    one=copys[0];
                    two=copys[1];
                    max=pos2;
                }
                else
                {
                    max=position;
                    min=pos2;
                    two=copys[0];
                    one=copys[1];
                }
                if (i < min)
                {
                    //System.out.println("姚雅");
                    word = word + explain.charAt(i);

                }
                else if (i==min)
                {
                        a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));
                        a.add(new Phrase(convertParToChinese2(one, 12, normal, red)));
                        cop_count++;
                        count+=one.length();
                        word = "";
                }
                else if (min+one.length()<=i&&i<max)
                {
                        word = word + explain.charAt(i);
                        a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));
                        word = "";

                }else if(i==max)
                {
                     word = word + explain.charAt(i);
                     a.add(new Phrase(convertParToChinese2(two, 12, normal, red)));
                     cop_count++;
                     count+=two.length();
                     word = "";
                }
                else if(i>=max+two.length()&&i<explain.length()-1)
                {
                    word = word + explain.charAt(i);
                }
                else if(i==explain.length()-1)
                {
                    word = word + explain.charAt(i);
                    a.add(new Phrase(convertParToChinese2(word, 12, normal, black)));
                }

            }
            }
        }
        else
        {
            //System.out.println("姚雅丽");
            a = new Paragraph(convertParToChinese(explain, 12, normal, black));
        }
        return a;

    }
    */
    public static void sum() {
        InformationDao indao=new InformationDao();
        List<Information> infos=indao.loadAll();
        for(Information info:infos) {
            sum=sum+info.getContent().length();
        }

    }

    public static Paragraph convertParToChinese(String text, int fontsize, int fontStyle, Color color)
            throws Exception {
        BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font fontChinese = new Font(baseFontChinese, fontsize, fontStyle, color);
        Paragraph graph = new Paragraph(text, fontChinese);
        return graph;
    }

    public static Phrase convertParToChinese2(String text, int fontsize, int fontStyle, Color color) throws Exception {
        BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font fontChinese = new Font(baseFontChinese, fontsize, fontStyle, color);
        Phrase graph = new Phrase(text, fontChinese);
        return graph;
    }

    public static Chunk convertChunkToChinese(String text, int fontsize, int fontStyle, Color color) throws Exception {
        BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font fontChinese = new Font(baseFontChinese, fontsize, fontStyle, color);
        Chunk graph = new Chunk(text, fontChinese);
        return graph;
    }
}

参考文章:https://www.cnblogs.com/wl2017/p/10639002.html

原文地址:https://www.cnblogs.com/lovema1210/p/10666219.html

时间: 2024-10-06 14:39:13

java生成PDF文档的相关文章

Java生成PDF文档(表格、列表、添加图片等)

需要的两个包及下载地址: (1)iText.jar:http://download.csdn.net/source/296416 (2)iTextAsian.jar(用来进行中文的转换):http://download.csdn.net/source/172399 代码如下: 1 import java.awt.Color; 2 import java.io.FileOutputStream; 3 import com.lowagie.text.Cell; 4 import com.lowagi

利用Java动态生成 PDF 文档

利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那么目前最佳的解决方案,你可能会想到 iText ,对没错... iText+(Velocity / Freemarker)可以实现.不过据我熟悉,iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式会让你头大的.不要失望,接下来

Java iText使用PDF模板生成PDF文档

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便: 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,"工具"->"编辑PDF"->&qu

java读取pdf文档

import java.io.*;import org.pdfbox.pdmodel.PDDocument;import org.pdfbox.pdfparser.PDFParser;import org.pdfbox.util.PDFTextStripper; public class PDFReader {  public static String file_path = "F:/pdf/网易技术部的MySQL中文资料.pdf"; // 获取PDF内纯文本信息 public St

自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器

置顶2017年11月06日 14:41:04 阅读数:2311 这几天,任务中有一个难点是把一个打印页面自动给生成PDF文档,并且上传至服务器,然而公司框架只有手动上传文档,打印时可以保存为PDF在本地吧,所以感到很头疼,刚开始没有方向,所以只有surf the Internet了,网上看了很多资料,渐渐的从一点方向也不懂,到慢慢开始了解怎么着手去做,废话就不说了, 我看网上大概介绍了三种方式:Jasper Report . iText . flying sauser jasper report

java导出pdf文档

java导出pdf文档,多是iText实现的,可以创建pdf文档,并向文档写入内容. 1 导入包:itext-2.0.6.jar       itext必须使用的包. iTextAsian.jar      向pdf写入中文必须的包. 2 代码: package com.exp.pdf; import java.awt.Color; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowa

使用PHP生成PDF文档

原文:使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进,增强了实用功能. 使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快速生成PDF文件

利用PDFLib生成PDF文档

本文代码生成的PDF文档效果图 一.PDF介绍 PDF是Portable Document Format的缩写,PDF文件格式是国际通用的电子文档交换事实标准,被许多国家采用作为电子文档交换.PDF文件可以在各种平台下阅读.编辑.发布.该文件格式支持字体.图像.甚至任何附件的嵌入.您可以通过免费的Adobe Acrobat Reader来阅读.编辑PDF文档. 二.PDFLib介绍 PDFLib是用于创建PDF文档的开发库,提供了简单易用的API,隐藏了创建PDF的复杂细节且不需要第3方软件的支

使用PDFLib生成PDF文档教程

一.PDF介绍PDF是Portable Document Format的缩写,PDF文件格式是国际通用的电子文档交换事实标准,被许多国家采用作为电子文档交换.PDF文件可以在各种平台下阅读.编辑.发布.该文件格式支持字体.图像.甚至任何附件的嵌入.您可以通过免费的Adobe Acrobat Reader来阅读.编辑PDF文档. 二.PDFLib介绍PDFLib是用于创建PDF文档的开发库,提供了简单易用的API,隐藏了创建PDF的复杂细节且不需要第3方软件的支持.PDFLib库对于个人是免费的,