Yuan.Wang
1 year ago
5 changed files with 127 additions and 1 deletions
@ -0,0 +1,108 @@ |
|||||||
|
import com.fr.third.com.lowagie.text.Document; |
||||||
|
import com.fr.third.com.lowagie.text.RectangleReadOnly; |
||||||
|
import com.fr.third.com.lowagie.text.pdf.PdfContentByte; |
||||||
|
import com.fr.third.com.lowagie.text.pdf.PdfGraphics2D; |
||||||
|
import com.fr.third.com.lowagie.text.pdf.PdfTemplate; |
||||||
|
import com.fr.third.com.lowagie.text.pdf.PdfWriter; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.Assert; |
||||||
|
|
||||||
|
import javax.imageio.ImageIO; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.File; |
||||||
|
import java.io.FileOutputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.nio.file.Files; |
||||||
|
import java.util.Arrays; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Image单元测试类 |
||||||
|
* 不在打包范围内,只是留个凭证,需要自己添加junit 依赖才能跑 |
||||||
|
* |
||||||
|
* @author obo |
||||||
|
* @since 11.0 |
||||||
|
* Created on 2023/9/6 |
||||||
|
*/ |
||||||
|
public class ITextDrawPdfImageTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void testDrawOpaqueAndTransparentImage() throws Exception { |
||||||
|
// 创建文档对象
|
||||||
|
Document document = new Document(new RectangleReadOnly(90,90)); |
||||||
|
// 创建PdfWriter以将文档写入文件
|
||||||
|
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("actual.pdf")); |
||||||
|
BufferedImage image = ImageIO.read(new File("transparent_image.png")); |
||||||
|
|
||||||
|
Assert.assertTrue(checkImageValid(image)); |
||||||
|
|
||||||
|
// 打开文档
|
||||||
|
document.open(); |
||||||
|
|
||||||
|
// 获取PdfContentByte用于在PDF页面上绘制内容
|
||||||
|
PdfContentByte contentByte = writer.getDirectContent(); |
||||||
|
|
||||||
|
// 创建PdfTemplate,作为图形容器
|
||||||
|
PdfTemplate template = contentByte.createTemplate(90, 90); |
||||||
|
PdfGraphics2D graphics2D = (PdfGraphics2D) template.createGraphics(90, 90); |
||||||
|
|
||||||
|
// 在Graphics2D上绘制图像或其他内容
|
||||||
|
graphics2D.drawImage(image, 0, 0, null); |
||||||
|
|
||||||
|
// 释放Graphics2D资源
|
||||||
|
graphics2D.dispose(); |
||||||
|
|
||||||
|
// 将PdfTemplate添加到PDF页面
|
||||||
|
contentByte.addTemplate(template, 0, 0); // X, Y 坐标
|
||||||
|
// 关闭文档
|
||||||
|
document.close(); |
||||||
|
|
||||||
|
File actual = new File("actual.pdf"); |
||||||
|
File expect = new File("expect.pdf"); |
||||||
|
|
||||||
|
Assert.assertTrue(checkFilesEqual(actual, expect)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private boolean checkFilesEqual(File actual, File expect) throws IOException { |
||||||
|
byte[] actualBytes = Arrays.copyOfRange(Files.readAllBytes(actual.toPath()), 0, 1024); |
||||||
|
byte[] expectBytes = Arrays.copyOfRange(Files.readAllBytes(expect.toPath()), 0, 1024); |
||||||
|
|
||||||
|
return java.util.Arrays.equals(actualBytes, expectBytes); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 检查Image是否是一种完全透明颜色+一种完全不透明颜色构成的 |
||||||
|
*/ |
||||||
|
private boolean checkImageValid(BufferedImage image) { |
||||||
|
int transparentColor = -1, unTransparentColor = -1; |
||||||
|
|
||||||
|
int width = image.getWidth(); |
||||||
|
int height = image.getHeight(); |
||||||
|
|
||||||
|
for (int x = 0; x < width; x++) { |
||||||
|
for (int y = 0; y < height; y++) { |
||||||
|
int rgb = image.getRGB(x, y); |
||||||
|
int alpha = (rgb >> 24) & 0xFF; |
||||||
|
int color = rgb & 0xFFFFFF; |
||||||
|
if(alpha == 0) { |
||||||
|
if (transparentColor == -1) { |
||||||
|
transparentColor = color; |
||||||
|
} else if (transparentColor != color) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
if(alpha == 255) { |
||||||
|
if (unTransparentColor == -1) { |
||||||
|
unTransparentColor = color; |
||||||
|
} else if (unTransparentColor != color) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 247 B |
Loading…
Reference in new issue