iText是一种生成PDF报表的Java组件,通过iText不仅可以生成pdf文件,而且可以将xml、html文件转换为pdf文件。
生成PDF文件
//Step 1—Create a Document.
Document document = new Document();
//Step 2—Get a PdfWriter instance.
PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createSamplePDF.pdf"));
//Step 3—Open the Document.
document.open();
//Step 4—Add content.
document.add(new Paragraph("Hello World"));
//Step 5—Close the Document.
document.close();
页面大小、背景颜色、页边留白(Title,Author,Subject,Keywords )
//页面大小
Rectangle rect = new Rectangle(PageSize.B5.rotate());
//页面背景色
rect.setBackgroundColor(BaseColor.ORANGE);
Document doc = new Document(rect);
PdfWriter writer = PdfWriter.getInstance(doc, out);
//PDF版本(默认1.4)
writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2);
//文档属性
doc.addTitle("Title@sample");
doc.addAuthor("Author@rensanning");
doc.addSubject("Subject@iText sample");
doc.addKeywords("Keywords@iText");
doc.addCreator("Creator@iText");
//页边空白
doc.setMargins(10, 20, 30, 40);
doc.open();
doc.add(new Paragraph("Hello World"));
将pdf转换为图片
public static boolean pdf2Image(File sourceFile, File destFile) {
try {
if (sourceFile.exists()) {
PDDocument doc = PDDocument.load(sourceFile);
int pageCount = doc.getPageCount();
List pages = doc.getDocumentCatalog().getAllPages();
PDPage page = (PDPage) pages.get(0);
BufferedImage image = page.convertToImage();
ImageIO.write(image, "JPG", destFile);
return true;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
向pdf文件中添加图片
public void pdfAddImage(String lemoImage, String sorcePdf, String newPdf)
throws FileNotFoundException, DocumentException, IOException {
PdfReader reader = new PdfReader(sorcePdf);
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(newPdf));
// 添加图片
Image img = Image.getInstance(lImage);
img.setAlignment(Element.ALIGN_LEFT);
Document doc = new Document(reader.getPageSize(1));
img.scaleAbsolute(img.getWidth() / 4, img.getHeight() / 4);
img.setAbsolutePosition(20, 800);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
PdfContentByte under = stamp.getOverContent(i);
PdfContentByte under1 = under;
PdfContentByte under2 = under;
under.addImage(img);
BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
// 链接左下角
under.beginText();
under.setFontAndSize(bf, 13);
under.showTextAligned(Element.ALIGN_LEFT, "http://baidu.com/", 20, 10, 0);
under.endText();
// 页码,右下角
under2.saveState();
under2.beginText();
under2.setFontAndSize(bf, 10);
float y = doc.bottom(-20);
under2.showTextAligned(PdfContentByte.ALIGN_RIGHT, i + "", doc.right(), y, 0);
under2.endText();
under2.restoreState();
// 链接放置在图片位置,透明
PdfGState gs = new PdfGState();
gs.setFillOpacity(0);// 设置透明度为0.8
under1.setGState(gs);
under1.beginText();
under1.setFontAndSize(bf, 13);
under1.showTextAligned(Element.ALIGN_LEFT, "http://baidu.com/", 20, 805, 0);
under1.endText();
}
stamp.close();
reader.close();
}