Skip to content

Commit 53f0a49

Browse files
committed
Fix issue with Noto font
1 parent aafda9f commit 53f0a49

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

io/src/main/java/com/itextpdf/io/font/CFFFontSubset.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -651,15 +651,18 @@ protected void ReadASubr(int begin,int end,int GBias,int LBias,Map<Integer, int[
651651
break;
652652
case "hintmask":
653653
case "cntrmask":
654+
// if stack is not empty the reason is vstem implicit definition
655+
// See Adobe Technical Note #5177, page 25, hintmask usage example.
656+
NumOfHints += NumOfArgs/2;
654657
// Compute the size of the mask
655658
int SizeOfMask = NumOfHints/8;
656659
if (NumOfHints%8 != 0 || SizeOfMask == 0)
657660
SizeOfMask++;
658661
// Continue the pointer in SizeOfMask steps
659-
for (int i=0;i<SizeOfMask;i++) {
660-
getCard8();
661-
}
662-
break;
662+
for (int i=0;i<SizeOfMask;i++) {
663+
getCard8();
664+
}
665+
break;
663666
}
664667
}
665668
}

kernel/src/test/java/com/itextpdf/kernel/pdf/canvas/PdfFontTest.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package com.itextpdf.kernel.pdf.canvas;
22

33
import com.itextpdf.io.LogMessageConstant;
4-
import com.itextpdf.io.font.otf.Glyph;
5-
import com.itextpdf.io.util.Utilities;
64
import com.itextpdf.io.font.CidFont;
75
import com.itextpdf.io.font.FontConstants;
86
import com.itextpdf.io.font.FontFactory;
97
import com.itextpdf.io.font.TrueTypeCollection;
108
import com.itextpdf.io.font.TrueTypeFont;
119
import com.itextpdf.io.font.Type1Font;
1210
import com.itextpdf.io.source.ByteArrayOutputStream;
11+
import com.itextpdf.io.util.Utilities;
1312
import com.itextpdf.kernel.color.DeviceRgb;
1413
import com.itextpdf.kernel.font.PdfFont;
1514
import com.itextpdf.kernel.font.PdfFontFactory;
@@ -25,10 +24,10 @@
2524
import com.itextpdf.kernel.pdf.PdfReader;
2625
import com.itextpdf.kernel.pdf.PdfWriter;
2726
import com.itextpdf.kernel.utils.CompareTool;
28-
import com.itextpdf.test.annotations.type.IntegrationTest;
2927
import com.itextpdf.test.ExtendedITextTest;
3028
import com.itextpdf.test.annotations.LogMessage;
3129
import com.itextpdf.test.annotations.LogMessages;
30+
import com.itextpdf.test.annotations.type.IntegrationTest;
3231

3332
import java.io.FileInputStream;
3433
import java.io.FileOutputStream;
@@ -1232,6 +1231,32 @@ public void testWriteTTC() throws IOException, InterruptedException {
12321231

12331232
}
12341233

1234+
@Test
1235+
public void testNotoFont() throws IOException, InterruptedException {
1236+
String filename = destinationFolder + "testNotoFont.pdf";
1237+
String cmpFilename = sourceFolder + "cmp_testNotoFont.pdf";
1238+
1239+
String japanese = "\u713C";
1240+
1241+
PdfDocument doc = new PdfDocument(new PdfWriter(filename));
1242+
PdfPage page = doc.addNewPage();
1243+
1244+
PdfFont font = PdfFontFactory.createFont(fontsFolder + "NotoSansCJKjp-Bold.otf", "Identity-H", true);
1245+
1246+
PdfCanvas canvas = new PdfCanvas(page);
1247+
canvas.saveState()
1248+
.beginText()
1249+
.moveText(36, 680)
1250+
.setFontAndSize(font, 12)
1251+
.showText(japanese)
1252+
.endText()
1253+
.restoreState();
1254+
1255+
doc.close();
1256+
Assert.assertNull(new CompareTool().compareByContent(filename, cmpFilename, destinationFolder, "diff_"));
1257+
}
1258+
1259+
12351260
@Test
12361261
@Ignore("Invalid subset")
12371262
public void NotoSansCJKjpTest() throws IOException, InterruptedException {
@@ -1242,8 +1267,8 @@ public void NotoSansCJKjpTest() throws IOException, InterruptedException {
12421267
PdfDocument doc = new PdfDocument(writer);
12431268
PdfPage page = doc.addNewPage();
12441269
// Identity-H must be embedded
1245-
PdfFont font = PdfFontFactory.createFont(sourceFolder + "NotoSansCJKjp-Bold.otf", "Identity-H");
1246-
//font.setSubset(false);
1270+
PdfFont font = PdfFontFactory.createFont(fontsFolder + "NotoSansCJKjp-Bold.otf"/*"san.otf"*/, "Identity-H");
1271+
// font.setSubset(false);
12471272
PdfCanvas canvas = new PdfCanvas(page);
12481273
canvas.saveState()
12491274
.setFillColor(DeviceRgb.GREEN)

0 commit comments

Comments
 (0)