Skip to content

Commit bf12826

Browse files
committed
SvgDrawContext: add ResourceResolver and FontProvider to constructor
Those parameters are required. RND-1056
1 parent a9d22f3 commit bf12826

File tree

3 files changed

+32
-50
lines changed

3 files changed

+32
-50
lines changed

src/main/java/com/itextpdf/html2pdf/attach/impl/tags/SvgTagWorker.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,17 @@
99
import com.itextpdf.styledxmlparser.node.IElementNode;
1010
import com.itextpdf.styledxmlparser.node.INode;
1111
import com.itextpdf.svg.exceptions.SvgProcessingException;
12-
import com.itextpdf.svg.processors.ISvgProcessor;
1312
import com.itextpdf.svg.processors.ISvgProcessorResult;
1413
import com.itextpdf.svg.processors.impl.DefaultSvgProcessor;
15-
import org.slf4j.Logger;
14+
import com.itextpdf.svg.processors.impl.SvgConverterProperties;
1615
import org.slf4j.LoggerFactory;
1716

1817
/**
1918
* TagWorker class for the {@code svg} element.
2019
*/
21-
public class SvgTagWorker implements ITagWorker{
22-
Image svgImage;
23-
ISvgProcessorResult processingResult;
24-
25-
/**
26-
* The logger.
27-
*/
28-
private static final Logger LOGGER = LoggerFactory.getLogger(ObjectTagWorker.class);
20+
public class SvgTagWorker implements ITagWorker {
21+
private Image svgImage;
22+
private ISvgProcessorResult processingResult;
2923

3024
/**
3125
* Creates a new {@link SvgTagWorker} instance.
@@ -35,20 +29,21 @@ public class SvgTagWorker implements ITagWorker{
3529
*/
3630
public SvgTagWorker(IElementNode element, ProcessorContext context) {
3731
svgImage = null;
38-
try{
39-
ISvgProcessor proc = new DefaultSvgProcessor();
40-
processingResult = proc.process((INode) element);
32+
try {
33+
SvgConverterProperties props = new SvgConverterProperties().setBaseUri(context.getBaseUri());
34+
processingResult = new DefaultSvgProcessor().process((INode) element, props);
4135
context.startProcessingInlineSvg();
42-
}catch(SvgProcessingException pe){
43-
LOGGER.error(LogMessageConstant.UNABLE_TO_PROCESS_IMAGE_AS_SVG,pe);
36+
} catch (SvgProcessingException pe) {
37+
LoggerFactory.getLogger(SvgTagWorker.class)
38+
.error(LogMessageConstant.UNABLE_TO_PROCESS_IMAGE_AS_SVG, pe);
4439
}
4540
}
4641

4742
@Override
4843
public void processEnd(IElementNode element, ProcessorContext context) {
49-
if(context.getPdfDocument() != null && processingResult != null){
44+
if (context.getPdfDocument() != null && processingResult != null) {
5045
SvgProcessingUtil util = new SvgProcessingUtil();
51-
svgImage = util.createImageFromProcessingResult(processingResult,context.getPdfDocument());
46+
svgImage = util.createImageFromProcessingResult(processingResult, context.getPdfDocument());
5247
context.endProcessingInlineSvg();
5348
}
5449
}

src/main/java/com/itextpdf/html2pdf/util/SvgProcessingUtil.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@
1919
*/
2020
public class SvgProcessingUtil {
2121

22-
23-
/**
24-
* The logger.
25-
*/
26-
private static final Logger LOGGER = LoggerFactory.getLogger(SvgProcessingUtil.class);
27-
2822
/**
2923
* Create an {@code Image} layout object tied to the passed {@code PdfDocument} using the SVG processing result.
3024
* @param result Processing result containing the SVG information
@@ -38,7 +32,7 @@ public Image createImageFromProcessingResult(ISvgProcessorResult result, PdfDocu
3832
PdfFormXObject pdfForm = new PdfFormXObject(new Rectangle(0, 0, width, height));
3933
PdfCanvas canvas = new PdfCanvas(pdfForm, pdfDocument);
4034

41-
SvgDrawContext context = new SvgDrawContext();
35+
SvgDrawContext context = new SvgDrawContext(null, result.getFontProvider());
4236
context.addNamedObjects(result.getNamedObjects());
4337
context.pushCanvas(canvas);
4438

@@ -48,6 +42,4 @@ public Image createImageFromProcessingResult(ISvgProcessorResult result, PdfDocu
4842

4943
return new Image(pdfForm);
5044
}
51-
52-
5345
}

src/test/java/com/itextpdf/html2pdf/element/SvgTest.java

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,47 +37,42 @@ public static void beforeClass() {
3737
@Test
3838
public void InlineSvgTest() throws IOException, InterruptedException {
3939
String name = "inline_svg";
40-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
41-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
40+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
41+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
4242
}
4343

4444
@Test
4545
public void InlineNestedSvgTest() throws IOException, InterruptedException {
4646
String name = "inline_nested_svg";
47-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
48-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
47+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
48+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
4949

5050
}
5151

5252
@Test
53-
@LogMessages(messages = {
54-
// TODO RND-883 external font loading in SVG
55-
@LogMessage(messageTemplate = UNABLE_TO_RETRIEVE_STREAM_WITH_GIVEN_BASE_URI, count = 2),
56-
@LogMessage(messageTemplate = UNABLE_TO_RETRIEVE_FONT)
57-
})
5853
public void InlineSvgExternalFontRelativeTest() throws IOException, InterruptedException {
5954
String name = "inline_svg_external_font_relative";
60-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
61-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
55+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
56+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
6257
}
6358

6459
@Test
6560
public void InlineSvgExternalFontUrlTest() throws IOException, InterruptedException {
66-
// TODO RND-883 external font loading in SVG
61+
// TODO RND-1042 external font loading in SVG via @import
6762
String name = "inline_svg_external_font_url";
68-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
69-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
63+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
64+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
7065
}
7166

7267
@Test
7368
@LogMessages(messages = {
7469
@LogMessage(messageTemplate = com.itextpdf.styledxmlparser.LogMessageConstant.ERROR_PARSING_COULD_NOT_MAP_NODE),
75-
@LogMessage(messageTemplate = LogMessageConstant.ERROR_RESOLVING_PARENT_STYLES,count=4),
70+
@LogMessage(messageTemplate = LogMessageConstant.ERROR_RESOLVING_PARENT_STYLES, count = 4),
7671
})
7772
public void externalImageSuccessTest() throws IOException, InterruptedException {
7873
String name = "external_img";
79-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
80-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
74+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
75+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
8176

8277
}
8378

@@ -88,20 +83,20 @@ public void externalImageSuccessTest() throws IOException, InterruptedException
8883
})
8984
public void externalImageNonExistentRefTest() throws IOException, InterruptedException {
9085
String name = "external_img_nonExistentRef";
91-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
92-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
86+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
87+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
9388

9489
}
9590

9691
@Test
9792
@LogMessages(messages = {
9893
@LogMessage(messageTemplate = com.itextpdf.styledxmlparser.LogMessageConstant.ERROR_PARSING_COULD_NOT_MAP_NODE),
99-
@LogMessage(messageTemplate = LogMessageConstant.ERROR_RESOLVING_PARENT_STYLES,count=4),
94+
@LogMessage(messageTemplate = LogMessageConstant.ERROR_RESOLVING_PARENT_STYLES, count = 4),
10095
})
10196
public void externalObjectSuccessTest() throws IOException, InterruptedException {
10297
String name = "external_object";
103-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
104-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
98+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
99+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
105100
}
106101

107102
@Test
@@ -111,7 +106,7 @@ public void externalObjectSuccessTest() throws IOException, InterruptedException
111106
})
112107
public void externalObjectNonExistentRefTest() throws IOException, InterruptedException {
113108
String name = "external_objectNonExistentRef";
114-
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name+".pdf"));
115-
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name +".pdf", sourceFolder + "cmp_" + name+".pdf", destinationFolder, "diff_"+name+"_"));
109+
HtmlConverter.convertToPdf(new File(sourceFolder + name + ".html"), new File(destinationFolder + name + ".pdf"));
110+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + name + ".pdf", sourceFolder + "cmp_" + name + ".pdf", destinationFolder, "diff_" + name + "_"));
116111
}
117112
}

0 commit comments

Comments
 (0)