public ImageXObject(
 Document context,
 PdfStream baseDataObject
 )
       : base(context,
   baseDataObject)
   {
       /*
       NOTE: It's caller responsability to adequately populate the stream
       header and body in order to instantiate a valid object; header entries like
       'Width', 'Height', 'ColorSpace', 'BitsPerComponent' MUST be defined
       appropriately.
         */
         baseDataObject.Header[PdfName.Subtype] = PdfName.Image;
   }
Exemple #2
0
 /**
   <summary>Sets the Javascript script into the specified base data object.</summary>
 */
 internal static void SetScript(
     PdfDictionary baseDataObject,
     PdfName key,
     string value
     )
 {
     PdfDataObject scriptObject = baseDataObject.Resolve(key);
       if(!(scriptObject is PdfStream) && value.Length > 256)
       {baseDataObject[key] = baseDataObject.File.Register(scriptObject = new PdfStream());}
       // Insert the script!
       if(scriptObject is PdfStream)
       {
     bytes::IBuffer scriptBuffer = ((PdfStream)scriptObject).Body;
     scriptBuffer.SetLength(0);
     scriptBuffer.Append(value);
       }
       else
       {baseDataObject[key] = new PdfTextString(value);}
 }
Exemple #3
0
 public virtual PdfObject Visit(
     PdfStream obj,
     object data
     )
 {
     return obj;
 }
Exemple #4
0
   public override PdfObject Visit(
 PdfStream obj,
 object data
 )
   {
       PdfStream clone = (PdfStream)obj.Clone();
         {
       clone.header = (PdfDictionary)Visit(obj.header, data);
       clone.body = obj.body.Clone();
         }
         return clone;
   }
Exemple #5
0
 /**
   <summary>Gets the character map extracted from the given data.</summary>
   <param name="stream">Character map data.</param>
 */
 public static IDictionary<ByteArray, int> Get(
     PdfStream stream
     )
 {
     return Get(stream.Body);
 }
Exemple #6
0
        /**
          <summary>Creates the character code mapping for composite fonts.</summary>
        */
        private void Load_CreateEncoding(
            PdfDictionary font,
            PdfDictionary cidFont
            )
        {
            // CMap [PDF:1.6:5.6.4].
              bytes::Buffer cmapBuffer = new bytes::Buffer();
              cmapBuffer.Append(
            "%!PS-Adobe-3.0 Resource-CMap\n"
              + "%%DocumentNeededResources: ProcSet (CIDInit)\n"
              + "%%IncludeResource: ProcSet (CIDInit)\n"
              + "%%BeginResource: CMap (Adobe-Identity-UCS)\n"
              + "%%Title: (Adobe-Identity-UCS Adobe Identity 0)\n"
              + "%%Version: 1\n"
              + "%%EndComments\n"
              + "/CIDInit /ProcSet findresource begin\n"
              + "12 dict begin\n"
              + "begincmap\n"
              + "/CIDSystemInfo\n"
              + "3 dict dup begin\n"
              + "/Registry (Adobe) def\n"
              + "/Ordering (Identity) def\n"
              + "/Supplement 0 def\n"
              + "end def\n"
              + "/CMapName /Adobe-Identity-UCS def\n"
              + "/CMapVersion 1 def\n"
              + "/CMapType 0 def\n"
              + "/WMode 0 def\n"
              + "2 begincodespacerange\n"
              + "<20> <20>\n"
              + "<0000> <19FF>\n"
              + "endcodespacerange\n"
              + glyphIndexes.Count + " begincidchar\n"
            );
              // ToUnicode [PDF:1.6:5.9.2].
              bytes::Buffer toUnicodeBuffer = new bytes::Buffer();
              toUnicodeBuffer.Append(
            "/CIDInit /ProcSet findresource begin\n"
              + "12 dict begin\n"
              + "begincmap\n"
              + "/CIDSystemInfo\n"
              + "<< /Registry (Adobe)\n"
              + "/Ordering (UCS)\n"
              + "/Supplement 0\n"
              + ">> def\n"
              + "/CMapName /Adobe-Identity-UCS def\n"
              + "/CMapVersion 10.001 def\n"
              + "/CMapType 2 def\n"
              + "2 begincodespacerange\n"
              + "<20> <20>\n"
              + "<0000> <19FF>\n"
              + "endcodespacerange\n"
              + glyphIndexes.Count + " beginbfchar\n"
            );
              // CIDToGIDMap [PDF:1.6:5.6.3].
              bytes::Buffer gIdBuffer = new bytes::Buffer();
              gIdBuffer.Append((byte)0);
              gIdBuffer.Append((byte)0);
              int code = 0;
              codes = new BiDictionary<ByteArray,int>(glyphIndexes.Count);
              PdfArray widthsObject = new PdfArray(glyphWidths.Count);
              foreach(KeyValuePair<int,int> glyphIndexEntry in glyphIndexes)
              {
            // Character code (unicode to codepoint) entry.
            code++;
            byte[] charCode = (glyphIndexEntry.Key == 32
              ? new byte[]{32}
              : new byte[]
            {
              (byte)((code >> 8) & 0xFF),
              (byte)(code & 0xFF)
            });
            codes[new ByteArray(charCode)] = glyphIndexEntry.Key;

            // CMap entry.
            cmapBuffer.Append("<");
            toUnicodeBuffer.Append("<");
            for(int charCodeBytesIndex = 0,
            charCodeBytesLength = charCode.Length;
              charCodeBytesIndex < charCodeBytesLength;
              charCodeBytesIndex++
              )
            {
              string hex = ((int)charCode[charCodeBytesIndex]).ToString("X2");
              cmapBuffer.Append(hex);
              toUnicodeBuffer.Append(hex);
            }
            cmapBuffer.Append("> " + code + "\n");
            toUnicodeBuffer.Append("> <" + glyphIndexEntry.Key.ToString("X4") + ">\n");

            // CID-to-GID entry.
            int glyphIndex = glyphIndexEntry.Value;
            gIdBuffer.Append((byte)((glyphIndex >> 8) & 0xFF));
            gIdBuffer.Append((byte)(glyphIndex & 0xFF));

            // Width.
            int width;
            if(!glyphWidths.TryGetValue(glyphIndex, out width))
            {width = 0;}
            else if(width > 1000)
            {width = 1000;}
            widthsObject.Add(PdfInteger.Get(width));
              }
              cmapBuffer.Append(
            "endcidchar\n"
              + "endcmap\n"
              + "CMapName currentdict /CMap defineresource pop\n"
              + "end\n"
              + "end\n"
              + "%%EndResource\n"
              + "%%EOF"
            );
              PdfStream cmapStream = new PdfStream(cmapBuffer);
              PdfDictionary cmapHead = cmapStream.Header;
              cmapHead[PdfName.Type] = PdfName.CMap;
              cmapHead[PdfName.CMapName] = new PdfName("Adobe-Identity-UCS");
              cmapHead[PdfName.CIDSystemInfo] = new PdfDictionary(
            new PdfName[]
            {
              PdfName.Registry,
              PdfName.Ordering,
              PdfName.Supplement
            },
            new PdfDirectObject[]
            {
              new PdfTextString("Adobe"),
              new PdfTextString("Identity"),
              PdfInteger.Get(0)
            }
            ); // Generic predefined CMap (Identity-H/V (Adobe-Identity-0)) [PDF:1.6:5.6.4].
              font[PdfName.Encoding] = File.Register(cmapStream);

              PdfStream gIdStream = new PdfStream(gIdBuffer);
              cidFont[PdfName.CIDToGIDMap] = File.Register(gIdStream);

              cidFont[PdfName.W] = new PdfArray(new PdfDirectObject[]{PdfInteger.Get(1),widthsObject});

              toUnicodeBuffer.Append(
            "endbfchar\n"
              + "endcmap\n"
              + "CMapName currentdict /CMap defineresource pop\n"
              + "end\n"
              + "end\n"
            );
              PdfStream toUnicodeStream = new PdfStream(toUnicodeBuffer);
              font[PdfName.ToUnicode] = File.Register(toUnicodeStream);
        }