You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2018/02/16 16:22:14 UTC

svn commit: r1824526 - /pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java

Author: tilman
Date: Fri Feb 16 16:22:14 2018
New Revision: 1824526

URL: http://svn.apache.org/viewvc?rev=1824526&view=rev
Log:
PDFBOX-4106: add test for vertical subsetting

Modified:
    pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java

Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java?rev=1824526&r1=1824525&r2=1824526&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java Fri Feb 16 16:22:14 2018
@@ -21,6 +21,9 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import junit.framework.TestCase;
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
@@ -31,6 +34,7 @@ import org.apache.pdfbox.text.PDFTextStr
  * Tests font embedding.
  *
  * @author John Hewson
+ * @author Tilman Hausherr
  */
 public class TestFontEmbedding extends TestCase
 {
@@ -58,6 +62,53 @@ public class TestFontEmbedding extends T
         validateCIDFontType2(true);
     }
 
+    /**
+     * Embed a TTF as vertical CIDFontType2 with subsetting.
+     * 
+     * @throws IOException 
+     */
+    public void testCIDFontType2VerticalSubset() throws IOException
+    {
+        String text = "「ABC」";
+        String expectedExtractedtext = "「\r\nA\r\nB\r\nC\r\n」";
+        File pdf = new File(OUT_DIR, "CIDFontType2V.pdf");
+
+        PDDocument document = new PDDocument();
+        PDPage page = new PDPage(PDRectangle.A4);
+        document.addPage(page);
+        
+        File ipafont = new File("target/fonts/ipag00303", "ipag.ttf");
+        PDType0Font vfont = PDType0Font.loadVertical(document, ipafont);
+
+        PDPageContentStream contentStream = new PDPageContentStream(document, page);
+        contentStream.beginText();
+        contentStream.setFont(vfont, 20);
+        contentStream.newLineAtOffset(50, 700);
+        contentStream.showText(text);
+        contentStream.endText();
+        contentStream.close();
+
+        // Check the font substitution
+        byte[] encode = vfont.encode(text);
+        int cid = ((encode[0] & 0xFF) << 8) + (encode[1] & 0xFF);
+        assertEquals(7392, cid); // it's 441 without substitution
+
+        // Check the dictionaries
+        COSDictionary fontDict = vfont.getCOSObject();
+        assertEquals(COSName.IDENTITY_V, fontDict.getDictionaryObject(COSName.ENCODING));
+        COSDictionary descFontDict = vfont.getDescendantFont().getCOSObject();
+        COSArray dw2 = (COSArray) descFontDict.getDictionaryObject(COSName.DW2);
+        assertEquals(880, dw2.getInt(0));
+        assertEquals(-1000, dw2.getInt(1));
+
+        document.save(pdf);
+        document.close();
+
+        // Check text extraction
+        String extracted = getUnicodeText(pdf);
+        assertEquals(expectedExtractedtext, extracted.trim());
+    }
+
     private void validateCIDFontType2(boolean useSubset) throws Exception
     {
         PDDocument document = new PDDocument();