Skip to content

Commit 3f3c7f3

Browse files
Dmitry Radchukvitali-pr
authored andcommitted
Fix PdfName limit and tag structure version for pdf/a-4
DEVSIX-7803
1 parent 4829268 commit 3f3c7f3

File tree

5 files changed

+48
-0
lines changed

5 files changed

+48
-0
lines changed

pdfa/src/main/java/com/itextpdf/pdfa/PdfADocument.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,9 @@ private static PdfVersion getPdfVersionForPdfA(PdfAConformanceLevel conformanceL
419419
case "3":
420420
version = PdfVersion.PDF_1_7;
421421
break;
422+
case "4":
423+
version = PdfVersion.PDF_2_0;
424+
break;
422425
default:
423426
version = PdfVersion.PDF_1_4;
424427
break;

pdfa/src/main/java/com/itextpdf/pdfa/checker/PdfA4Checker.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,13 @@ protected void checkBlendMode(PdfName blendMode) {
561561
}
562562
}
563563

564+
/**
565+
* {@inheritDoc}
566+
*/
567+
protected int getMaxNameLength() {
568+
return Integer.MAX_VALUE;
569+
}
570+
564571
private static boolean isValidXmpConformance(String value) {
565572
if (value == null) {
566573
return false;

pdfa/src/test/java/com/itextpdf/pdfa/PdfA4CatalogCheckTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ This file is part of the iText (R) project.
2323
package com.itextpdf.pdfa;
2424

2525
import com.itextpdf.commons.utils.MessageFormatUtil;
26+
import com.itextpdf.kernel.colors.ColorConstants;
2627
import com.itextpdf.kernel.font.PdfFont;
28+
import com.itextpdf.kernel.font.PdfFontFactory;
2729
import com.itextpdf.kernel.geom.Rectangle;
2830
import com.itextpdf.kernel.pdf.EncryptionConstants;
2931
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
@@ -34,6 +36,7 @@ This file is part of the iText (R) project.
3436
import com.itextpdf.kernel.pdf.PdfName;
3537
import com.itextpdf.kernel.pdf.PdfNumber;
3638
import com.itextpdf.kernel.pdf.PdfOutputIntent;
39+
import com.itextpdf.kernel.pdf.PdfPage;
3740
import com.itextpdf.kernel.pdf.PdfReader;
3841
import com.itextpdf.kernel.pdf.PdfStream;
3942
import com.itextpdf.kernel.pdf.PdfString;
@@ -44,6 +47,11 @@ This file is part of the iText (R) project.
4447
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
4548
import com.itextpdf.kernel.pdf.xobject.PdfTransparencyGroup;
4649
import com.itextpdf.kernel.utils.CompareTool;
50+
import com.itextpdf.layout.Document;
51+
import com.itextpdf.layout.element.Div;
52+
import com.itextpdf.layout.element.List;
53+
import com.itextpdf.layout.element.ListItem;
54+
import com.itextpdf.layout.properties.ListNumberingType;
4755
import com.itextpdf.pdfa.exceptions.PdfAConformanceException;
4856
import com.itextpdf.pdfa.exceptions.PdfaExceptionMessageConstant;
4957
import com.itextpdf.test.ExtendedITextTest;
@@ -85,6 +93,29 @@ public void createSimpleDocTest() throws IOException {
8593
Assert.assertNull(new VeraPdfValidator().validate(outPdf)); // Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf\a validation on Android)
8694
}
8795

96+
@Test
97+
public void createSimpleTaggedDocTest() throws IOException, InterruptedException {
98+
String outPdf = destinationFolder + "pdfA4_tagged.pdf";
99+
String cmpPdf = sourceFolder + "cmp/PdfA4CatalogCheckTest/cmp_pdfA4_tagged.pdf";
100+
101+
PdfWriter writer = new PdfWriter(outPdf, new WriterProperties().setPdfVersion(PdfVersion.PDF_2_0));
102+
InputStream is = new FileInputStream(sourceFolder + "sRGB Color Space Profile.icm");
103+
PdfADocument pdfDoc = (PdfADocument) new PdfADocument(writer, PdfAConformanceLevel.PDF_A_4, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", is)).setTagged();
104+
PdfFont font = PdfFontFactory.createFont(sourceFolder + "FreeSans.ttf",
105+
"WinAnsi", PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
106+
Document document = new Document(pdfDoc);
107+
document.setFont(font);
108+
List list = new List();
109+
list.add("123");
110+
111+
document.add(list);
112+
Assert.assertEquals(PdfVersion.PDF_2_0, pdfDoc.getTagStructureContext().getTagStructureTargetVersion());
113+
document.close();
114+
115+
Assert.assertNull(new CompareTool().compareByContent(outPdf, cmpPdf, destinationFolder, "diff"));
116+
Assert.assertNull(new VeraPdfValidator().validate(outPdf)); // Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf\a validation on Android)
117+
}
118+
88119
@Test
89120
public void invalidCatalogVersionCheckTest() throws IOException {
90121
String outPdf = destinationFolder + "pdfA4_catalogCheck02.pdf";

pdfa/src/test/java/com/itextpdf/pdfa/checker/PdfA4ImplementationLimitsTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ This file is part of the iText (R) project.
4747

4848
import java.nio.charset.StandardCharsets;
4949
import java.util.ArrayList;
50+
import java.util.Arrays;
5051
import java.util.List;
5152

5253
@Category(UnitTest.class)
@@ -99,6 +100,12 @@ public void deviceNColorspaceWithMoreThan32Components() {
99100
pdfA4Checker.checkColorSpace(buildDeviceNColorspace(40), null, currentColorSpaces, true, false);
100101
}
101102

103+
@Test
104+
public void longPdfNameTest() {
105+
//exception shall not be thrown as pdf/a-4 supports greater than 127 characters pdf names
106+
pdfA4Checker.checkPdfObject(PdfACheckerTestUtils.getLongName(200));
107+
}
108+
102109
private PdfColorSpace buildDeviceNColorspace(int numberOfComponents) {
103110
List<String> tmpArray = new ArrayList<String>(numberOfComponents);
104111
float[] transformArray = new float[numberOfComponents * 2];

0 commit comments

Comments
 (0)