using QuestPDF.ConformanceTests.TestEngine; using QuestPDF.Drawing; using QuestPDF.Fluent; using QuestPDF.Helpers; using QuestPDF.Infrastructure; namespace QuestPDF.ConformanceTests; internal class ImageTests : ConformanceTestBase { [OneTimeSetUp] public void Setup() { // PDF/A-1a and PDF/A-1b require ICC profile version 2 // prepare an image with ICC profile version 2 var sourceImagePath = Path.Combine("Resources", "photo.jpeg"); var targetImagePath = Path.Combine("Resources", "photo-icc2.jpeg"); ImageHelpers.ConvertImageIccColorSpaceProfileToVersion2(sourceImagePath, targetImagePath); } protected override Document GetDocumentUnderTest() { var useImageWithIcc2 = TestContext.CurrentContext.Test.Arguments.FirstOrDefault() is PDFA_Conformance.PDFA_1A or PDFA_Conformance.PDFA_1B; var imagePath = useImageWithIcc2 ? Path.Combine("Resources", "photo-icc2.jpeg") : Path.Combine("Resources", "photo.jpeg"); var imageData = File.ReadAllBytes(imagePath); return Document .Create(document => { document.Page(page => { page.Margin(60); page.Content() .PaddingVertical(30) .Column(column => { column.Spacing(25); column.Item() .SemanticHeader1() .Text("Conformance Test: Images") .FontSize(24) .Bold() .FontColor(Colors.Blue.Darken2); column.Item() .Width(300) .SemanticImage("Sample image description") .Column(column => { column.Item().Image(imageData); column.Item().PaddingTop(5).AlignCenter().SemanticCaption().Text("Sample image caption"); }); }); }); }); } protected override SemanticTreeNode? GetExpectedSemanticTree() { return ExpectedSemanticTree.DocumentRoot(root => { root.Child("H1", h1 => h1.Alt("Conformance Test: Images")); root.Child("Figure", figure => { figure.Alt("Sample image description"); figure.Child("Caption", caption => caption.Child("P")); }); }); } }