Skip to content

Commit 563a684

Browse files
committed
Refactor PDF conformance hierarchy
* Provide new PdfConformance class which store both PDF/A and PDF/UA * Get rid of "level" word everywhere * Always return not null conformance isntance from PdfDocument * Read conformance from PdfReader even for usual PdfDocument's DEVSIX-8571
1 parent 04f409b commit 563a684

File tree

14 files changed

+141
-148
lines changed

14 files changed

+141
-148
lines changed

src/main/java/com/itextpdf/html2pdf/ConverterProperties.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ This file is part of the iText (R) project.
2626
import com.itextpdf.html2pdf.attach.ITagWorkerFactory;
2727
import com.itextpdf.html2pdf.attach.impl.OutlineHandler;
2828
import com.itextpdf.html2pdf.css.apply.ICssApplierFactory;
29-
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
29+
import com.itextpdf.kernel.pdf.PdfAConformance;
3030
import com.itextpdf.kernel.pdf.PdfOutputIntent;
3131
import com.itextpdf.layout.font.FontProvider;
3232
import com.itextpdf.styledxmlparser.css.media.MediaDeviceDescription;
@@ -115,9 +115,9 @@ public class ConverterProperties {
115115
private PdfOutputIntent outputIntent;
116116

117117
/**
118-
* Conformance level for conversion to pdf/a.
118+
* Conformance for conversion to pdf/a.
119119
*/
120-
private PdfAConformanceLevel conformanceLevel;
120+
private PdfAConformance aConformance;
121121

122122
/**
123123
* Instantiates a new {@link ConverterProperties} instance.
@@ -429,14 +429,14 @@ public ConverterProperties setDocumentOutputIntent(PdfOutputIntent outputIntent)
429429

430430
/**
431431
* Sets the generation and strictness level of the PDF/A that must be followed.
432-
* Required parameter, when converting to pdf/a one have to specify an explicit pdf/a conformance level.
432+
* Required parameter, when converting to pdf/a one have to specify an explicit pdf/a conformance.
433433
*
434-
* @param conformanceLevel a {@link PdfAConformanceLevel} constant
434+
* @param conformance a {@link PdfAConformance} constant
435435
*
436436
* @return the {@link ConverterProperties} instance
437437
*/
438-
public ConverterProperties setPdfAConformanceLevel(PdfAConformanceLevel conformanceLevel) {
439-
this.conformanceLevel = conformanceLevel;
438+
public ConverterProperties setPdfAConformance(PdfAConformance conformance) {
439+
this.aConformance = conformance;
440440
return this;
441441
}
442442

@@ -456,10 +456,10 @@ public PdfOutputIntent getDocumentOutputIntent() {
456456
/**
457457
* Gets the generation and strictness level of the PDF/A that must be followed.
458458
*
459-
* @return pdf/a conformance level
459+
* @return pdf/a conformance
460460
*/
461-
public PdfAConformanceLevel getConformanceLevel() {
462-
return conformanceLevel;
461+
public PdfAConformance getPdfAConformance() {
462+
return aConformance;
463463
}
464464

465465
/**

src/main/java/com/itextpdf/html2pdf/HtmlConverter.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ This file is part of the iText (R) project.
2828
import com.itextpdf.html2pdf.exceptions.Html2PdfException;
2929
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
3030
import com.itextpdf.kernel.pdf.DocumentProperties;
31-
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
31+
import com.itextpdf.kernel.pdf.PdfAConformance;
3232
import com.itextpdf.kernel.pdf.PdfDocument;
3333
import com.itextpdf.kernel.pdf.PdfVersion;
3434
import com.itextpdf.kernel.pdf.PdfWriter;
@@ -62,7 +62,8 @@ This file is part of the iText (R) project.
6262
*/
6363
public class HtmlConverter {
6464

65-
private static final List<PdfAConformanceLevel> pdf2ConformanceLevels = new ArrayList<>(Arrays. asList(PdfAConformanceLevel.PDF_A_4, PdfAConformanceLevel.PDF_A_4E, PdfAConformanceLevel.PDF_A_4F));
65+
private static final List<PdfAConformance> pdf2Conformances = new ArrayList<>(
66+
Arrays.asList(PdfAConformance.PDF_A_4, PdfAConformance.PDF_A_4E, PdfAConformance.PDF_A_4F));
6667

6768
/**
6869
* Instantiates a new HtmlConverter instance.
@@ -90,7 +91,7 @@ public static void convertToPdf(String html, OutputStream pdfStream) {
9091
* @param converterProperties a {@link ConverterProperties} instance
9192
*/
9293
public static void convertToPdf(String html, OutputStream pdfStream, ConverterProperties converterProperties) {
93-
if (converterProperties != null && pdf2ConformanceLevels.contains(converterProperties.getConformanceLevel())) {
94+
if (converterProperties != null && pdf2Conformances.contains(converterProperties.getPdfAConformance())) {
9495
convertToPdf(html, new PdfWriter(pdfStream, new WriterProperties().setPdfVersion(PdfVersion.PDF_2_0)), converterProperties);
9596
return;
9697
}
@@ -117,16 +118,16 @@ public static void convertToPdf(String html, PdfWriter pdfWriter) {
117118
* @param converterProperties a {@link ConverterProperties} instance
118119
*/
119120
public static void convertToPdf(String html, PdfWriter pdfWriter, ConverterProperties converterProperties) {
120-
if (converterProperties == null || converterProperties.getConformanceLevel() == null) {
121+
if (converterProperties == null || converterProperties.getPdfAConformance() == null) {
121122
convertToPdf(html, new PdfDocument(pdfWriter, new DocumentProperties()
122123
.setEventCountingMetaInfo(resolveMetaInfo(converterProperties))), converterProperties);
123124
return;
124125
}
125-
PdfDocument document = new PdfADocument(pdfWriter, converterProperties.getConformanceLevel(),
126+
PdfDocument document = new PdfADocument(pdfWriter, converterProperties.getPdfAConformance(),
126127
converterProperties.getDocumentOutputIntent(), new DocumentProperties()
127128
.setEventCountingMetaInfo(resolveMetaInfo(converterProperties)));
128129
converterProperties = setDefaultFontProviderForPdfA(document, converterProperties);
129-
if ("A".equals(converterProperties.getConformanceLevel().getConformance())) {
130+
if ("A".equals(converterProperties.getPdfAConformance().getLevel())) {
130131
document.setTagged();
131132
}
132133
convertToPdf(html, document, converterProperties);
@@ -202,7 +203,7 @@ public static void convertToPdf(InputStream htmlStream, OutputStream pdfStream)
202203
* @throws IOException Signals that an I/O exception has occurred.
203204
*/
204205
public static void convertToPdf(InputStream htmlStream, OutputStream pdfStream, ConverterProperties converterProperties) throws IOException {
205-
if (converterProperties != null && pdf2ConformanceLevels.contains(converterProperties.getConformanceLevel())) {
206+
if (converterProperties != null && pdf2Conformances.contains(converterProperties.getPdfAConformance())) {
206207
convertToPdf(htmlStream, new PdfWriter(pdfStream, new WriterProperties().setPdfVersion(PdfVersion.PDF_2_0)), converterProperties);
207208
return;
208209
}
@@ -245,16 +246,16 @@ public static void convertToPdf(InputStream htmlStream, PdfWriter pdfWriter) thr
245246
* @throws IOException Signals that an I/O exception has occurred.
246247
*/
247248
public static void convertToPdf(InputStream htmlStream, PdfWriter pdfWriter, ConverterProperties converterProperties) throws IOException {
248-
if (converterProperties == null || converterProperties.getConformanceLevel() == null) {
249+
if (converterProperties == null || converterProperties.getPdfAConformance() == null) {
249250
convertToPdf(htmlStream, new PdfDocument(pdfWriter, new DocumentProperties().setEventCountingMetaInfo(
250251
resolveMetaInfo(converterProperties))), converterProperties);
251252
return;
252253
}
253-
PdfDocument document = new PdfADocument(pdfWriter, converterProperties.getConformanceLevel(),
254+
PdfDocument document = new PdfADocument(pdfWriter, converterProperties.getPdfAConformance(),
254255
converterProperties.getDocumentOutputIntent(), new DocumentProperties()
255256
.setEventCountingMetaInfo(resolveMetaInfo(converterProperties)));
256257
converterProperties = setDefaultFontProviderForPdfA(document, converterProperties);
257-
if ("A".equals(converterProperties.getConformanceLevel().getConformance())) {
258+
if ("A".equals(converterProperties.getPdfAConformance().getLevel())) {
258259
document.setTagged();
259260
}
260261
convertToPdf(htmlStream, document, converterProperties);
@@ -446,7 +447,7 @@ private static ConverterProperties setDefaultFontProviderForPdfA(PdfDocument doc
446447
if (properties.getFontProvider() == null) {
447448
properties.setFontProvider(new DefaultFontProvider(false, true, false));
448449
}
449-
} else if (document == null && properties != null && properties.getConformanceLevel() != null) {
450+
} else if (document == null && properties != null && properties.getPdfAConformance() != null) {
450451
if (properties.getFontProvider() == null) {
451452
properties.setFontProvider(new DefaultFontProvider(false, true, false));
452453
}

src/main/java/com/itextpdf/html2pdf/attach/ProcessorContext.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ This file is part of the iText (R) project.
3636
import com.itextpdf.html2pdf.resolver.form.RadioCheckResolver;
3737
import com.itextpdf.html2pdf.resolver.resource.HtmlResourceResolver;
3838
import com.itextpdf.io.font.FontProgram;
39-
import com.itextpdf.kernel.pdf.IConformanceLevel;
40-
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
39+
import com.itextpdf.kernel.pdf.PdfConformance;
4140
import com.itextpdf.kernel.pdf.PdfDocument;
4241
import com.itextpdf.layout.font.FontInfo;
4342
import com.itextpdf.layout.font.FontProvider;
@@ -134,9 +133,9 @@ public class ProcessorContext {
134133
private PdfDocument pdfDocument;
135134

136135
/**
137-
* PDF/A conformance level from {@link ConverterProperties} instance.
136+
* PDF/A conformance from {@link ConverterProperties} instance.
138137
*/
139-
private final PdfAConformanceLevel pdfAConformanceLevelFromProperties;
138+
private final PdfConformance pdfAConformanceFromProperties;
140139

141140
/**
142141
* The Processor meta info
@@ -206,7 +205,7 @@ public ProcessorContext(ConverterProperties converterProperties) {
206205
formFieldNameResolver = new FormFieldNameResolver();
207206
radioCheckResolver = new RadioCheckResolver();
208207
immediateFlush = converterProperties.isImmediateFlush();
209-
pdfAConformanceLevelFromProperties = converterProperties.getConformanceLevel();
208+
pdfAConformanceFromProperties = new PdfConformance(converterProperties.getPdfAConformance());
210209
processingInlineSvg = false;
211210
continuousContainerEnabled = converterProperties.isContinuousContainerEnabled();
212211
}
@@ -248,12 +247,12 @@ public PdfDocument getPdfDocument() {
248247
}
249248

250249
/**
251-
* Get the PDF document conformance level if specified.
250+
* Get the PDF document conformance.
252251
*
253-
* @return the {@link PdfAConformanceLevel} will be null if the processing result won't follow PDF/A strictness
252+
* @return the {@link PdfConformance}
254253
*/
255-
public IConformanceLevel getConformanceLevel() {
256-
return pdfDocument == null ? pdfAConformanceLevelFromProperties : pdfDocument.getConformanceLevel();
254+
public PdfConformance getConformance() {
255+
return pdfDocument == null ? pdfAConformanceFromProperties : pdfDocument.getConformance();
257256
}
258257

259258
/**

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ This file is part of the iText (R) project.
2929
import com.itextpdf.html2pdf.attach.ProcessorContext;
3030
import com.itextpdf.html2pdf.attach.util.AccessiblePropHelper;
3131
import com.itextpdf.html2pdf.html.AttributeConstants;
32-
import com.itextpdf.kernel.pdf.IConformanceLevel;
32+
import com.itextpdf.kernel.pdf.PdfConformance;
3333
import com.itextpdf.layout.IPropertyContainer;
3434
import com.itextpdf.layout.element.Div;
3535
import com.itextpdf.layout.element.IBlockElement;
@@ -60,7 +60,7 @@ public class ButtonTagWorker extends DivTagWorker {
6060

6161
private boolean hasChildren = false;
6262

63-
private IConformanceLevel pdfAConformanceLevel;
63+
private final PdfConformance pdfConformance;
6464

6565
/**
6666
* Creates a new {@link ButtonTagWorker} instance.
@@ -76,9 +76,7 @@ public ButtonTagWorker(IElementNode element, ProcessorContext context) {
7676
}
7777
this.name = context.getFormFieldNameResolver().resolveFormName(name);
7878
flatten = !context.isCreateAcroForm();
79-
if (context.getConformanceLevel() != null) {
80-
pdfAConformanceLevel = context.getConformanceLevel();
81-
}
79+
pdfConformance = context.getConformance();
8280
lang = element.getAttribute(AttributeConstants.LANG);
8381
}
8482

@@ -130,7 +128,7 @@ public IPropertyContainer getElementResult() {
130128
}
131129
}
132130
formField.setProperty(FormProperty.FORM_FIELD_FLATTEN, flatten);
133-
formField.setProperty(FormProperty.FORM_CONFORMANCE_LEVEL, pdfAConformanceLevel);
131+
formField.setProperty(FormProperty.FORM_CONFORMANCE_LEVEL, pdfConformance);
134132
return formField;
135133
}
136134
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,7 @@ public InputTagWorker(IElementNode element, ProcessorContext context) {
162162
if (formElement != null) {
163163
formElement.setProperty(FormProperty.FORM_FIELD_FLATTEN, !context.isCreateAcroForm());
164164
((IAccessibleElement)formElement).getAccessibilityProperties().setLanguage(lang);
165-
if (context.getConformanceLevel() != null) {
166-
formElement.setProperty(FormProperty.FORM_CONFORMANCE_LEVEL, context.getConformanceLevel());
167-
}
165+
formElement.setProperty(FormProperty.FORM_CONFORMANCE_LEVEL, context.getConformance());
168166
}
169167

170168
display = element.getStyles() != null ? element.getStyles().get(CssConstants.DISPLAY) : null;

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ public SelectTagWorker(IElementNode element, ProcessorContext context) {
8484
String lang = element.getAttribute(AttributeConstants.LANG);
8585
selectElement.getAccessibilityProperties().setLanguage(lang);
8686
selectElement.setProperty(FormProperty.FORM_FIELD_FLATTEN, !context.isCreateAcroForm());
87-
if (context.getConformanceLevel() != null) {
88-
selectElement.setProperty(FormProperty.FORM_CONFORMANCE_LEVEL, context.getConformanceLevel());
89-
}
87+
selectElement.setProperty(FormProperty.FORM_CONFORMANCE_LEVEL, context.getConformance());
9088
display = element.getStyles() != null ? element.getStyles().get(CssConstants.DISPLAY) : null;
9189
}
9290

src/test/java/com/itextpdf/html2pdf/Html2ElementsTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ This file is part of the iText (R) project.
3535
import com.itextpdf.io.util.UrlUtil;
3636
import com.itextpdf.kernel.exceptions.KernelExceptionMessageConstant;
3737
import com.itextpdf.kernel.exceptions.PdfException;
38-
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
38+
import com.itextpdf.kernel.pdf.PdfAConformance;
3939
import com.itextpdf.kernel.pdf.PdfDocument;
4040
import com.itextpdf.kernel.pdf.PdfOutputIntent;
4141
import com.itextpdf.kernel.pdf.PdfVersion;
@@ -68,8 +68,8 @@ This file is part of the iText (R) project.
6868
import java.util.List;
6969
import org.junit.jupiter.api.Assertions;
7070
import org.junit.jupiter.api.BeforeAll;
71-
import org.junit.jupiter.api.Test;
7271
import org.junit.jupiter.api.Tag;
72+
import org.junit.jupiter.api.Test;
7373

7474
@Tag("IntegrationTest")
7575
public class Html2ElementsTest extends ExtendedITextTest {
@@ -415,10 +415,10 @@ public void htmlToElementsToPDFATest() throws IOException, InterruptedException
415415
new ConverterProperties()
416416
.setBaseUri(sourceFolder)
417417
.setCreateAcroForm(true)
418-
.setPdfAConformanceLevel(PdfAConformanceLevel.PDF_A_4));
418+
.setPdfAConformance(PdfAConformance.PDF_A_4));
419419
try (Document document = new Document(
420420
new PdfADocument(new PdfWriter(outPdf, new WriterProperties().setPdfVersion(PdfVersion.PDF_2_0)),
421-
PdfAConformanceLevel.PDF_A_4, intent))) {
421+
PdfAConformance.PDF_A_4, intent))) {
422422
for (IElement element : elements) {
423423
document.add((IBlockElement) element);
424424
}

0 commit comments

Comments
 (0)