示例#1
2
    public Startup()
    {
        Pkcs12Store pkcs12 = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open, FileAccess.Read), pfxPassword.ToArray());
        string keyAlias = null;

        foreach (string name in pkcs12.Aliases)
        {
            if (pkcs12.IsKeyEntry(name))
            {
                keyAlias = name;
                break;
            }
        }

        AsymmetricKeyParameter key = pkcs12.GetKey(keyAlias).Key;
        X509CertificateEntry[] ce = pkcs12.GetCertificateChain(keyAlias);
        List<X509Certificate> chain = new List<X509Certificate>(ce.Length);
        foreach (var c in ce)
        {
            chain.Add(c.Certificate);
        }

        stamper = new Stamper()
        {
            CertChain = chain,
            PrivateKey = key,
            Stamp = iTextSharp.text.Image.GetInstance(stampImage)
        };
    }
示例#2
0
    public Startup()
    {
        Pkcs12Store pkcs12   = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open, FileAccess.Read), pfxPassword.ToArray());
        string      keyAlias = null;

        foreach (string name in pkcs12.Aliases)
        {
            if (pkcs12.IsKeyEntry(name))
            {
                keyAlias = name;
                break;
            }
        }

        AsymmetricKeyParameter key = pkcs12.GetKey(keyAlias).Key;

        X509CertificateEntry[] ce    = pkcs12.GetCertificateChain(keyAlias);
        List <X509Certificate> chain = new List <X509Certificate>(ce.Length);

        foreach (var c in ce)
        {
            chain.Add(c.Certificate);
        }

        stamper = new Stamper()
        {
            CertChain  = chain,
            PrivateKey = key,
            Stamp      = iTextSharp.text.Image.GetInstance(stampImage)
        };
    }
示例#3
0
文件: Game1.cs 项目: xoorath/gpugol
        void stamp()
        {
            int w = graphics.PreferredBackBufferWidth;
            int h = graphics.PreferredBackBufferHeight;

            for (int i = 0; i < stampw; ++i)
            {
                for (int j = 0; j < stamph; ++j)
                {
                    int dx  = stampx + i;
                    int dy  = stampy + j;
                    int idx = dy * w + dx;
                    if (idx < screenbuffer.Length && idx > 0 && dx < w && dy < h)
                    {
                        if (stampdata[j * stampw + i].R > 0)
                        {
                            screenbuffer[idx] = Color.White;
                        }
                        else
                        {
                            screenbuffer[idx] = new Color(0, 0, 0, 0);
                        }
                    }
                }
            }
            stamper = null;
        }
        private void btnNovoPdf_Click(object sender, System.EventArgs e)
        {
            // Using PDFNet related classes and methods, must
            // catch or throw PDFNetException
            try
            {
                using (PDFDoc doc = new PDFDoc())
                {
                    using (Stamper s = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5))
                    {
                        var randomNumber = new Random().Next(0, System.Convert.ToInt32(tbxNumMaxArquivos.Text));
                        doc.InitSecurityHandler();

                        // An example of creating a new page and adding it to
                        // doc's sequence of pages
                        Page newPg = doc.PageCreate();
                        doc.PagePushBack(newPg);

                        s.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center, Stamper.VerticalAlignment.e_vertical_center);
                        s.SetFontColor(new ColorPt(1, 0, 0)); // set text color to red
                        s.StampText(doc, $"{tbxDefaultNewName.Text} document {randomNumber}", new PageSet(1, doc.GetPageCount()));

                        var caminhoDestino = chkGerarWatchFolder.Checked ? CONVERTER_DEFAULT_OUTPUT_PATH : fbdCaminhoPasta.SelectedPath;

                        // Save as a linearized file which is most popular
                        // and effective format for quick PDF Viewing.
                        doc.Save(caminhoDestino + $"\\{tbxDefaultNewName.Text}_{randomNumber}.pdf", SDFDoc.SaveOptions.e_linearized);
                    }
                }
            }
            catch (PDFNetException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#5
0
        /// <summary>
        /// Called when object selected
        /// </summary>
        void OnEnable()
        {
            //if (m_editorUtils == null)
            //{
            //    m_editorUtils = new EditorUtils(this);
            //}
            //Get the settings and update tooltips
            GaiaSettings settings = Gaia.GaiaUtils.GetGaiaSettings();

            if (settings != null)
            {
                m_showTooltips = settings.m_showTooltips;
            }

            m_stamper = (Stamper)target;
            if (m_stamper != null)
            {
                m_stamper.ShowPreview();
            }

            if (Terrain.activeTerrain != false)
            {
                float height   = Terrain.activeTerrain.terrainData.size.y;
                float maxWidth = Mathf.Max(Terrain.activeTerrain.terrainData.size.x, Terrain.activeTerrain.terrainData.size.z);
                m_minX = Terrain.activeTerrain.GetPosition().x - (0.5f * maxWidth);
                m_maxX = m_minX + (2f * maxWidth);
                m_minY = Terrain.activeTerrain.GetPosition().y - (height);
                m_maxY = m_minY + (2f * height);
                m_minZ = Terrain.activeTerrain.GetPosition().z - (0.5f * maxWidth);
                m_maxZ = m_minZ + (2f * maxWidth);
            }

            StartEditorUpdates();
        }
示例#6
0
        private void GetPersonSignUrl(string documentId)
        {
            Person person = new Person("丁五");

            person.idcard    = "311312193706205418";
            person.mobile    = "13266668888";//SignType.SIGNWITHPIN时必填
            person.email     = "*****@*****.**";
            person.gender    = Gender.MALE;
            person.paperType = PaperType.IDCARD;

            //个人用户签署页面之不可见签名
            string personSignUnvisibleUrl = signService.SignUrl(documentId, SignType.SIGNWITHPIN, person, "https://www.baidu.com/", null);

            Console.WriteLine("个人用户签署页面之可见签名 url:{0}", personSignUnvisibleUrl);
            //个人用户签署页面之可见签名
            //生成个人印章数据,用户可自定义签名图片
            string  personSealData       = sealService.GenerateSeal(person);// 生成个人印章数据,用户可自定义签名图片
            Stamper personSignUrlStamper = new Stamper(1, 0.2f, 0.2f);

            List <Stamper> stampers = new List <Stamper>();

            stampers.Add(personSignUrlStamper);
            string personSignVisibleUrl = signService.SignUrl(documentId, SignType.SIGNWITHPIN, person, personSealData, stampers, "https://www.baidu.com/", null);

            Console.WriteLine("个人用户签署页面之可见签名 url:{0}", personSignVisibleUrl);
        }
示例#7
0
        public void check_stamp_parsing2(string input_file_name, string expected_remainder, string expected_year, string expected_month, string expected_day)
        {
            Stamper     stamper = new Stamper();
            ParseResult res     = stamper.parse(input_file_name);

            check_stamp_parsing(res, expected_remainder, expected_year, expected_month, expected_day);
        }
示例#8
0
//        public static void ShowWorldBiomeMasksSpawner()
//        {

//            Terrain worldMapTerrain = TerrainHelper.GetWorldMapTerrain();

//            if (worldMapTerrain == null)
//            {
//                Debug.LogError("No world map created yet! Please create a world map first before opening the Biome Masks setup!");
//                return;
//            }

//            GaiaSessionManager gsm = GaiaSessionManager.GetSessionManager(false);

//            //Get the Gaia Settings
//            GaiaSettings settings = GaiaUtils.GetGaiaSettings();

//            //Create or find the stamper
//            GameObject spawnerObj = GameObject.Find(GaiaConstants.worldBiomeMasks);
//            if (spawnerObj == null)
//            {
//                spawnerObj = new GameObject(GaiaConstants.worldBiomeMasks);
//                GameObject worldMapObj = GaiaUtils.GetOrCreateWorldDesigner();
//                spawnerObj.transform.parent = worldMapObj.transform;
//                Spawner spawner = spawnerObj.AddComponent<WorldBiomeMasks>();
//                //Existing settings for world mask biomes in session? -> Take those!
//                if (gsm.m_session.m_worldBiomeMaskSettings != null)
//                {
//                    spawner.LoadSettings(gsm.m_session.m_worldBiomeMaskSettings);
//                }
//                else
//                {
//                    //No session settings? Use default setup from Gaia settings then
//                    if (settings != null)
//                    {
//                        if (settings.m_defaultBiomeMaskSettings != null)
//                        {
//                            spawner.LoadSettings(settings.m_defaultBiomeMaskSettings);
//                        }
//                    }
//                }
//                spawner.m_settings.m_isWorldmapSpawner = true;
//                spawner.m_settings.m_worldmapSpawnerType = WorldmapSpawnerType.WorldBiomeMasks;
//                spawner.m_worldMapTerrain = worldMapTerrain;
//                spawner.FitToTerrain();
//                spawner.UpdateMinMaxHeight();
//                gsm.m_session.m_worldBiomeMaskSettings = spawner.m_settings;
//            }
//            else
//            {
//                Spawner spawner = spawnerObj.GetComponent<Spawner>();
//                spawner.m_settings.m_isWorldmapSpawner = true;
//                spawner.m_worldMapTerrain = worldMapTerrain;
//                spawner.FitToTerrain();
//                spawner.UpdateMinMaxHeight();
//                gsm.m_session.m_worldBiomeMaskSettings = spawner.m_settings;
//            }

//            gsm.SwitchToWorldMap();
//#if UNITY_EDITOR
//            Selection.activeGameObject = spawnerObj;
//#endif
//        }


        public static GameObject GetOrCreateWorldMapStamper()
        {
            //Create or find the stamper
            GameObject stamperObj = GameObject.Find(GaiaConstants.worldMapStamper);

            if (stamperObj == null)
            {
                stamperObj = new GameObject(GaiaConstants.worldMapStamper);
                GameObject worldMapObj = GaiaUtils.GetOrCreateWorldDesigner();
                stamperObj.transform.parent = worldMapObj.transform;
                Stamper stamper = stamperObj.AddComponent <Stamper>();
                stamper.m_settings = ScriptableObject.CreateInstance <StamperSettings>();
                stamper.m_settings.m_isWorldmapStamper = true;
                stamper.m_recordUndo = false;
                stamper.UpdateMinMaxHeight();
                //stamper.m_seaLevel = m_settings.m_currentDefaults.m_seaLevel;
                stamper.FitToTerrain();
            }
            else
            {
                Stamper stamper = stamperObj.GetComponent <Stamper>();
                stamper.m_settings.m_isWorldmapStamper = true;
                stamper.m_recordUndo = false;
                stamper.UpdateMinMaxHeight();
                //stamper.m_seaLevel = m_settings.m_currentDefaults.m_seaLevel;
                stamper.FitToTerrain();
            }
            Terrain worldMapTerrain = TerrainHelper.GetWorldMapTerrain();

            if (worldMapTerrain != null)
            {
                stamperObj.transform.position = worldMapTerrain.transform.position + worldMapTerrain.terrainData.size / 2f;
            }
            return(stamperObj);
        }
示例#9
0
        public static Stamper GetOrCreateSyncedStamper(string stamperName)
        {
            Stamper stamper = null;

            //No stamper passed in, does a session Stamper exist?
            if (stamper == null)
            {
                GameObject stamperObj = GameObject.Find(stamperName);
                if (stamperObj == null)
                {
                    GameObject wmeTempTools = GaiaUtils.GetOrCreateWorldMapTempTools();
                    stamperObj = new GameObject(stamperName);
                    stamperObj.transform.parent = wmeTempTools.transform;
                }
                if (stamperObj.GetComponent <Stamper>() == null)
                {
                    stamper = stamperObj.AddComponent <Stamper>();
#if GAIA_PRO_PRESENT
                    if (GaiaUtils.HasDynamicLoadedTerrains())
                    {
                        //We got placeholders, activate terrain loading
                        stamper.m_loadTerrainMode = LoadMode.EditorSelected;
                    }
#endif
                }
                stamper = stamperObj.GetComponent <Stamper>();
            }

            return(stamper);
        }
        static void Main(string[] args)
        {
            string inputFile      = @".\Invoice.pdf";
            string outputFile     = @".\Invoice_Stamped.pdf";
            string stampImageFile = @".\stamp_image.png";

            using (Stamper stamper = new Stamper("demo", "demo"))
            {
                // Optionally make the image background transparent
                // stamper.MakeStampImageTransparent = true;

                using (Image image = Image.FromFile(stampImageFile))
                {
                    // Get image size in PDF units
                    SizeF imageSizeInPoints = stamper.GetImageSizeInPoints(image);

                    RectangleF rectangle = new RectangleF(440, 370, imageSizeInPoints.Width / 3, imageSizeInPoints.Height / 3);

                    stamper.Stamp(inputFile, outputFile, image, rectangle, 0, -1);
                }
            }

            // Open first output file in default associated application (for demo purposes)
            ProcessStartInfo processStartInfo = new ProcessStartInfo(outputFile);

            processStartInfo.UseShellExecute = true;
            Process.Start(processStartInfo);
        }
示例#11
0
文件: Game1.cs 项目: xoorath/gpugol
        void mainForm_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                Array a = (Array)e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop);
                if (a != null)
                {
                    string s = a.GetValue(0) as string;
                    if (s.ToUpper().Contains("PNG"))
                    {
                        FileStream fs    = File.Open(s, FileMode.Open);
                        Texture2D  stamp = Texture2D.FromStream(GraphicsDevice, fs as Stream);
                        fs.Close();
                        stampdata = new Color[stamp.Width * stamp.Height];
                        stamp.GetData <Color>(stampdata);
                        stampw = stamp.Width;
                        stamph = stamp.Height;
                        stampx = e.X - Window.ClientBounds.Left;
                        stampy = e.Y - Window.ClientBounds.Top;

                        stamper = this.stamp;
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
            }
        }
示例#12
0
        public void check_no_stamp(string input_file_name)
        {
            Stamper     stamper = new Stamper();
            ParseResult res     = stamper.parse(input_file_name);

            UT.Assert.IsNotNull(res);
            UT.Assert.IsNull(res.Stamp);
        }
示例#13
0
        private void SignByPlatform(string documentId)
        {
            // 平台签署,带签名外观
            string  sealId  = "2292201504040435826";      // 平台印章,在契约锁云平台维护
            Stamper stamper = new Stamper(1, 0.5f, 0.5f); // 签名位置,根据坐标比确定位置

            //Stamper stamper = new Stamper("公章:", 0, 0);// 签名位置,根据关键字定位
            //remoteSignService.Sign(documentId);//无签名外观
            signService.Sign(documentId, sealId, stamper);
            Console.WriteLine("平台签署成功!");
        }
        //Create a stamper
        void CreateStamper()
        {
            string path = m_stampAddress;

            path = path.Replace("\\", "/");

            //Load the stamp
            TextAsset stamp = Resources.Load <TextAsset>(path);

            if (stamp == null)
            {
                m_currentProgress = "Failed to load stamp at " + path;
                if (m_showDebug)
                {
                    Debug.Log(m_currentProgress);
                }
            }
            else
            {
                m_currentProgress = "Loaded stamp at " + stamp.name;
                if (m_showDebug)
                {
                    if (m_showDebug)
                    {
                        Debug.Log(m_currentProgress);
                    }

                    GameObject stamper = new GameObject("Runtime Stamper");
                    m_stamper = stamper.AddComponent <Stamper>();
                    if (m_stamper.LoadRuntimeStamp(stamp) == true)
                    {
                        m_currentProgress = "Loaded Stamp";
                        m_stamper.FlattenTerrain();
                        m_stamper.FitToTerrain();
                        m_stamper.m_height            = 6f;
                        m_stamper.m_distanceMask      = AnimationCurve.Linear(0f, 1f, 1f, 0f);
                        m_stamper.m_rotation          = 0f;
                        m_stamper.m_stickBaseToGround = true;
                        m_stamper.m_updateTimeAllowed = 1 / 15f;
                        m_stamper.UpdateStamp();
                        m_stamper.Stamp();
                    }
                    else
                    {
                        m_currentProgress = "Failed to load stamp";
                    }

                    if (m_showDebug)
                    {
                        Debug.Log(m_currentProgress);
                    }
                }
            }
        }
示例#15
0
 /// <summary>
 /// Called when object deselected
 /// </summary>
 void OnDisable()
 {
     m_stamper = (Stamper)target;
     if (m_stamper != null)
     {
         if (!m_stamper.m_alwaysShow)
         {
             m_stamper.HidePreview();
         }
     }
 }
        public void ExtrudeTest()
        {
            Action action = () => Stamper.Stamp(Biscuit.Create());

            action.Should().NotThrow();

            var biscuit = Stamper.Stamp(Biscuit.Create(true, false, false));

            biscuit.IsExtruded.Should().BeTrue();
            biscuit.IsStamped.Should().BeTrue();
            biscuit.IsDone.Should().BeFalse();
        }
示例#17
0
        public void LoadStamperSettings(Stamper stamper, bool instantiateSettings)
        {
            stamper.LoadSettings(m_connectedStamperSettings, instantiateSettings);
            stamper.m_worldMapStampToken = this;
#if GAIA_PRO_PRESENT
            if (GaiaUtils.HasDynamicLoadedTerrains())
            {
                //We got placeholders, activate terrain loading
                stamper.m_loadTerrainMode = LoadMode.EditorSelected;
            }
#endif
        }
示例#18
0
        /**
         *  平台签署
         */
        public void SignbyPlatform()
        {
            Stream file     = new FileStream("C://Users//Administrator//Desktop//测试.pdf", FileMode.Open);
            Stream signfile = new FileStream("C://Users//Administrator//Desktop//RRDENSE.pdf", FileMode.Create);
            //平台签署本地合同(无签名外观)
            //localSignService.Sign(file, ref signedFile);
            //平台签署本地合同(有签名外观)
            Stamper stamper = new Stamper(1, 0.5f, 0.5f);

            localSignService.Sign(file, ref signfile, "2279225369938624512", stamper);
            Console.WriteLine("平台签署已完成");
            file.Close();
        }
示例#19
0
        private void DrawLoaders(bool helpEnabled)
        {
            bool originalGUIState = GUI.enabled;

            EditorGUIUtility.labelWidth = 20;
#if GAIA_PRO_PRESENT
            foreach (TerrainLoader terrainLoader in m_terrainLoaders)
            {
                if (terrainLoader != null)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(terrainLoader.name);
                    terrainLoader.LoadMode = (LoadMode)EditorGUILayout.EnumPopup(terrainLoader.LoadMode);
                    if (m_editorUtils.Button("SelectLoader", GUILayout.MaxWidth(100)))
                    {
                        Selection.activeGameObject = terrainLoader.gameObject;
                        EditorGUIUtility.PingObject(Selection.activeObject);

                        //Try to find out which kind of Gaia Tool that is, and open / highlight the terrain loading settings where appropiate
                        Stamper stamper = terrainLoader.gameObject.GetComponent <Stamper>();
                        if (stamper != null)
                        {
                            stamper.HighlightLoadingSettings();
                        }

                        BiomeController biomeController = terrainLoader.gameObject.GetComponent <BiomeController>();
                        if (biomeController != null)
                        {
                            biomeController.HighlightLoadingSettings();
                        }

                        Spawner spawner = terrainLoader.gameObject.GetComponent <Spawner>();
                        if (spawner != null)
                        {
                            spawner.HighlightLoadingSettings();
                        }

                        MaskMapExport maskMapExport = terrainLoader.gameObject.GetComponent <MaskMapExport>();
                        if (maskMapExport != null)
                        {
                            maskMapExport.HighlightLoadingSettings();
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
            }
#endif
            EditorGUIUtility.labelWidth = 0;
        }
示例#20
0
        private void SignByCompany(string documentId)
        {
            // 公司用户签署
            Company company = new Company("测试科技有限公司");

            company.registerNo = "12323432452";
            // 公司无签名外观时调用
            // remoteSignService.Sign(documentId, company);
            Stamper companyStamper = new Stamper(1, 0.3f, 0.3f);// 签名显示位置,根据坐标比定位
            //Stamper companyStamper = new Stamper("盖公章:", 0.1f, 0);// 签名位置,根据关键字定位
            string companySealData = sealService.GenerateSeal(company);

            signService.Sign(documentId, company, companySealData, companyStamper);
            Console.WriteLine("公司签署完成!");
        }
示例#21
0
        public bool check_file_renaming(string input_file_name, System.DateTime input_file_lastmod, string expected_out_name, System.DateTime expected_out_lastmod)
        {
            UT.Assert.IsNotNull(input_file_name);
            Stamper stamper = new Stamper();

            string actual_out_name = null;

            System.DateTime actual_out_lastmod;
            stamper.GetRenameInfo(input_file_name, input_file_lastmod, out actual_out_name, out actual_out_lastmod);

            UT.Assert.AreEqual(expected_out_name, actual_out_name);
            UT.Assert.AreEqual(expected_out_lastmod, actual_out_lastmod);

            return(true);
        }
示例#22
0
        /**
         *  公司签署
         */
        public void SignbyCompany()
        {
            Stream  file    = new FileStream("C://Users//Administrator//Desktop//RRDENSE135.pdf", FileMode.Open);
            Company company = new Company("本地签测试公司");

            company.registerNo = "16600000000";
            //公司用户签署本地合同(无签名外观)
            //localSignService.Sign(file, ref signedFile, company);
            //公司用户签署本地合同(有签名外观)
            Stamper stamper  = new Stamper(1, 0.5f, 0.5f);
            string  sealData = "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";

            localSignService.Sign(file, ref file, company, sealData, stamper);
            Console.WriteLine("公司签署已完成");
            file.Close();
        }
示例#23
0
        /**
         *  个人签署
         */
        public void SignbyPersonal()
        {
            Stream file   = new FileStream("C://Users//Administrator//Desktop//RRDENSE135.pdf", FileMode.Open);
            Person person = new Person("本地签测试人");

            person.mobile = "16600000000";
            //个人用户签署本地合同(无签名外观)
            //localSignService.Sign(file, ref signedFile, person);
            //个人用户签署本地合同(有签名外观)
            Stamper stamper  = new Stamper(1, 0.5f, 0.5f);
            string  sealData = "data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAkQAAABkCAYAAABn0y9FAAAEYUlEQVR42u3dW47bMBBFQe5/08wOBnDEx+1mFTCfsS1KMY9lWRwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYYm74S90u+9iYsO74ARBE4YEkAIwHggggLohOvoFWOYMliBBEAI8G0QzZHvvYpIYgArgaRDNge+xjkxqCCOB6EM3L22Mfm9QQRAA/BcTOuBIAgghBBNAuiH6No9PbZR8bEwQRwNEgSogiBBGCCOB6EJ14fAQRggigRLCYkAURgghAEJmUBRGCCEAQmZQFEYII4PEgMikLIgQRgCAyKQsiBBGAIDIpCyIEEYAgMikLIgQRgCAyKQsiBBHA00F0+ldmyQFwY523L8+TdLfxhHXyVgbCqdf9ddwEESCIBNHxCen03cJXv96O47cyEFJC+JfXIYgAQVQ0UFKCaC78OzUet19r4vitCKKKYyeIAEE0aq9lVu3rnd0T+9czAWlntW6H0c6zbYkhKYgAQVQwhhKCaG7+2zEeSeGRNHZfgqhTSAoiQBBtfFPuGESrv5ZYsR3/ewZgftzO3eO34t/tCqLkkFwVUgBPBVHFT5eJz7vywtt5YB/fiOmV230ziL5EXYVjTxABgmjUONWeGkS3Hu/W2acZPH63gqjLsSeIAEE08q876DAhrdyWlIu2k8ZvVxB1CHFBBAii0eMizLT75Nzelt37J/krroSLvqse74IIEESj9q9Ruv3MP+2apB3h0TWIqh/vgggQRKPuz3IFUb0gOn0snPg/k/D/VxABHHpDfT2IKkwYaTcrrH4cvPT1sCACBNGCIEpcO0wQ9Q+ihPv9dDrWBREgiIpGgSB6a9JMuwGifQsgiJ67qFoQnZs0Ky6Wa98CPBREL04SgujMpJl4wb8gEkSAINr+OILIpJl+K4jXvh4WRIAgKhoHgqjupLk6dgSRIAKICqKud6oWROsmzR1newSRIAK4EjGCSBDtWl4kZTIXRIIIEETHH08QfX+e6kGUNpkLIkEECKISZ00EUa1Js9qSIoJIEAGC6NpjCqLsG2cKop5BZOkOQBB9fNN7JYgqTEpVgyj17MZLa/cJIkAQbQyieXGbBFFWEFWczAWRIAIEUYk30xvPmzwpvRhEr9yYseuHGoBngqhqnCRNSknjsSOIdt7pulMQjYJjCPBUEHU8W3NyLCutM5dyBuu1pTt2HHsnxhBAEI361/TsnkhWT0aVg2guHvuuQTQOHnuCCBBERQIl9RdutxYnrR5EaQu8Vg6ilAVyAQTR6L+cRtpE1GXpDkGUNY4Agig8UtLXU0uZwLss7vrXc78WROPgGAIIovCzREmfahM+jVda3mH1WFVZMDbxuKu0vQBCJTyIvk5QVcbj9E++f3m+F4Poy1hW3l4AmgSoicZ4dfjwAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfPEPVlkP0vT4oF4AAAAASUVORK5CYII=";

            localSignService.Sign(file, ref file, person, sealData, stamper);
            Console.WriteLine("个人签署已完成");
            file.Close();
        }
        public void StampDrive(DriveInfo drive)
        {
            try
            {
                if (OnActivityChanged != null)
                {
                    OnActivityChanged(eActivity.Stamping);
                }

                IEnumerable <string> failiures = null;
                bool success = false;

                string msg = "Stamping drive: " + drive.Name;
                StamperLiveData.Log(msg);
                DriveStamperUI.ShowMessage(msg, ToolTipIcon.Info);

                success = Stamper.Stamp(drive, StamperLiveData.Project, out failiures);

                if (success)
                {
                    string msgOk = "Drive stamped: " + drive.Name;
                    StamperLiveData.Log(msgOk);
                    DriveStamperUI.ShowMessage(msgOk, ToolTipIcon.Info);
                }
                else
                {
                    string msgFail = "Drive not succesfully stamped:\n" + string.Join("\n", (failiures ?? new List <string>()).ToArray());
                    StamperLiveData.Log(msgFail);
                    DriveStamperUI.ShowMessage(msgFail, ToolTipIcon.Warning);
                }
            }
            catch (Exception e)
            {
                string msgFail = "Unexpected exception:\n" + e.Message;
                StamperLiveData.Log(msgFail);
                DriveStamperUI.ShowMessage(msgFail, ToolTipIcon.Warning);
            }
            finally
            {
                UpdateDrives();
                if (OnActivityChanged != null)
                {
                    OnActivityChanged(eActivity.None);
                }
            }
        }
        public void UpdateDrives()
        {
            StamperLiveData.ObservedDriveState.Clear();

            var drives = DriveHelper.FindDrives(StamperLiveData.Project);

            foreach (var drive in drives)
            {
                bool done  = Stamper.CheckDrive(drive, StamperLiveData.Project);
                bool space = Stamper.DriveHasSpace(drive, StamperLiveData.Project);

                eDriveState state = done ? eDriveState.Stamped : (space ? eDriveState.Ready : eDriveState.NoSpace);

                StamperLiveData.ObservedDriveState.Add(drive, state);
            }

            StamperLiveData.SendDrivesUpdate();
        }
        private static void WatermarkFile(PDFDoc doc, WaterMarkInfo watermarkInfo)
        {
            using (var stamp = new Stamper(Stamper.SizeType.e_relative_scale, 1, 1))
            {
                doc.InitSecurityHandler();

                stamp.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center, Stamper.VerticalAlignment.e_vertical_center);
                stamp.SetFontColor(new ColorPt(0, 0, 0)); // set text color to red
                stamp.SetOpacity(0.1);
                stamp.SetRotation(-67);
                stamp.ShowsOnPrint(true);
                stamp.ShowsOnScreen(true);
                stamp.SetAsBackground(false);
                stamp.StampText(doc, watermarkInfo.CustomMessage + "\n"
                                + watermarkInfo.UserIPAddress,
                                new PageSet(1, doc.GetPageCount()));
            }
        }
        public void HandleMotorPulseTest()
        {
            this.Maker.FirstConveyor.Belt.Insert(1, Biscuit.Create(true, false, false));
            Action action = () => Stamper.HandleMotorPulse(
                null,
                new OnMotorPulseEventArgs {
                Maker = this.Maker
            }
                );

            action.Should().NotThrow();

            var biscuit = this.Maker.FirstConveyor.Belt.ElementAt(1);

            biscuit.Should().NotBeNull();
            biscuit.IsExtruded.Should().BeTrue();
            biscuit.IsStamped.Should().BeTrue();
            biscuit.IsDone.Should().BeFalse();
        }
示例#28
0
        private void SignByPerson(string documentId)
        {
            // 个人用户签署
            Person person = new Person("丁五");

            person.idcard    = "311312193706205418";
            person.mobile    = "13266668888";
            person.email     = "*****@*****.**";
            person.gender    = Gender.MALE;
            person.paperType = PaperType.IDCARD;

            // 个人无签名外观时调用
            // remoteSignService.Sign(documentId, person);
            string sealData = sealService.GenerateSeal(person);  // 生成个人签名数据
            // Stamper personStamper = new Stamper(1, 0.2f, 0.2f);// 签名显示位置,根据坐标比定位
            Stamper personStamper = new Stamper("运营者签字:", 0, 0); // 签名位置,根据关键字定位

            // 个人签署接口,有签名外观
            signService.Sign(documentId, person, sealData, personStamper);
            Console.WriteLine("个人签署完成!");
        }
示例#29
0
        private void GetCompanySignUrl(string documentId)
        {
            // 企业用户签署页面URL
            Company companySigner = new Company("哈治理测试科技有限公司");

            companySigner.registerNo = "12323432452";
            companySigner.mobile     = "18701559988";//SignType.SIGNWITHPIN时必填
            //企业用户签署页面之不可见签名
            string companySignUnvisibleUrl = signService.SignUrl(documentId, SignType.SIGNWITHPIN, companySigner, "https://www.baidu.com/", null);

            Console.WriteLine("企业用户签署页面之不可见签名url:{0}", companySignUnvisibleUrl);
            //企业用户签署页面之可见签名
            // 生成企业印章数据,用户可自定义印章图片
            string  companySealDate       = sealService.GenerateSeal(companySigner);
            Stamper companySignUrlStamper = new Stamper(1, 0.1f, 0.5f);

            List <Stamper> stampers = new List <Stamper>();

            stampers.Add(companySignUrlStamper);

            string companySignVisibleUrl = signService.SignUrl(documentId, SignType.SIGNWITHPIN, companySigner, companySealDate, stampers, "https://www.baidu.com/", null);

            Console.WriteLine("企业用户签署页面之可见签名url:{0}", companySignVisibleUrl);
        }
示例#30
0
        /// <summary>
        /// Stamp a JPEG image to a PDF document in a specific position
        /// </summary>
        /// <param name="doc">PDF Document to add the barcode</param>
        /// <param name="jpegBytes">The encoded JPEG byte array</param>
        /// <param name="h">Horizontal position</param>
        /// <param name="v">Vertical position</param>
        private void StampToPage(PDFDoc doc, byte[] jpegBytes, double h, double v)
        {
            // Stamping PDF file
            pdftron.PDF.Image barcodeImage = pdftron.PDF.Image.Create(doc.GetSDFDoc(), jpegBytes);

            Stamper barcodeStamp = new Stamper(StamperSizeType.e_absolute_size, 150, 150);

            //set position of the image to the center, left of PDF pages
            barcodeStamp.SetAlignment(StamperHorizontalAlignment.e_horizontal_left, StamperVerticalAlignment.e_vertical_bottom);
            barcodeStamp.SetAsAnnotation(true);

            double xPos = h - (150 / 2);
            double yPos = v - (150 / 2);

            barcodeStamp.SetPosition(xPos, yPos);
            barcodeStamp.SetFontColor(new ColorPt(0, 0, 0, 0));
            //barcodeStamp.SetRotation(180);
            barcodeStamp.SetAsBackground(false);
            // Stamp current viewing page
            barcodeStamp.StampImage(doc, barcodeImage, new PageSet(PDFViewCtrl.GetCurrentPage(), PDFViewCtrl.GetCurrentPage()));

            // Render current visible region
            PDFViewCtrl.Update();
        }
示例#31
0
文件: Game1.cs 项目: xoorath/gpugol
        void mainForm_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                Array a = (Array)e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop);
                if (a != null)
                {
                    string s = a.GetValue(0) as string;
                    if (s.ToUpper().Contains("PNG"))
                    {
                        FileStream fs = File.Open(s, FileMode.Open);
                        Texture2D stamp = Texture2D.FromStream(GraphicsDevice, fs as Stream);
                        fs.Close();
                        stampdata = new Color[stamp.Width * stamp.Height];
                        stamp.GetData<Color>(stampdata);
                        stampw = stamp.Width;
                        stamph = stamp.Height;
                        stampx = e.X - Window.ClientBounds.Left;
                        stampy = e.Y - Window.ClientBounds.Top;

                        stamper = this.stamp;
                    }
                }
            }
            catch(Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
            }
        }
示例#32
0
文件: Game1.cs 项目: xoorath/gpugol
        void stamp()
        {
            int w = graphics.PreferredBackBufferWidth;
            int h = graphics.PreferredBackBufferHeight;
            for (int i = 0; i < stampw; ++i)
            {
                for (int j = 0; j < stamph; ++j)
                {
                    int dx = stampx + i;
                    int dy = stampy + j;
                    int idx = dy * w + dx;
                    if (idx < screenbuffer.Length && idx > 0 && dx < w && dy < h)
                    {
                        if (stampdata[j * stampw + i].R > 0)
                            screenbuffer[idx] = Color.White;
                        else
                            screenbuffer[idx] = new Color(0, 0, 0, 0);
                    }

                }
            }
            stamper = null;
        }
示例#33
0
 public void SyncLocalStamper(Stamper stamper)
 {
     stamper.transform.position = GetLocalStamperPosition();
 }