java操作PDF文件 -- iText

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();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值