java : word,excel,img,ppt各种文档转换pdf格式以流方式

前提:

面对各种文件转换pdf格式,我下面写的都是一些方法,其中每个方法都以流的方式进行参数的传递。

工具类主体:

package com.win.dfas.file.util;

import cn.hutool.core.util.StrUtil;
import com.aspose.words.*;
import com.aspose.words.HeaderFooter;
import com.aspose.words.HorizontalAlignment;
import com.aspose.words.Paragraph;
import com.aspose.words.Section;
import com.aspose.words.VerticalAlignment;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.awt.*;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;
import java.util.List;

public final class PdfConverUtil {
    
    

//  这里放下面的方法
xxxx...

}

img(png)转换pdf:

   /**
	 * @param inputStream  源文件输入流
	 * @param outputStream pdf文件输出流
   **/
   public static boolean imgToPdf(InputStream inputStream, OutputStream outputStream) {
    
    

		Document document = null;

		try {
    
    

			// 创建文档
			document = new Document(PageSize.A4, 20, 20, 20, 20);

            // 新建pdf文档,具体逻辑看.getInstance方法
			PdfWriter.getInstance(document, outputStream);

			document.open();
			document.newPage();

			// 将文件流转换为字节流,便于格式转换
			BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
			byte[] bytes = new byte[1024];
			int length = 0 ;
			while (-1 != (length = bufferedInputStream.read(bytes))) {
    
    
				byteArrayOutputStream.write(bytes, 0, length);
			}

            // 处理img图片
			Image image = Image.getInstance(byteArrayOutputStream.toByteArray());

			float height = image.getHeight();
		    float width = image.getWidth();

		    float percent = 0.0f;
		    if (height > width) {
    
    
		      percent = PageSize.A4.getHeight() / height * 100;
		    } else {
    
    
		      percent = PageSize.A4.getWidth() / width * 100;
		    }

		    image.setAlignment(Image.MIDDLE);
		    image.scalePercent(percent);

            // 将图片放入文档中,完成pdf转换
		    document.add(image);
		} catch (Exception e) {
    
    
			e.printStackTrace();
			return false;
		} finally {
    
    
			try {
    
    
				if (document != null) {
    
    
					document.close();
				}
			} catch (Exception e) {
    
    
				e.printStackTrace();
			}
		}

		return true;
	}

word(doc/docx)转换pdf:

   /**
	 * @param inputStream  源文件输入流
	 * @param outputStream pdf文件输出流
   **/
public static boolean wordTopdfByAspose(InputStream inputStream, OutputStream outputStream) {
    
    

		// 验证License 若不验证则转化出的pdf文档会有水印产生
		if (!getLicense()) {
    
    
            return false;
        }
        try {
    
    
			// 将源文件保存在com.aspose.words.Document中,具体的转换格式依靠里面的save方法
            com.aspose.words.Document doc = new com.aspose.words.Document(inputStream);

			// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换
            doc.save(outputStream, SaveFormat.PDF);


		} catch (Exception e) {
    
    
            e.printStackTrace();
            return false;
        }finally {
    
    
            if (outputStream != null) {
    
    
                try {
    
    
                    outputStream.flush();
                    outputStream.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
        return true;

	}

    // 官方文档的要求 无需理会
	public static boolean getLicense() {
    
    
        boolean result = false;
        try {
    
    
        	String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";
	    	ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return result;
    }

excel(xlsx)转换pdf:

   /**
	 * @param inputStream  源文件输入流
	 * @param outputStream pdf文件输出流
   **/
	public static boolean excelToPdf(InputStream inputStream, OutputStream outputStream) {
    
    

		XSSFWorkbook workbook = null;

		Document document = null;

		try {
    
    

			workbook = new XSSFWorkbook(inputStream);

            // 创建文档
			document = new Document();
              
            // 新建pdf文件
			PdfWriter.getInstance(document, outputStream);
			
			document.open();

            // 以下都是处理excel表格转换pdf需要的步骤
			BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
			Font font = new Font(baseFont, 10, Font.NORMAL);

			int sheets = workbook.getNumberOfSheets();

			for (int i = 0; i < sheets; i++) {
    
    
				XSSFSheet sheet = workbook.getSheetAt(i);

				int cells = 0;

				if(null != sheet.getRow(sheet.getFirstRowNum())) {
    
    
					cells = sheet.getRow(sheet.getFirstRowNum()).getLastCellNum();
				}

				if (cells == 0) {
    
    
					continue;
				}

				PdfPTable pdfPTable = new PdfPTable(cells);

				PdfPCell pdfPCell = null;

				Iterator<Row> rowIterator = sheet.iterator();

				while (rowIterator.hasNext()) {
    
    
					Row row = rowIterator.next();
					Iterator<Cell> cellIterator = row.cellIterator();

					while(cellIterator.hasNext()) {
    
    
						Cell cell = cellIterator.next();

						CellType cellType = cell.getCellType();

						if (cellType == CellType.NUMERIC) {
    
    
							pdfPCell = new PdfPCell(new Phrase(cell.getNumericCellValue() + StrUtil.EMPTY));
						} else if (cellType == CellType.STRING) {
    
    
							pdfPCell = new PdfPCell(new Phrase(cell.getStringCellValue(), font));
						}

	              		pdfPTable.addCell(pdfPCell);
					}
				}
				
				document.add(pdfPTable);
			}


		} catch (Exception e) {
    
    
			e.printStackTrace();
			return false;
		} finally {
    
    
			try {
    
    
				if (document != null) {
    
    
					document.close();
				}
				if (workbook != null) {
    
    
					workbook.close();
				}
			} catch (IOException e) {
    
    
				e.printStackTrace();
			}
		}
		return true;
	}

ppt(ppt/pptx)转换pdf:

   /**
	 * @param inputStream  源文件输入流
	 * @param outputStream pdf文件输出流
   **/
	public static boolean pptToPdf(InputStream inputStream, OutputStream outputStream) {
    
    

		Document document = null;

		XMLSlideShow slideShow = null;

		PdfWriter pdfWriter = null;

		try {
    
    
			slideShow = new XMLSlideShow(inputStream);

			Dimension dimension = slideShow.getPageSize();

			document = new Document();

            // 新建pdf文件
			pdfWriter = PdfWriter.getInstance(document, outputStream);

			document.open();

			PdfPTable pdfPTable = new PdfPTable(1);

			List<XSLFSlide> slideList = slideShow.getSlides();

			for (int i = 0, row = slideList.size(); i < row; i++) {
    
    

				XSLFSlide slide = slideList.get(i);

				// 设置字体, 解决中文乱码
				for (XSLFShape shape : slide.getShapes()) {
    
    
					XSLFTextShape textShape = (XSLFTextShape) shape;

					for (XSLFTextParagraph textParagraph : textShape.getTextParagraphs()) {
    
    
						for (XSLFTextRun textRun : textParagraph.getTextRuns()) {
    
    
							textRun.setFontFamily("宋体");
						}
					}
				}

				BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB);

				Graphics2D graphics2d = bufferedImage.createGraphics();

				graphics2d.setPaint(Color.white);
				graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12));

				slide.draw(graphics2d);

				graphics2d.dispose();

				Image image = Image.getInstance(bufferedImage, null);
				image.scalePercent(50f);

				// 写入单元格
				pdfPTable.addCell(new PdfPCell(image, true));
				document.add(image);
			}
		} catch (Exception e) {
    
    
			e.printStackTrace();
			return false;
		} finally {
    
    
			try {
    
    
				if (document != null) {
    
    
					document.close();
				}
				if (pdfWriter != null) {
    
    
					pdfWriter.close();
				}
			} catch (Exception e) {
    
    
				e.printStackTrace();
			}
		}

		return true;
	}

猜你喜欢

转载自blog.csdn.net/qq_41831842/article/details/115316928
今日推荐