当前位置: 代码网 > it编程>编程语言>Java > Java实现swf图片转pdf的示例代码

Java实现swf图片转pdf的示例代码

2026年05月15日 Java 我要评论
pom 依赖<!-- 操作swf文件 --><dependency> <groupid>com.flagstone</groupid> &l

pom 依赖

<!-- 操作swf文件 -->
<dependency>
    <groupid>com.flagstone</groupid>
    <artifactid>transform</artifactid>
    <version>3.0.2</version>
</dependency>
<!-- 操作pdf文件 -->
<dependency>
    <groupid>org.apache.pdfbox</groupid>
    <artifactid>pdfbox</artifactid>
    <version>2.0.27</version>
</dependency>

提取 swf 中的图片

package com.xxx.demo.common.util;

import java.awt.image.bufferedimage;
import java.io.bytearrayinputstream;
import java.io.file;
import java.io.ioexception;
import java.io.inputstream;
import java.net.url;
import java.util.arraylist;
import java.util.list;
import java.util.zip.dataformatexception;

import javax.imageio.imageio;

import com.flagstone.transform.movie;
import com.flagstone.transform.movietag;
import com.flagstone.transform.image.defineimage;
import com.flagstone.transform.image.defineimage2;
import com.flagstone.transform.image.definejpegimage;
import com.flagstone.transform.image.definejpegimage2;
import com.flagstone.transform.image.definejpegimage3;
import com.flagstone.transform.image.definejpegimage4;
import com.flagstone.transform.util.image.bufferedimageencoder;

public final class swfutils {

	private swfutils () {}
	
	public static list<bufferedimage> queryswfimages (final file file) throws dataformatexception, ioexception {
		movie movie = new movie();
		movie.decodefromfile(file);
		return queryswfimages(movie);
	}
	
	public static list<bufferedimage> queryswfimages (final url url) throws dataformatexception, ioexception {
		movie movie = new movie();
		movie.decodefromurl(url);
		return queryswfimages(movie);
	}
	
	public static list<bufferedimage> queryswfimages (final inputstream stream) throws dataformatexception, ioexception {
		movie movie = new movie();
		movie.decodefromstream(stream);
		return queryswfimages(movie);
	}
	
	private static list<bufferedimage> queryswfimages (movie movie) throws dataformatexception, ioexception {
		list<bufferedimage> imagelist = new arraylist<>();
		list<movietag> list = movie.getobjects();
		for (movietag movietag : list) {
			bufferedimage bi = getswfimage(movietag);
			if (bi != null) {
				imagelist.add(bi);
			}
		}
		return imagelist;
	}
	
	private static bufferedimage getswfimage (movietag movietag) throws dataformatexception, ioexception {
		bufferedimage bi = null;
		if (movietag instanceof defineimage) {
			bufferedimageencoder imageencoder = new bufferedimageencoder();
			imageencoder.setimage((defineimage) movietag);
			bi = imageencoder.getbufferedimage();
		} else if (movietag instanceof defineimage2) {
			bufferedimageencoder imageencoder = new bufferedimageencoder();
			imageencoder.setimage((defineimage2) movietag);
			bi = imageencoder.getbufferedimage();
		} else if (movietag instanceof definejpegimage) {
			try (
					bytearrayinputstream bis = new bytearrayinputstream(((definejpegimage) movietag).getimage());
					) {
				bi = imageio.read(bis);
			}
		} else if (movietag instanceof definejpegimage2) {
			try (
					bytearrayinputstream bis = new bytearrayinputstream(((definejpegimage2) movietag).getimage());
					) {
				bi = imageio.read(bis);
			}
		} else if (movietag instanceof definejpegimage3) {
			try (
					bytearrayinputstream bis = new bytearrayinputstream(((definejpegimage3) movietag).getimage());
					) {
				bi = imageio.read(bis);
			}
		} else if (movietag instanceof definejpegimage4) {
			try (
					bytearrayinputstream bis = new bytearrayinputstream(((definejpegimage4) movietag).getimage());
					) {
				bi = imageio.read(bis);
			}
		}
		return bi;
	}

}

多张图片转为 pdf

package com.xxx.demo.common.util;

import java.awt.image.bufferedimage;
import java.io.file;
import java.io.ioexception;
import java.io.outputstream;
import java.util.list;
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.graphics.image.jpegfactory;
import org.apache.pdfbox.pdmodel.graphics.image.pdimagexobject;

public final class pdfutils {

	private pdfutils () {}
	
	public static void image2pdf (list<bufferedimage> imagelist, file outfile) throws ioexception {
		if (imagelist.isempty()) {
			throw new ioexception("image not found");
		}
		try (
				pddocument doc = new pddocument();
				) {
			doc.save(outfile);
			image2pdf(doc, imagelist);
			doc.save(outfile);
		}
	}
	
	public static void image2pdf (list<bufferedimage> imagelist, outputstream out) throws ioexception {
		if (imagelist.isempty()) {
			throw new ioexception("image not found");
		}
		try (
				pddocument doc = new pddocument();
				) {
			image2pdf(doc, imagelist);
			doc.save(out);
		}
	}
	
	
	private static void image2pdf (final pddocument doc, list<bufferedimage> imagelist) throws ioexception {
		doc.setallsecuritytoberemoved(true);
		for (bufferedimage image : imagelist) {
			pdimagexobject pdimage = jpegfactory.createfromimage(doc, image, 0.8f);
			image.flush();
			pdpage page = new pdpage(pdrectangle.a4);
			try (
					pdpagecontentstream contents = new pdpagecontentstream(doc, page);
					) {
				int width = pdimage.getwidth();
				int height = pdimage.getheight();
				float pagewidth = pdrectangle.a4.getwidth();
				float pageheight = pdrectangle.a4.getheight();
				float[] bound = getbound(width, height, pagewidth, pageheight);
				contents.drawimage(pdimage, bound[0], bound[1], bound[2], bound[3]);
			}
			doc.addpage(page);
		}
	}
	
	private static float[] getbound (int width, int height, float pagewidth, float pageheight) {
		float[] bound = new float[] {0.0f, 0.0f, 0.0f, 0.0f};
		float wh = width * 1.0f / height;
		float pwh = pagewidth * 1.0f / pageheight;
		if (math.abs(wh - pwh) < 0.02f) {
			bound[0] = 0.0f;
			bound[1] = 0.0f;
			bound[2] = pagewidth;
			bound[3] = pageheight;
		} else if (wh - pwh > 0) {
			float h = pagewidth / width * height;
			bound[0] = 0.0f;
			bound[1] = math.max(pageheight / 2 - h / 2, 0.0f);
			bound[2] = pagewidth;
			bound[3] = math.min(h, pageheight);
		} else {
			float w = pageheight / height * width;
			bound[0] = math.max(pagewidth / 2 - w / 2, 0.0f);
			bound[1] = 0.0f;
			bound[2] = math.min(w, pagewidth);
			bound[3] = pageheight;
		}
		return bound;
	}

}

swf 中的图片转 pdf

package com.xxx.demo.common.util;

import java.awt.image.bufferedimage;
import java.io.file;
import java.io.ioexception;
import java.io.inputstream;
import java.io.outputstream;
import java.util.list;
import java.util.zip.dataformatexception;

public final class swf2pdfutils {
	
	private swf2pdfutils () {}

	public static void swfimage2pdf (file swffile, file pdffile) throws dataformatexception, ioexception {
		list<bufferedimage> images = swfutils.queryswfimages(swffile);
		pdfutils.image2pdf(images, pdffile);
	}
	
	public static void swfimage2pdf (file swffile, outputstream out) throws dataformatexception, ioexception {
		list<bufferedimage> images = swfutils.queryswfimages(swffile);
		pdfutils.image2pdf(images, out);
	}
	
	public static void swfimage2pdf (inputstream input, file pdffile) throws dataformatexception, ioexception {
		list<bufferedimage> images = swfutils.queryswfimages(input);
		pdfutils.image2pdf(images, pdffile);
	}
	
	public static void swfimage2pdf (inputstream input, outputstream out) throws dataformatexception, ioexception {
		list<bufferedimage> images = swfutils.queryswfimages(input);
		pdfutils.image2pdf(images, out);
	}

}

测试

public static void main(string[] args) throws dataformatexception, ioexception {
	file swfile = new file("d:/ceshi", "dabf077a8c354a74.swf");
	file pdffile = new file("d:/ceshi", "dabf077a8c354a74.pdf");
	swf2pdfutils.swfimage2pdf(swfile, pdffile);
}

到此这篇关于java实现swf图片转pdf的示例代码的文章就介绍到这了,更多相关java swf图片转pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com