@@ -46,37 +46,33 @@ This file is part of the iText (R) project.
4646import com .itextpdf .html2pdf .resolver .resource .HtmlResourceResolver ;
4747import com .itextpdf .kernel .pdf .xobject .PdfXObject ;
4848import com .itextpdf .kernel .utils .CompareTool ;
49- import com .itextpdf .styledxmlparser .resolver .resource .ResourceResolver ;
5049import com .itextpdf .svg .exceptions .SvgLogMessageConstant ;
5150import com .itextpdf .test .ExtendedITextTest ;
5251import com .itextpdf .test .annotations .LogMessage ;
5352import com .itextpdf .test .annotations .LogMessages ;
5453import com .itextpdf .test .annotations .type .IntegrationTest ;
55-
56- import java .io .*;
57- import java .nio .channels .FileLock ;
58-
5954import org .junit .Assert ;
6055import org .junit .BeforeClass ;
6156import org .junit .Ignore ;
6257import org .junit .Test ;
6358import org .junit .experimental .categories .Category ;
6459
60+ import java .io .File ;
61+ import java .io .FileInputStream ;
62+ import java .io .FileOutputStream ;
63+ import java .io .IOException ;
64+
6565@ Category (IntegrationTest .class )
6666public class ResourceResolverTest extends ExtendedITextTest {
6767
6868 public static final String sourceFolder = "./src/test/resources/com/itextpdf/html2pdf/ResourceResolverTest/" ;
6969
7070 public static final String destinationFolder = "./target/test/com/itextpdf/html2pdf/ResourceResolverTest/" ;
7171
72- private final String bLogoIncorrect = "data:image/png;base,iVBORw0KGgoAAAANSUhEUgAAAVoAAAAxCAMAAACsy5FpAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURQAAAPicJAdJdQdJdQdJdficJjBUbPicJgdJdQdJdficJficJQdJdficJlrFe50AAAAMdFJOUwCBe8I/Phe+65/saIJg0K4AAAMOSURBVHja7ZvbmqsgDIU5Bo/v/7q7/WZXsQYNuGy1muuZFH7DIiSglFLU6pZUbGQQNvXpNcC4caoNRvNxOuDUdf80HXk3VYewKp516DHWxuOc/0ye/U00duAwU+/qkWzfh9F9hzIHJxuzNa+fsa4I7Ihx+H+qUFN/sKVhzP7lH+a+qwY1gJHtmwFDPBHK1wLLjLOGTb2jIWhHScAF7RgOGod2CAGTFB8J2JodJ3Dq5kNow95oH3BdtsjGHE6LVu+P9iG5UlVwNjXOndGeRWuZEBBJLtWcMMK11nFoDfDL4TOEMUu0K/leIpNNpUrYFVsrDi2Mbb1DXqv5PV4quWzKHikJKq99utTsoI1dsMjBkr2dctoAMO3XQS2ogrNrJ5vH1OvtU6/ddIPR0k1g9K++bcSKo6Htf8wbdxpK2rnRigJRqAU3WiEylzzVlubCF0TLb/pTyZXH9o1WoKLVoKK8yBbUHS6IdjksZYpxo82WXIzIXhptYtmDRPbQaDXiPBZaaQl26ZBI6pfQ+gZ00A3CxkH6COo2rIwjom12KM/IJRehBUdF2wLrtUWS+56P/Q7aPUrheYnYRpE9LtrwSbSp7cxuJnv1qCWzk9AeEy3t0MAp2ccq93NogWHry3QWowqHPDK0mPSr8aXZAWQzO+hB17ebb9P5ZbDCu2obJPeiNQQWbAUse10VbbKqSLm9yRutQGT/8wO0G6+LdvV2Aaq0eDW0kmI3SHKvhZZkESnoTd5o5SIr+gb0A2g9wGQi67KUw5wdLajNEHymyCqo5B4RLawWHp10XcEC528suBOjJVwDZ2iOca9lBNsSl4jZE6Ntd6jXmtKVzeiIOy/aDzwTydmPZpJrzov2A89EsrKod8mVoq1y0LbsE02Zf/sVQSAObXa5ZSq5UkGoZw9LlqwRNkai5ZT7rRXyHkJgQqioSBipgjhGHPdMYy3hbLx8UDbDPTatndyeeW1HpaXtodxYyUO+zmoDUWjeUnHRB7d5E/KQnazRs0VdbWjI/EluloPnb26+KXIGI+e+7CBt/wAetDeCKwxY6QAAAABJRU5ErkJggg==" ;
73-
7472 private final String bLogoCorruptedData = "data:image/png;base64,,,iVBORw0KGgoAAAANSUhEUgAAAVoAAAAxCAMAAACsy5FpAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURQAAAPicJAdJdQdJdQdJdficJjBUbPicJgdJdQdJdficJficJQdJdficJlrFe50AAAAMdFJOUwCBe8I/Phe+65/saIJg0K4AAAMOSURBVHja7ZvbmqsgDIU5Bo/v/7q7/WZXsQYNuGy1muuZFH7DIiSglFLU6pZUbGQQNvXpNcC4caoNRvNxOuDUdf80HXk3VYewKp516DHWxuOc/0ye/U00duAwU+/qkWzfh9F9hzIHJxuzNa+fsa4I7Ihx+H+qUFN/sKVhzP7lH+a+qwY1gJHtmwFDPBHK1wLLjLOGTb2jIWhHScAF7RgOGod2CAGTFB8J2JodJ3Dq5kNow95oH3BdtsjGHE6LVu+P9iG5UlVwNjXOndGeRWuZEBBJLtWcMMK11nFoDfDL4TOEMUu0K/leIpNNpUrYFVsrDi2Mbb1DXqv5PV4quWzKHikJKq99utTsoI1dsMjBkr2dctoAMO3XQS2ogrNrJ5vH1OvtU6/ddIPR0k1g9K++bcSKo6Htf8wbdxpK2rnRigJRqAU3WiEylzzVlubCF0TLb/pTyZXH9o1WoKLVoKK8yBbUHS6IdjksZYpxo82WXIzIXhptYtmDRPbQaDXiPBZaaQl26ZBI6pfQ+gZ00A3CxkH6COo2rIwjom12KM/IJRehBUdF2wLrtUWS+56P/Q7aPUrheYnYRpE9LtrwSbSp7cxuJnv1qCWzk9AeEy3t0MAp2ccq93NogWHry3QWowqHPDK0mPSr8aXZAWQzO+hB17ebb9P5ZbDCu2obJPeiNQQWbAUse10VbbKqSLm9yRutQGT/8wO0G6+LdvV2Aaq0eDW0kmI3SHKvhZZkESnoTd5o5SIr+gb0A2g9wGQi67KUw5wdLajNEHymyCqo5B4RLawWHp10XcEC528suBOjJVwDZ2iOca9lBNsSl4jZE6Ntd6jXmtKVzeiIOy/aDzwTydmPZpJrzov2A89EsrKod8mVoq1y0LbsE02Zf/sVQSAObXa5ZSq5UkGoZw9LlqwRNkai5ZT7rRXyHkJgQqioSBipgjhGHPdMYy3hbLx8UDbDPTatndyeeW1HpaXtodxYyUO+zmoDUWjeUnHRB7d5E/KQnazRs0VdbWjI/EluloPnb26+KXIGI+e+7CBt/wAetDeCKwxY6QAAAABJRU5ErkJggg==" ;
7573
7674 private final String bLogo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVoAAAAxCAMAAACsy5FpAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURQAAAPicJAdJdQdJdQdJdficJjBUbPicJgdJdQdJdficJficJQdJdficJlrFe50AAAAMdFJOUwCBe8I/Phe+65/saIJg0K4AAAMOSURBVHja7ZvbmqsgDIU5Bo/v/7q7/WZXsQYNuGy1muuZFH7DIiSglFLU6pZUbGQQNvXpNcC4caoNRvNxOuDUdf80HXk3VYewKp516DHWxuOc/0ye/U00duAwU+/qkWzfh9F9hzIHJxuzNa+fsa4I7Ihx+H+qUFN/sKVhzP7lH+a+qwY1gJHtmwFDPBHK1wLLjLOGTb2jIWhHScAF7RgOGod2CAGTFB8J2JodJ3Dq5kNow95oH3BdtsjGHE6LVu+P9iG5UlVwNjXOndGeRWuZEBBJLtWcMMK11nFoDfDL4TOEMUu0K/leIpNNpUrYFVsrDi2Mbb1DXqv5PV4quWzKHikJKq99utTsoI1dsMjBkr2dctoAMO3XQS2ogrNrJ5vH1OvtU6/ddIPR0k1g9K++bcSKo6Htf8wbdxpK2rnRigJRqAU3WiEylzzVlubCF0TLb/pTyZXH9o1WoKLVoKK8yBbUHS6IdjksZYpxo82WXIzIXhptYtmDRPbQaDXiPBZaaQl26ZBI6pfQ+gZ00A3CxkH6COo2rIwjom12KM/IJRehBUdF2wLrtUWS+56P/Q7aPUrheYnYRpE9LtrwSbSp7cxuJnv1qCWzk9AeEy3t0MAp2ccq93NogWHry3QWowqHPDK0mPSr8aXZAWQzO+hB17ebb9P5ZbDCu2obJPeiNQQWbAUse10VbbKqSLm9yRutQGT/8wO0G6+LdvV2Aaq0eDW0kmI3SHKvhZZkESnoTd5o5SIr+gb0A2g9wGQi67KUw5wdLajNEHymyCqo5B4RLawWHp10XcEC528suBOjJVwDZ2iOca9lBNsSl4jZE6Ntd6jXmtKVzeiIOy/aDzwTydmPZpJrzov2A89EsrKod8mVoq1y0LbsE02Zf/sVQSAObXa5ZSq5UkGoZw9LlqwRNkai5ZT7rRXyHkJgQqioSBipgjhGHPdMYy3hbLx8UDbDPTatndyeeW1HpaXtodxYyUO+zmoDUWjeUnHRB7d5E/KQnazRs0VdbWjI/EluloPnb26+KXIGI+e+7CBt/wAetDeCKwxY6QAAAABJRU5ErkJggg==" ;
7775
78- private final String svgBase64 = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjUwMCIgaGVpZ2h0PSI1MDAiPiAgICA8bGluZSB4MT0iMCIgeTE9IjEwMCIgeDI9IjUwMCIgeTI9IjEwMCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiAgLz4gICAgPGxpbmUgeDE9IjAiIHkxPSIyMDAiIHgyPSI1MDAiIHkyPSIyMDAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgIC8+ICAgIDxsaW5lIHgxPSIwIiB5MT0iMzAwIiB4Mj0iNTAwIiB5Mj0iMzAwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiICAvPiAgICA8bGluZSB4MT0iMCIgeTE9IjQwMCIgeDI9IjUwMCIgeTI9IjQwMCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiAgLz4gICAgPGxpbmUgeDE9IjEwMCIgeTE9IjAiIHgyPSIxMDAiIHkyPSI1MDAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgIC8+ICAgIDxsaW5lIHgxPSIyMDAiIHkxPSIwIiB4Mj0iMjAwIiB5Mj0iNTAwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiICAvPiAgICA8bGluZSB4MT0iMzAwIiB5MT0iMCIgeDI9IjMwMCIgeTI9IjUwMCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiAgLz4gICAgPGxpbmUgeDE9IjQwMCIgeTE9IjAiIHgyPSI0MDAiIHkyPSI1MDAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgIC8+PC9zdmc+\n " ;
79-
8076 @ BeforeClass
8177 public static void beforeClass () {
8278 createOrClearDestinationFolder (destinationFolder );
@@ -146,6 +142,84 @@ public void resourceResolverTest09() throws IOException, InterruptedException {
146142 Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diff09_" ));
147143 }
148144
145+ @ Test
146+ public void resourceResolverHtmlWithSvgTest01 () throws IOException , InterruptedException {
147+ String outPdf = destinationFolder + "resourceResolverHtmlWithSvgTest01.pdf" ;
148+ String cmpPdf = sourceFolder + "cmp_resourceResolverHtmlWithSvgTest01.pdf" ;
149+ HtmlConverter .convertToPdf (new File (sourceFolder + "resourceResolverHtmlWithSvgTest01.html" ), new File (outPdf ));
150+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diff01_" ));
151+ }
152+
153+ @ Test
154+ @ LogMessages (messages = {
155+ @ LogMessage (messageTemplate = LogMessageConstant .WORKER_UNABLE_TO_PROCESS_OTHER_WORKER , count = 2 ),
156+ @ LogMessage (messageTemplate = LogMessageConstant .UNABLE_TO_RETRIEVE_IMAGE_WITH_GIVEN_BASE_URI , count = 2 )
157+ })
158+ public void resourceResolverHtmlWithSvgTest02 () throws IOException , InterruptedException {
159+ String baseUri = sourceFolder + "%23r%e%2525s@o%25urces/" ;
160+
161+ String outPdf = destinationFolder + "resourceResolverHtmlWithSvgTest02.pdf" ;
162+ String cmpPdf = sourceFolder + "cmp_resourceResolverHtmlWithSvgTest02.pdf" ;
163+ try (FileInputStream fileInputStream = new FileInputStream (sourceFolder + "resourceResolverHtmlWithSvgTest02.html" );
164+ FileOutputStream fileOutputStream = new FileOutputStream (outPdf )) {
165+ HtmlConverter .convertToPdf (fileInputStream , fileOutputStream , new ConverterProperties ().setBaseUri (baseUri ));
166+ }
167+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diff02_" ));
168+ }
169+
170+ @ Test
171+ public void resourceResolverHtmlWithSvgTest03 () throws IOException , InterruptedException {
172+ String baseUri = sourceFolder + "%23r%e%2525s@o%25urces/" ;
173+
174+ String outPdf = destinationFolder + "resourceResolverHtmlWithSvgTest03.pdf" ;
175+ String cmpPdf = sourceFolder + "cmp_resourceResolverHtmlWithSvgTest03.pdf" ;
176+ try (FileInputStream fileInputStream = new FileInputStream (sourceFolder + "resourceResolverHtmlWithSvgTest03.html" );
177+ FileOutputStream fileOutputStream = new FileOutputStream (outPdf )) {
178+ HtmlConverter .convertToPdf (fileInputStream , fileOutputStream , new ConverterProperties ().setBaseUri (baseUri ));
179+ }
180+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diff03_" ));
181+ }
182+
183+ @ Test
184+ public void resourceResolverHtmlWithSvgTest04 () throws IOException , InterruptedException {
185+ String baseUri = sourceFolder ;
186+
187+ String outPdf = destinationFolder + "resourceResolverHtmlWithSvgTest04.pdf" ;
188+ String cmpPdf = sourceFolder + "cmp_resourceResolverHtmlWithSvgTest04.pdf" ;
189+ try (FileInputStream fileInputStream = new FileInputStream (sourceFolder + "resourceResolverHtmlWithSvgTest04.html" );
190+ FileOutputStream fileOutputStream = new FileOutputStream (outPdf )) {
191+ HtmlConverter .convertToPdf (fileInputStream , fileOutputStream , new ConverterProperties ().setBaseUri (baseUri ));
192+ }
193+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diff04_" ));
194+ }
195+
196+ @ Test
197+ //TODO: update after DEVSIX-2239 fix
198+ public void resourceResolverCssWithSvg () throws IOException , InterruptedException {
199+ String outPdf = destinationFolder + "resourceResolverCssWithSvg.pdf" ;
200+ String cmpPdf = sourceFolder + "cmp_resourceResolverCssWithSvg.pdf" ;
201+ HtmlConverter .convertToPdf (new File (sourceFolder + "resourceResolverCssWithSvg.html" ), new File (outPdf ));
202+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diffCss_" ));
203+ }
204+
205+ @ Test
206+ @ LogMessages (messages = {
207+ @ LogMessage (messageTemplate = com .itextpdf .styledxmlparser .LogMessageConstant .UNABLE_TO_RETRIEVE_IMAGE_WITH_GIVEN_BASE_URI ),
208+ @ LogMessage (messageTemplate = com .itextpdf .styledxmlparser .LogMessageConstant .UNABLE_TO_RETRIEVE_STREAM_WITH_GIVEN_BASE_URI ),
209+ @ LogMessage (messageTemplate = LogMessageConstant .WORKER_UNABLE_TO_PROCESS_OTHER_WORKER , count = 2 )
210+ })
211+ public void resourceResolverHtmlWithSvgDifferentLevels () throws IOException , InterruptedException {
212+ String baseUri = sourceFolder ;
213+
214+ String outPdf = destinationFolder + "resourceResolverHtmlWithSvgDifferentLevels.pdf" ;
215+ String cmpPdf = sourceFolder + "cmp_resourceResolverHtmlWithSvgDifferentLevels.pdf" ;
216+ try (FileInputStream fileInputStream = new FileInputStream (sourceFolder + "resourceResolverHtmlWithSvgDifferentLevels.html" );
217+ FileOutputStream fileOutputStream = new FileOutputStream (outPdf )) {
218+ HtmlConverter .convertToPdf (fileInputStream , fileOutputStream , new ConverterProperties ().setBaseUri (baseUri ));
219+ }
220+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diffsvgLevels_" ));
221+ }
222+
149223 @ Test
150224 public void resourceResolverTest10 () throws IOException , InterruptedException {
151225 String outPdf = destinationFolder + "resourceResolverTest10.pdf" ;
0 commit comments