obo
1 year ago
4 changed files with 108 additions and 0 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