public static string GenerateQrCodeToPdf(string qrCodeInfo, string qrCodeOutputFullPath) { try { QRCodeEncoderLibrary.QREncoder qREncoder = new QRCodeEncoderLibrary.QREncoder(); qREncoder.ErrorCorrection = QRCodeEncoderLibrary.ErrorCorrection.Q; qREncoder.ModuleSize = 4; qREncoder.QuietZone = 16; //byte[] qrCodeInfoByteArray = Encoding.UTF8.GetBytes(qrCodeInfo); qREncoder.Encode(qrCodeInfo); // save the barcode to PNG file // This method DOES NOT use Bitmap class and is suitable for net-core and net-standard // It produces files significantly smaller than SaveQRCodeToFile. qREncoder.SaveQRCodeToPngFile(qrCodeOutputFullPath); return("QR/Bar code generate successfully!"); } catch (Exception) { throw; } return("QR/Bar code generate failed!"); }
protected override void OnPostInstall() { try { BPSUtilities.WriteLog("PlaceQRCode OnPostInstall"); NotificationManager.OutputPrompt("Enter data point for corner of QR Code. Reset to exit."); // AccuSnap.SnapEnabled = true; // AccuSnap.LocateEnabled = true; base.OnPostInstall(); m_haveFirstPoint = false; // base.BeginDynamics(); m_firstPoint = DPoint3d.Zero; if (!string.IsNullOrEmpty(LongURL)) { QRCodeEncoderLibrary.QREncoder enc = QRCodeImageFunctions.GetQREncoderObject(LongURL); BPSUtilities.WriteLog($"QRCodeDimension: {enc.QRCodeDimension}"); if (enc.QRCodeDimension > 0) { DPoint3d[] blkPts = new DPoint3d[4]; blkPts[0] = blkPts[1] = blkPts[2] = blkPts[3] = DPoint3d.Zero; blkPts[0].X = enc.QuietZone; blkPts[0].Y = enc.QuietZone; blkPts[1].X = enc.QuietZone + 1.0; blkPts[1].Y = enc.QuietZone; blkPts[2].X = enc.QuietZone + 1.0; blkPts[2].Y = enc.QuietZone + 1.0; blkPts[3].X = enc.QuietZone; blkPts[3].Y = enc.QuietZone + 1.0; DPoint3d[] blkPts2 = new DPoint3d[4]; DVector3d yVec = new DVector3d(0, 1, 0); DVector3d xVec = new DVector3d(1, 0, 0); DMatrix3d cellRotation = new DMatrix3d(1, 0, 0, 0, 1, 0, 0, 0, 1); // Identity List <Bentley.DgnPlatformNET.Elements.Element> listChildElements = new List <Bentley.DgnPlatformNET.Elements.Element>(); // bool[,] pixels = enc.ConvertQRCodeMatrixToPixels(); for (int i = 0; i < enc.QRCodeDimension; i++) { // reset row for (int index = 0; index < 4; index++) { blkPts2[index] = blkPts[index]; } // move up for (int index = 0; index < 4; index++) { blkPts2[index] = DPoint3d.Add(blkPts2[index], yVec, (double)i); } for (int j = 0; j < enc.QRCodeDimension; j++) { if (enc.QRCodeMatrix[i, j]) { Bentley.DgnPlatformNET.Elements.ShapeElement shapeElement = new Bentley.DgnPlatformNET.Elements.ShapeElement(Session.Instance.GetActiveDgnModel(), null, blkPts2); ElementPropertiesSetter pSetter = new ElementPropertiesSetter(); pSetter.SetColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index); pSetter.SetFillColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index); shapeElement.AddSolidFill((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index, true); pSetter.Apply(shapeElement); if (shapeElement.IsValid) { listChildElements.Add(shapeElement); } } // move across for (int index = 0; index < 4; index++) { blkPts2[index] = DPoint3d.Add(blkPts2[index], xVec); } } } DPoint3d[] blkPts3 = new DPoint3d[5]; blkPts3[0] = blkPts3[1] = blkPts3[2] = blkPts3[3] = blkPts3[4] = DPoint3d.Zero; blkPts3[1].X = 2 * enc.QuietZone + enc.QRCodeDimension; blkPts3[2].X = 2 * enc.QuietZone + enc.QRCodeDimension; blkPts3[2].Y = 2 * enc.QuietZone + enc.QRCodeDimension; blkPts3[3].Y = 2 * enc.QuietZone + enc.QRCodeDimension; Bentley.DgnPlatformNET.Elements.LineStringElement border = new LineStringElement(Session.Instance.GetActiveDgnModel(), null, blkPts3); ElementPropertiesSetter pSetter2 = new ElementPropertiesSetter(); pSetter2.SetColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index); pSetter2.Apply(border); listChildElements.Add(border); Bentley.DgnPlatformNET.Elements.CellHeaderElement codeElement = new CellHeaderElement(Session.Instance.GetActiveDgnModel(), "QRCode", new DPoint3d(0, 0, 0), cellRotation, listChildElements); // scale down to one... DMatrix3d rotMatrix = DMatrix3d.Identity; rotMatrix.ScaleInPlace((double)1.0 / (double)enc.QRCodeDimension); DTransform3d translateAndScale = DTransform3d.FromMatrixAndTranslation(rotMatrix, DPoint3d.Zero); TransformInfo transformInfo = new TransformInfo(translateAndScale); codeElement.ApplyTransform(transformInfo); CodeElement = codeElement; // might want to tag with the URL... if (CodeElement.IsValid) { base.BeginDynamics(); } } } BPSUtilities.WriteLog($"PlaceQRCode OnPostInstall Dynamics {(this.DynamicsStarted ? "is" : "is not")} started."); } catch (Exception ex) { BPSUtilities.WriteLog($"PlaceQRCode OnPostInstall {ex.Message}\n{ex.StackTrace}"); } }