pdfbox&iText生成PDF文件格式及读取PDF文件内容的小示例--完美支持中文版
时间: 2024-03-13 18:43:51 浏览: 157
好的,我会为你提供一个使用 pdfbox 和 iText 生成 PDF 文件以及读取 PDF 文件内容的示例代码,同时支持中文。
生成 PDF 文件代码示例:
```
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
public class PDFGenerator {
public static void main(String[] args) throws Exception {
// 生成 pdfbox 生成的 PDF 文件
generatePdfByPdfbox();
// 生成 iText 生成的 PDF 文件
generatePdfByItext();
}
private static void generatePdfByPdfbox() throws Exception {
// 创建一个 PDF 文档
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
// 创建一个字体对象
PDType0Font font = PDType0Font.load(document, PDFGenerator.class.getClassLoader().getResourceAsStream("FZXBSJW.TTF"));
// 创建一个 ContentStream 对象
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// 添加文字
contentStream.setFont(font, 12);
contentStream.beginText();
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello, PDFBox!");
contentStream.endText();
// 添加图片
PDImageXObject image = JPEGFactory.createFromStream(document, PDFGenerator.class.getClassLoader().getResourceAsStream("example.jpg"));
contentStream.drawImage(image, 100, 500, 300, 200);
// 关闭 ContentStream 对象
contentStream.close();
// 保存 PDF 文件
File file = new File("pdfbox.pdf");
document.save(file);
document.close();
}
private static void generatePdfByItext() throws Exception {
// 创建一个 iText 文档
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
// 创建一个字体对象
BaseFont font = BaseFont.createFont(PDFGenerator.class.getClassLoader().getResource("FZXBSJW.TTF").getPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// 创建一个 Writer 对象
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("itext.pdf"));
// 打开文档
document.open();
// 添加文字
Paragraph paragraph = new Paragraph("Hello, iText!", new com.itextpdf.text.Font(font, 12));
document.add(paragraph);
// 添加图片
PdfContentByte cb = writer.getDirectContent();
com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(PDFGenerator.class.getClassLoader().getResource("example.jpg"));
image.scaleToFit(300, 200);
image.setAbsolutePosition(100, 500);
cb.addImage(image);
// 关闭文档
document.close();
}
}
```
读取 PDF 文件内容代码示例:
```
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
public class PDFReader {
public static void main(String[] args) throws Exception {
// 读取 pdfbox 生成的 PDF 文件
readPdfByPdfbox();
// 读取 iText 生成的 PDF 文件
readPdfByItext();
}
private static void readPdfByPdfbox() throws Exception {
File file = new File("pdfbox.pdf");
PDDocument document = PDDocument.load(file);
PDFTextStripper stripper = new PDFTextStripper();
String content = stripper.getText(document);
System.out.println(content);
document.close();
}
private static void readPdfByItext() throws Exception {
File file = new File("itext.pdf");
PdfReader reader = new PdfReader(file.getPath());
String content = PdfTextExtractor.getTextFromPage(reader, 1);
System.out.println(content);
reader.close();
}
}
```
这样,你就可以使用 pdfbox 和 iText 生成和读取 PDF 文件了。注意:在生成 PDF 文件时,需要引入相应的字体文件,否则中文可能无法正确显示。
阅读全文