Java aspose.words转图片,追加内容

 Aspose.words版本19.5

import com.aspose.words.*;
import com.google.common.io.Files;
import lombok.SneakyThrows;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.Shape;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;


/**
 * @author ninge
 * @version
 */
public class AsposeUtil {

	/**
	 * licence 验证
	 *
	 * @return
	 * @throws Exception
	 */
	public static boolean getLicense() throws Exception {
		boolean result = false;
		try {
			InputStream is = AsposeUtil.class
				.getResourceAsStream("/aspose/license.xml");
			License aposeLic = new License();
			aposeLic.setLicense(is);
			result = true;
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
		return result;
	}


	/**
	 * 判断是否为空
	 *
	 * @param obj 字符串对象
	 * @return
	 */
	protected static boolean notNull(String obj) {
		if (obj != null && !obj.equals("") && !obj.equals("undefined")
			&& !obj.trim().equals("") && obj.trim().length() > 0) {
			return true;
		}
		return false;
	}


	/**
	 * @Description: word和txt文件转换图片
	 */
	public static List<BufferedImage> wordToImg(InputStream inputStream, int pageNum) throws Exception {
		OutputStream output=null;
		List<BufferedImage> imageList = new ArrayList<BufferedImage>();
		try {
			Document doc = new Document(inputStream);
			ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);
			options.setPrettyFormat(true);
			options.setUseAntiAliasing(true);
			options.setUseHighQualityRendering(true);
			int pageCount = doc.getPageCount();
			if (pageCount > pageNum&&pageNum!=0) {//生成前pageCount张
				pageCount = pageNum;
			}
			for (int i = 0; i < pageCount; i++) {
				//doc.save("",options);

				output = new ByteArrayOutputStream();
				options.setPageIndex(i);
				doc.save(output, options);
				ImageInputStream imageInputStream=  ImageIO.createImageInputStream(parse(output));
				imageList.add(ImageIO.read(imageInputStream));
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}finally {
			output.close();
		}
		return imageList;
	}
	public static void singleImg(BufferedImage bufferedImage) throws IOException {
		Graphics2D  g2 = (Graphics2D) bufferedImage.getGraphics();
		g2.setBackground(Color.LIGHT_GRAY);
		g2.clearRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());
		g2.setPaint(Color.RED);
		ImageIO.write(bufferedImage,"jpg",new File("/Users/ninge/Desktop/output/"+ UUID.randomUUID()+".jpg"));

	}

	//outputStream转inputStream
	public static ByteArrayInputStream parse(OutputStream out) throws Exception {
		ByteArrayOutputStream baos = (ByteArrayOutputStream) out;
		ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());
		baos.close();
		swapStream.close();
		return swapStream;
	}

	/**
	 * word转图片输入流
	 * @param inputStream
	 * @param pageNum
	 * @return
	 */
	@SneakyThrows
	public static List<ImageInputStream> getImageInputStreamList(InputStream inputStream,Integer pageNum){
		// 验证License
		if (!getLicense()) {
			return null;
		}
		OutputStream output=null;
		List<ImageInputStream> imageList = new ArrayList<ImageInputStream>();
		try {
			Document doc = new Document(inputStream);
			ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);
			options.setPrettyFormat(true);
			options.setUseAntiAliasing(true);
			options.setUseHighQualityRendering(true);
			int pageCount = doc.getPageCount();
			if (pageCount > pageNum&&pageNum!=0) {//生成前pageCount张
				pageCount = pageNum;
			}
			for (int i = 0; i < pageCount; i++) {
				output = new ByteArrayOutputStream();
				options.setPageIndex(i);
				doc.save(output, options);
				ImageInputStream imageInputStream=  ImageIO.createImageInputStream(parse(output));
				imageList.add(imageInputStream);
				imageInputStream.close();
			}
			output.close();
			inputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return imageList;

	}

	/**
	 * doc to pdf
	 *
	 * @param docPath doc源文件
	 * @param pdfPath pdf目标文件
	 */
	public static void doc2PDF(String docPath, String pdfPath) {
		try {
			// 验证License
			if (!getLicense()) {
				return;
			}

			if (notNull(docPath) && notNull(pdfPath)) {
				File file = new File(pdfPath);
				FileOutputStream os = new FileOutputStream(file);
				Document doc = new Document(docPath);

				doc.save(os, SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 合并任数量的图片成一张图片
	 *
	 * @param isHorizontal true代表水平合并,fasle代表垂直合并
	 * @param imgs         待合并的图片数组
	 * @return
	 * @throws IOException
	 */
	public static BufferedImage mergeImage(boolean isHorizontal, List<BufferedImage> imgs) throws IOException {
		// 生成新图片
		BufferedImage destImage = null;
		// 计算新图片的长和高
		int allw = 0, allh = 0, allwMax = 0, allhMax = 0;
		// 获取总长、总宽、最长、最宽
		for (int i = 0; i < imgs.size(); i++) {
			BufferedImage img = imgs.get(i);
			allw += img.getWidth();

			if (imgs.size() != i + 1) {
				allh += img.getHeight() + 5;
			} else {
				allh += img.getHeight();
			}


			if (img.getWidth() > allwMax) {
				allwMax = img.getWidth();
			}
			if (img.getHeight() > allhMax) {
				allhMax = img.getHeight();
			}
		}
		// 创建新图片
		if (isHorizontal) {
			destImage = new BufferedImage(allw, allhMax, BufferedImage.TYPE_INT_RGB);
		} else {
			destImage = new BufferedImage(allwMax, allh, BufferedImage.TYPE_INT_RGB);
		}
		Graphics2D g2 = (Graphics2D) destImage.getGraphics();
		g2.setBackground(Color.LIGHT_GRAY);
		g2.clearRect(0, 0, allw, allh);
		g2.setPaint(Color.RED);

		// 合并所有子图片到新图片
		int wx = 0, wy = 0;
		for (int i = 0; i < imgs.size(); i++) {
			BufferedImage img = imgs.get(i);
			int w1 = img.getWidth();
			int h1 = img.getHeight();
			// 从图片中读取RGB
			int[] ImageArrayOne = new int[w1 * h1];
			ImageArrayOne = img.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行扫描图像中各个像素的RGB到数组中
			if (isHorizontal) { // 水平方向合并
				destImage.setRGB(wx, 0, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB
			} else { // 垂直方向合并
				destImage.setRGB(0, wy, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB
			}
			wx += w1;
			wy += h1 + 5;
		}


		return destImage;
	}

	/**
	 * 将BufferedImage转换为InputStream
	 * @param image
	 * @return
	 */
	public static InputStream bufferedImageToInputStream(BufferedImage image){
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		try {
			ImageIO.write(image, "png", os);
			InputStream input = new ByteArrayInputStream(os.toByteArray());
			return input;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 追加红头
	 * @param title 标题
	 * @param no 文号
	 * @param inputStream 阿里云下载文件的流
	 * @return
	 * @throws Exception
	 */
	public static InputStream appendRedContent(String title,String no,InputStream inputStream) throws Exception {
		// 验证License
		if (!getLicense()) {
			return null;
		}
		Document doc = new Document(inputStream);
		inputStream.close();
		DocumentBuilder builder = new DocumentBuilder(doc);
//		Font font = builder.getFont();
//		font.setSize(26);//设置字大小
//		font.setBold(true);
//		font.setColor(Color.RED);
//		font.setName("宋体");
		//font.setUnderline(Underline.DASH);
		//builder.getParagraphFormat().getAlignment()=PageVerticalAlignment.CENTER;

		//builder.writeln(title);//追加标题
//		font.setSize(16);
//		font.setColor(Color.BLACK);
		//追加表格 o(╥﹏╥)o
//		builder.startTable();
//		builder.insertCell();
//
//		builder.endRow();
//		builder.endTable();
		//builder.writeln(no);//追加文号
		//builder.insertBreak(BreakType.LINE_BREAK);
		//builder.insertImage(AsposeUtil.class.getResourceAsStream("/static/red_line.png"));
//		builder.insertHtml("<table style=\"border:0px;width:560px;text-align:center;\" >" +
//			"<tr>" +
//			"<td style=\"font-size:30px;font-weight:bold;color:red;\">"+title+"</td>" +
//			"</tr>" +
//			"<tr>" +
//			"<td style=\"font-size:20px;font-weight:bold;border-bottom:red solid 3px;line-height:30px\">"+no+"</td>" +
//			"</tr>" +
//			"</table><br/>",true);
		builder.insertHtml("<div style=\"text-align:center;border-bottom:3px solid  red;\">" +
			"<span style=\"font-size:35px;color:red;display:block;\">"+title+"</span>" +
			"<span style=\"font-size:25px;\">"+no+"</span>" +
			"</div><br/>");
		ByteArrayOutputStream dstStream = new ByteArrayOutputStream();
		doc.save(dstStream, SaveFormat.DOCX);
		inputStream=new ByteArrayInputStream(dstStream.toByteArray());
		dstStream.close();
		return inputStream;
	}

public static void main(String agrs[]){


        //本地word追加开始,只在word文档最开头最佳
		File file = new File("/Users/ninge/Desktop/spmk.docx");
		InputStream inputStream= appendRedContent("sss","桥通天下〔2020〕12 号",new FileInputStream(file));
		byte[] buffer = new byte[inputStream.available()];
		inputStream.read(buffer);
		File targetFile = new File("/Users/ninge/Desktop/spmk1.docx");
		Files.write(buffer, targetFile);
		inputStream.close();
		//本地word追加结束
        //转图片
        file = new File("/Users/ninge/Desktop/spmk1.docx");
	    inputStream = new FileInputStream(file);
	    List<BufferedImage> wordToImg = wordToImg(inputStream,0);
	    BufferedImage mergeImage = mergeImage(true, wordToImg);

	    ImageIO.write(mergeImage, "jpg", new File("/Users/ninge/Desktop/"+                             
        UUID.randomUUID()+".jpg"));
        

    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值