1. 程式人生 > >Java之生成Pdf並對Pdf內容操作

Java之生成Pdf並對Pdf內容操作

enc images sub als tar 應用 throw mave add

雖說網上有很多可以在線導出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)

全面示例運行後生成的文件如下圖所示:

技術分享圖片

Java之生成Pdf並對Pdf內容操作