Browse Source

REPORT-103847 单测

bugfix/11.0
obo 1 year ago
parent
commit
f07bced888
  1. 108
      fine-itext-old/test/com/fr/third/com/lowagie/text/ImageTest.java
  2. BIN
      fine-itext-old/test/com/fr/third/com/lowagie/text/actual.pdf
  3. BIN
      fine-itext-old/test/com/fr/third/com/lowagie/text/expect.pdf
  4. BIN
      fine-itext-old/test/com/fr/third/com/lowagie/text/transparent_image.png

108
fine-itext-old/test/com/fr/third/com/lowagie/text/ImageTest.java

@ -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;
}
}

BIN
fine-itext-old/test/com/fr/third/com/lowagie/text/actual.pdf

Binary file not shown.

BIN
fine-itext-old/test/com/fr/third/com/lowagie/text/expect.pdf

Binary file not shown.

BIN
fine-itext-old/test/com/fr/third/com/lowagie/text/transparent_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Loading…
Cancel
Save