• Java之生成Pdf并对Pdf内容操作


    虽说网上有很多可以在线导出Pdf或者word或者转成png等格式的工具,但是我觉得还是得了解知道是怎么实现的。一来,在线免费转换工具,是有容量限制的,达到一定的容量时,是不能成功导出的;二来,业务需求,特别是OA方面的项目,报表不单单只是在线通过浏览器登录对应的站点浏览还需有时导出Pdf格式(pdf格式为通用格式,无论是浏览器还是其他工具都能打开,因此特别是做项目实施的,除了用word编写文档之外,通常还导出一下pdf,这样一来保证给老板看时,不会因为某种原因打不开文件看不到对应的实质内容。

    直接开门见山:

    一、导入Maven依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>site.duanzy</groupId>
        <artifactId>study_pdf</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>study_pdf</name>
        <description />
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <dependencies>
    
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.10</version>
            </dependency>
    
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>
            
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk15on</artifactId>
                <version>1.54</version>
            </dependency>
    
    
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <version>7.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.glassfish.web</groupId>
                <artifactId>javax.servlet.jsp.jstl</artifactId>
                <version>1.2.2</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <version>3.1</version>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    二、编写Java代码

    package site.duanzy.pdf.demo;
    
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.PdfWriter;
    
    
    public class TestPDFDemo1 {
    
        public static void main(String[] args) throws FileNotFoundException, DocumentException {
    
            // 1.新建document对象
            Document document = new Document();
    
            // 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
            // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("E://Pdf//test.pdf"));
            
            writer.flush();
            
            writer.close();
            
            // 3.打开文档
            document.open();
            
            // 4.添加一个内容段落
            document.add(new Paragraph("Hello World!"));
    
            // 5.关闭文档
            document.close();
    
        }
    
    }
    package site.duanzy.pdf.demo;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.PdfWriter;
    
    
    public class TestPDFDemo2 {
        public static void main(String[] args) throws FileNotFoundException,
                DocumentException {
    
            // 创建文件
            Document document = new Document();
            // 建立一个书写器
            PdfWriter writer = PdfWriter.getInstance(document,
                    new FileOutputStream("E://Pdf//test2.pdf"));
            // 打开文件
            document.open();
            // 添加内容
            document.add(new Paragraph("Some content here"));
    
            // 设置属性
            // 标题
            document.addTitle("this is a title");
            // 作者
            document.addAuthor("Mr You");
            // 主题
            document.addSubject("this is subject");
            // 关键字
            document.addKeywords("Keywords");
            // 创建时间
            document.addCreationDate();
            // 应用程序
            document.addCreator("hd.com");
    
            // 关闭文档
            document.close();
            // 关闭书写器
            writer.close();
        }
    }
    package site.duanzy.pdf.demo;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URL;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.PdfWriter;
    
    
    public class TestPDFDemo3 {
        public static void main(String[] args) throws DocumentException,
                IOException {
    
            // 创建文件
            Document document = new Document();
            // 建立一个书写器
            PdfWriter writer = PdfWriter.getInstance(document,
                    new FileOutputStream("E://Pdf//test3.pdf"));
            // 打开文件
            document.open();
            // 添加内容
            document.add(new Paragraph("HD content here"));
    
            // 图片1
            Image image1 = Image.getInstance("E://Demo//workspace//java_pdf//src//main//webapp//images//test.png");
            // 设置图片位置的x轴和y周
            image1.setAbsolutePosition(100f, 550f);
            // 设置图片的宽度和高度
            image1.scaleAbsolute(200, 200);
            // 将图片1添加到pdf文件中
            document.add(image1);
    
            // 图片2
            Image image2 = Image.getInstance(new URL("https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=bda2ad09277f9e2f74351a0a2f31e962/0b46f21fbe096b63ea0d41bf0c338744eaf8accc.jpg"));
            // 将图片2添加到pdf文件中
            document.add(image2);
    
            // 关闭文档
            document.close();
            // 关闭书写器
            writer.close();
        }
    }

    以上值列举三个测试代码,更多可以参考我的github:https://github.com/youcong1996/study_simple_demo.git

    记住该示例代码在我的侧分支,分支名为java-pdf。

    三、运行测试代码的最后结果(结果最后是生成pdf,一般控制台不报错,就表示OK)

    全面示例运行后生成的文件如下图所示:

  • 相关阅读:
    shell面试题整理
    用循环链表实现Josephus问题
    in与exists的区别
    单链表的建立/测长/打印/删除/排序/逆序/寻找中间值
    float在内存中的存放
    crontab定时任务详解
    螺旋队列问题之二
    螺旋队列问题之一
    android网络编程--从网络下载图片,并保存到内存卡
    android Shader类简介_渲染图像示例
  • 原文地址:https://www.cnblogs.com/youcong/p/9671202.html
Copyright © 2020-2023  润新知