一、Java八股文PDF入門
Java開發工程師必須要熟悉的一項技能就是能夠編寫PDF文檔。本篇文章將會通過Java八股文PDF來讓大家深入了解PDF相關知識。
1、Java操作PDF的準備
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
public class CreatePDF {
public static void main(String[] args) throws FileNotFoundException, IOException {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
doc.save(new FileOutputStream(new File("hello.pdf")));
doc.close();
}
}
上述代碼使用Apache PDFBox來創建一個名為「hello.pdf」的PDF文檔。首先需要在代碼中引入Apache PDFBox相關庫,然後創建一個PDDocument對象,再創建一個PDPage對象,並將PDPage加入PDDocument中,最後保存PDF文檔文件,並關閉PDDocument。
2、添加內容到PDF中
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class AddContentPDF {
public static void main(String args[]) throws IOException {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 16);
contentStream.newLineAtOffset(250, 700);
contentStream.setNonStrokingColor(Color.BLUE);
contentStream.showText("Java八股文PDF");
contentStream.endText();
contentStream.close();
doc.save(new File("addcontent.pdf"));
doc.close();
}
}
上述代碼創建了一個PDF文檔,並將文本內容添加進去。使用PDPageContentStream對象來創建文本並繪製到頁面上。在PDF中,使用三種顏色:stroking、non-stroking和text,文本顏色使用nmnon-Stroking Color屬性設置。使用PDType1Font設置文本大小和字體樣式。contentStream.newLineAtOffset()使用x和y偏移量來確定文本位置。
二、高級Java八股文PDF
本節將介紹如何使用Java八股文PDF實現更高級的PDF文檔功能,如添加表格、圖片以及注釋等。
1、添加表格
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStreamEditor;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
public class AddTablePDF {
public static void main(String args[]) throws IOException{
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStreamEditor(document, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 16);
contentStream.newLineAtOffset(90,700);
contentStream.showText("Java八股文PDF表格");
contentStream.endText();
float[] columnWidths = {150f, 50f, 50f,50f,50f,50f,50f,50f};
float table_width = 0;
for (float columnWidth : columnWidths) {
table_width += columnWidth;
}
PDExtendedGraphicsState gs = new PDExtendedGraphicsState();
gs.setLineWidth(0.5f);
gs.setRenderingIntent(RenderingIntent.RelativeColorimetric);
contentStream.setGraphicsStateParameters(gs);
PDFormXObject table = TableDrawer.createTable(document, page, contentStream, 8, columnWidths, 90, 550);
contentStream.drawXObject(table, 50, 700);
contentStream.close();
document.save(new File("addtable.pdf"));
document.close();
}
}
上述代碼創建了一個包含表格的PDF文檔。使用PDFBox提供的PDPageContentStreamEditor類,可以通過「setGraphicsStateParameters」方法來設置表格的線寬和渲染顏色。使用「createTable」方法創建需要的表格,並將其繪製在指定位置。
2、添加圖片
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class AddImagePDF {
public static void main(String[] args) throws IOException {
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document, page);
BufferedImage image = ImageIO.read(new File("image.jpg"));
PDImageXObject ximage = LosslessFactory.createFromImage(document, image);
content.drawImage(ximage, 100, 300);
content.close();
document.save(new File("addimage.pdf"));
document.close();
}
}
上述代碼將圖片文件讀入內存,轉換成PDF的PDImageXObject格式,並使用「drawImage」方法添加圖片到PDF文檔中。
3、添加註釋
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStreamEditor;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationText;
public class AddAnnotationPDF {
public static void main(String[] args) throws IOException {
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStreamEditor(document, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 16);
contentStream.newLineAtOffset(90, 700);
contentStream.showText("Java八股文PDF注釋");
contentStream.endText();
PDAnnotationText txtAnnotation = new PDAnnotationText();
txtAnnotation.setContents("這是一條注釋");
txtAnnotation.setReadOnly(true);
txtAnnotation.setContentsLocked(true);
txtAnnotation.setLocked(true);
txtAnnotation.setRectangle(new PDRectangle(400, 740, 100, 30));
//添加註釋到頁面
page.getAnnotations().add(txtAnnotation);
contentStream.close();
document.save(new File("addannotation.pdf"));
document.close();
}
}
上述代碼使用PDAnnotationText類實現了在PDF中添加註釋的功能。使用setContents()方法指定注釋的具體內容,並且通過setRectangle()設置注釋的位置。在代碼中,使用getAnnotations()方法獲取頁面的注釋列表,並把當前注釋添加到注釋列表中。
結語
Java八股文PDF是Java開發中重要的一部分,在實踐中可以發現,PDFBox是推薦使用的PDF操作庫。在使用Java八股文PDF時,你可以實現很多高級的功能,如表格、圖片和注釋等等,這些都可以讓你的PDF文檔更加完美。我們希望這篇文章對於Java開發者業務背景下的PDF操作有所幫助。
原創文章,作者:DKMPY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/360920.html
微信掃一掃
支付寶掃一掃