Пример #1
0
        private PdfDictionary GetCIDFont(PdfIndirectReference fontDescriptor, IntHashtable cjkTag)
        {
            PdfDictionary dic = new PdfDictionary(PdfName.FONT);

            dic.Put(PdfName.SUBTYPE, PdfName.CIDFONTTYPE0);
            dic.Put(PdfName.BASEFONT, new PdfName(fontName + style));
            dic.Put(PdfName.FONTDESCRIPTOR, fontDescriptor);
            int[]  keys = cjkTag.ToOrderedKeys();
            string w    = ConvertToHCIDMetrics(keys, hMetrics);

            if (w != null)
            {
                dic.Put(PdfName.W, new PdfLiteral(w));
            }
            if (vertical)
            {
                w = ConvertToVCIDMetrics(keys, vMetrics, hMetrics);
                if (w != null)
                {
                    dic.Put(PdfName.W2, new PdfLiteral(w));
                }
            }
            else
            {
                dic.Put(PdfName.DW, new PdfNumber(1000));
            }
            PdfDictionary cdic = new PdfDictionary();

            cdic.Put(PdfName.REGISTRY, new PdfString((string)fontDesc["Registry"], null));
            cdic.Put(PdfName.ORDERING, new PdfString((string)fontDesc["Ordering"], null));
            cdic.Put(PdfName.SUPPLEMENT, new PdfLiteral((string)fontDesc["Supplement"]));
            dic.Put(PdfName.CIDSYSTEMINFO, cdic);
            return(dic);
        }
Пример #2
0
 protected void CloseIt()
 {
     for (int k = 0; k < readers.Count; ++k)
     {
         ((PdfReader)readers[k]).RemoveFields();
     }
     for (int r = 0; r < readers.Count; ++r)
     {
         PdfReader reader = (PdfReader)readers[r];
         for (int page = 1; page <= reader.NumberOfPages; ++page)
         {
             pageRefs.Add(GetNewReference(reader.GetPageOrigRef(page)));
             pageDics.Add(reader.GetPageN(page));
         }
     }
     MergeFields();
     CreateAcroForms();
     for (int r = 0; r < readers.Count; ++r)
     {
         PdfReader reader = (PdfReader)readers[r];
         for (int page = 1; page <= reader.NumberOfPages; ++page)
         {
             PdfDictionary        dic     = reader.GetPageN(page);
             PdfIndirectReference pageRef = GetNewReference(reader.GetPageOrigRef(page));
             PdfIndirectReference parent  = root.AddPageRef(pageRef);
             dic.Put(PdfName.PARENT, parent);
             Propagate(dic, pageRef, false);
         }
     }
     foreach (DictionaryEntry entry in readers2intrefs)
     {
         PdfReader reader = (PdfReader)entry.Key;
         try {
             file = reader.SafeFile;
             file.ReOpen();
             IntHashtable t    = (IntHashtable)entry.Value;
             int[]        keys = t.ToOrderedKeys();
             for (int k = 0; k < keys.Length; ++k)
             {
                 PRIndirectReference refi = new PRIndirectReference(reader, keys[k]);
                 AddToBody(PdfReader.GetPdfObjectRelease(refi), t[keys[k]]);
             }
         }
         finally {
             try {
                 file.Close();
                 reader.Close();
             }
             catch  {
                 // empty on purpose
             }
         }
     }
     pdf.Close();
 }
Пример #3
0
 private PdfDictionary GetCIDFont(PdfIndirectReference fontDescriptor, IntHashtable cjkTag)
 {
     PdfDictionary dic = new PdfDictionary(PdfName.FONT);
     dic.Put(PdfName.SUBTYPE, PdfName.CIDFONTTYPE0);
     dic.Put(PdfName.BASEFONT, new PdfName(fontName + style));
     dic.Put(PdfName.FONTDESCRIPTOR, fontDescriptor);
     int[] keys = cjkTag.ToOrderedKeys();
     string w = ConvertToHCIDMetrics(keys, hMetrics);
     if (w != null)
     dic.Put(PdfName.W, new PdfLiteral(w));
     if (vertical) {
     w = ConvertToVCIDMetrics(keys, vMetrics, hMetrics);
     if (w != null)
         dic.Put(PdfName.W2, new PdfLiteral(w));
     }
     else
     dic.Put(PdfName.DW, new PdfNumber(1000));
     PdfDictionary cdic = new PdfDictionary();
     cdic.Put(PdfName.REGISTRY, new PdfString((string)fontDesc["Registry"], null));
     cdic.Put(PdfName.ORDERING, new PdfString((string)fontDesc["Ordering"], null));
     cdic.Put(PdfName.SUPPLEMENT, new PdfLiteral((string)fontDesc["Supplement"]));
     dic.Put(PdfName.CIDSYSTEMINFO, cdic);
     return dic;
 }
Пример #4
0
        private void DoType1TT()
        {
            PdfObject enc = PdfReader.GetPdfObject(font.Get(PdfName.ENCODING));

            if (enc == null)
            {
                FillEncoding(null);
            }
            else
            {
                if (enc.IsName())
                {
                    FillEncoding((PdfName)enc);
                }
                else
                {
                    PdfDictionary encDic = (PdfDictionary)enc;
                    enc = PdfReader.GetPdfObject(encDic.Get(PdfName.BASEENCODING));
                    if (enc == null)
                    {
                        FillEncoding(null);
                    }
                    else
                    {
                        FillEncoding((PdfName)enc);
                    }
                    PdfArray diffs = encDic.GetAsArray(PdfName.DIFFERENCES);
                    if (diffs != null)
                    {
                        diffmap = new IntHashtable();
                        int currentNumber = 0;
                        for (int k = 0; k < diffs.Size; ++k)
                        {
                            PdfObject obj = diffs[k];
                            if (obj.IsNumber())
                            {
                                currentNumber = ((PdfNumber)obj).IntValue;
                            }
                            else
                            {
                                int[] c = GlyphList.NameToUnicode(PdfName.DecodeName(((PdfName)obj).ToString()));
                                if (c != null && c.Length > 0)
                                {
                                    uni2byte[c[0]] = currentNumber;
                                    diffmap[c[0]]  = currentNumber;
                                }
                                ++currentNumber;
                            }
                        }
                    }
                }
            }
            PdfArray  newWidths = font.GetAsArray(PdfName.WIDTHS);
            PdfNumber first     = font.GetAsNumber(PdfName.FIRSTCHAR);
            PdfNumber last      = font.GetAsNumber(PdfName.LASTCHAR);

            if (BuiltinFonts14.ContainsKey(fontName))
            {
                BaseFont bf;
                bf = BaseFont.CreateFont(fontName, WINANSI, false);
                int[] e = uni2byte.ToOrderedKeys();
                for (int k = 0; k < e.Length; ++k)
                {
                    int n = uni2byte[e[k]];
                    widths[n] = bf.GetRawWidth(n, GlyphList.UnicodeToName(e[k]));
                }
                if (diffmap != null)   //widths for differences must override existing ones
                {
                    e = diffmap.ToOrderedKeys();
                    for (int k = 0; k < e.Length; ++k)
                    {
                        int n = diffmap[e[k]];
                        widths[n] = bf.GetRawWidth(n, GlyphList.UnicodeToName(e[k]));
                    }
                    diffmap = null;
                }
                Ascender    = bf.GetFontDescriptor(ASCENT, 1000);
                CapHeight   = bf.GetFontDescriptor(CAPHEIGHT, 1000);
                Descender   = bf.GetFontDescriptor(DESCENT, 1000);
                ItalicAngle = bf.GetFontDescriptor(ITALICANGLE, 1000);
                llx         = bf.GetFontDescriptor(BBOXLLX, 1000);
                lly         = bf.GetFontDescriptor(BBOXLLY, 1000);
                urx         = bf.GetFontDescriptor(BBOXURX, 1000);
                ury         = bf.GetFontDescriptor(BBOXURY, 1000);
            }
            if (first != null && last != null && newWidths != null)
            {
                int f = first.IntValue;
                for (int k = 0; k < newWidths.Size; ++k)
                {
                    widths[f + k] = newWidths.GetAsNumber(k).IntValue;
                }
            }
            FillFontDesc(font.GetAsDict(PdfName.FONTDESCRIPTOR));
        }