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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论