最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)swf圖片轉pdf的示例代碼

 更新時間:2026年05月15日 09:35:03   作者:孫690342  
本文介紹了一種將SWF文件中的多張圖片提取并轉換為PDF文件的方法,首先,通過pom依賴提取SWF文件中的圖片,然后將這些圖片轉換為PDF格式,整個過程中,詳細測試了該方法的可行性和有效性,需要的朋友可以參考下

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實現(xiàn)swf圖片轉pdf的示例代碼的文章就介紹到這了,更多相關Java swf圖片轉pdf內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java?多個時間區(qū)間進行合并處理方法

    Java?多個時間區(qū)間進行合并處理方法

    用戶在選擇多個時間區(qū)間之后,如選擇的時間區(qū)間連續(xù)或者有重疊,需要對所選的時間區(qū)間進行合并,這其實是一個區(qū)間合并問題,下面通過本文給大家介紹Java?多個時間區(qū)間進行合并處理的解決方案,一起看看吧
    2024-02-02
  • Spring Boot 3.0升級指南

    Spring Boot 3.0升級指南

    這篇文章主要為大家介紹了Spring Boot 3.0升級指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java getParameter()獲取數(shù)據(jù)為空的問題

    Java getParameter()獲取數(shù)據(jù)為空的問題

    這篇文章主要介紹了Java getParameter()獲取數(shù)據(jù)為空的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中ZIP文件中文亂碼問題的解決指南

    Java中ZIP文件中文亂碼問題的解決指南

    文章介紹Java文件壓縮解壓中處理中文亂碼的解決方案,包括指定UTF-8編碼、使用緩沖流及Ant工具配置,確保文件名和內容正確顯示,避免因字符集不一致導致的亂碼問題,本文結合示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Java 使用多線程調用類的靜態(tài)方法的示例

    Java 使用多線程調用類的靜態(tài)方法的示例

    這篇文章主要介紹了Java 使用多線程調用類的靜態(tài)方法的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • java中synchronized Lock(本地同步)鎖的8種情況

    java中synchronized Lock(本地同步)鎖的8種情況

    本文主要介紹了java中synchronized Lock(本地同步)鎖的8種情況,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java生成動態(tài)版驗證碼的方法實例

    Java生成動態(tài)版驗證碼的方法實例

    這篇文章主要給大家介紹了利用Java生成動態(tài)版驗證碼的方法實例,本文生成的是GIF格式 + 干擾元素,讓驗證碼破解難度又上了一個層次,文中給出了詳細的示例代碼,并在文末給出了完整的實例代碼供大家下載學習,需要的朋友們下面來一起看看吧。
    2017-04-04
  • java 中ArrayList迭代的兩種實現(xiàn)方法

    java 中ArrayList迭代的兩種實現(xiàn)方法

    這篇文章主要介紹了java 中ArrayList迭代的兩種實現(xiàn)方法的相關資料,Iterator與for語句的結合,需要的朋友可以參考下
    2017-09-09
  • Java實踐練習輕松幾行實現(xiàn)追書神器

    Java實踐練習輕松幾行實現(xiàn)追書神器

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個追書神器,用技術改變生活,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • JSP安全開發(fā)之XSS漏洞詳解

    JSP安全開發(fā)之XSS漏洞詳解

    XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意腳本代碼,而程序對于用戶輸入內容未過濾,當用戶瀏覽該頁之時,嵌入其中Web里面的腳本代碼會被執(zhí)行,從而達到惡意攻擊用戶的特殊目的。
    2016-09-09

最新評論

廉江市| 开远市| 基隆市| 时尚| 旬邑县| 舞钢市| 交口县| 鹰潭市| 渝北区| 尚义县| 信阳市| 沂南县| 久治县| 白城市| 彭山县| 鹿泉市| 青阳县| 遵义市| 乌鲁木齐市| 淮滨县| 垦利县| 吐鲁番市| 黄山市| 肇庆市| 桃江县| 曲水县| 邯郸县| 盘锦市| 衡东县| 威远县| 堆龙德庆县| 长汀县| 漳州市| 鞍山市| 梨树县| 扎兰屯市| 扶余县| 玛曲县| 叶城县| 达日县| 仁怀市|