Example #1
0
        private byte[] ManipulatePdf(PDFQRConfiguration settings)
        {
            using var writer = new MemoryStream();
            var pdfDoc = new PdfDocument(new PdfWriter(writer));
            var doc    = new Document(pdfDoc, iText.Kernel.Geom.PageSize.A4);

            doc.SetTopMargin(settings.PageMarginTop);
            doc.SetLeftMargin(settings.PageMarginLeft);
            doc.SetBottomMargin(settings.PageMarginBottom);
            doc.SetRightMargin(settings.PageMarginRight);
            var table = new Table(UnitValue.CreatePercentArray(settings.Columns)).UseAllAvailableWidth();

            for (long i = settings.OffsetIter; i < settings.OffsetIter + settings.Count; i += settings.Increment)
            {
                if (settings.Type == "BarCode")
                {
                    table.AddCell(CreateBarcode($"{i + settings.OffsetBranch}", pdfDoc, settings));
                }
                else
                {
                    table.AddCell(CreateQRCode($"{i + settings.OffsetBranch}", pdfDoc, settings));
                }
            }

            doc.Add(table);

            doc.SetMargins(settings.PageMarginTop, settings.PageMarginRight, settings.PageMarginBottom, settings.PageMarginLeft);
            doc.Close();
            return(writer.ToArray());
        }
Example #2
0
        private Cell CreateQRCode(string code, PdfDocument pdfDoc, PDFQRConfiguration settings)
        {
            Cell ret = new Cell();

            Table table = new Table(UnitValue.CreatePercentArray(2)).UseAllAvailableWidth();

            table.SetBorderCollapse(BorderCollapsePropertyValue.COLLAPSE);
            table.AddCell(MakeCell(code, pdfDoc, settings));
            table.AddCell(MakeCell(code, pdfDoc, settings));
            ret.Add(table);
            ret.SetBorder(new iText.Layout.Borders.DottedBorder(iText.Kernel.Colors.ColorConstants.LIGHT_GRAY, 1));
            return(ret);
        }
Example #3
0
        private Cell MakeCell(string code, PdfDocument pdfDoc, PDFQRConfiguration settings)
        {
            Cell cell = new Cell();

            cell.SetKeepTogether(true);
            cell.SetBorder(iText.Layout.Borders.Border.NO_BORDER);
            cell.SetHorizontalAlignment(HorizontalAlignment.CENTER);
            cell.SetVerticalAlignment(VerticalAlignment.MIDDLE);

            Paragraph p = new Paragraph(settings.Prefix);

            p.SetTextAlignment(TextAlignment.CENTER);
            p.SetVerticalAlignment(VerticalAlignment.BOTTOM);
            p.SetMargin(0);
            p.SetPadding(0);
            cell.Add(p);
            BarcodeQRCode  barcode       = new BarcodeQRCode($"{settings.Prefix}{code}");
            PdfFormXObject barcodeObject = barcode.CreateFormXObject(pdfDoc);

            // Create barcode object to put it to the cell as image
            var image = new Image(barcodeObject);

            image.SetMargins(0, 0, 0, 0);
            image.Scale(settings.Scale, settings.Scale);
            image.SetPadding(0);
            cell.Add(image);
            cell.SetPaddingTop(settings.CellPaddingTop);
            cell.SetPaddingRight(settings.CellPaddingRight);
            cell.SetPaddingBottom(settings.CellPaddingBottom);
            cell.SetPaddingLeft(settings.CellPaddingLeft);
            cell.SetBorder(iText.Layout.Borders.Border.NO_BORDER);


            p = new Paragraph(code);
            p.SetTextAlignment(TextAlignment.CENTER);
            p.SetVerticalAlignment(VerticalAlignment.TOP);
            p.SetMargin(0);
            p.SetPadding(0);
            cell.Add(p);
            return(cell);
        }
Example #4
0
        private Cell CreateBarcode(string code, PdfDocument pdfDoc, PDFQRConfiguration settings)
        {
            var barcode = new Barcode39(pdfDoc);

            barcode.SetCodeType(Barcode39.ALIGN_CENTER);
            barcode.SetCode(code);
            barcode.SetBarHeight(settings.Height);
            barcode.FitWidth(settings.Width);

            // Create barcode object to put it to the cell as image
            var barcodeObject = barcode.CreateFormXObject(null, null, pdfDoc);
            var cell          = new Cell().Add(new Image(barcodeObject));

            cell.SetPaddingTop(settings.CellPaddingTop);
            cell.SetPaddingRight(settings.CellPaddingRight);
            cell.SetPaddingBottom(settings.CellPaddingBottom);
            cell.SetPaddingLeft(settings.CellPaddingLeft);

            cell.SetBorder(new iText.Layout.Borders.DottedBorder(iText.Kernel.Colors.ColorConstants.LIGHT_GRAY, 1));


            return(cell);
        }
Example #5
0
        public async Task <IActionResult> GeneratePDF([FromBody] PDFQRConfiguration configuration)
        {
            try
            {
                var baseConfig = new PDFQRConfiguration();
                if (configuration.CellPaddingBottom == default)
                {
                    configuration.CellPaddingBottom = baseConfig.CellPaddingBottom;
                }

                if (configuration.CellPaddingLeft == default)
                {
                    configuration.CellPaddingLeft = baseConfig.CellPaddingLeft;
                }

                if (configuration.CellPaddingRight == default)
                {
                    configuration.CellPaddingRight = baseConfig.CellPaddingRight;
                }

                if (configuration.CellPaddingTop == default)
                {
                    configuration.CellPaddingTop = baseConfig.CellPaddingTop;
                }

                if (configuration.Columns == default)
                {
                    configuration.Columns = baseConfig.Columns;
                }

                if (configuration.Count == default)
                {
                    configuration.Count = baseConfig.Count;
                }

                if (configuration.Height == default)
                {
                    configuration.Height = baseConfig.Height;
                }

                if (configuration.OffsetBranch == default)
                {
                    configuration.OffsetBranch = baseConfig.OffsetBranch;
                }

                if (configuration.OffsetIter == default)
                {
                    configuration.OffsetIter = baseConfig.OffsetIter;
                }

                if (configuration.PageMarginBottom == default)
                {
                    configuration.PageMarginBottom = baseConfig.PageMarginBottom;
                }

                if (configuration.PageMarginLeft == default)
                {
                    configuration.PageMarginLeft = baseConfig.PageMarginLeft;
                }

                if (configuration.PageMarginRight == default)
                {
                    configuration.PageMarginRight = baseConfig.PageMarginRight;
                }

                if (configuration.PageMarginTop == default)
                {
                    configuration.PageMarginTop = baseConfig.PageMarginTop;
                }

                if (configuration.Prefix == default || configuration.Prefix == "string")
                {
                    configuration.Prefix = baseConfig.Prefix;
                }

                if (configuration.Scale == default)
                {
                    configuration.Scale = baseConfig.Scale;
                }

                if (configuration.Type == default)
                {
                    configuration.Type = baseConfig.Type;
                }

                if (configuration.Width == default)
                {
                    configuration.Width = baseConfig.Width;
                }

                if (configuration.Increment == default)
                {
                    configuration.Increment = baseConfig.Increment;
                }

                if (configuration.TopTextSize == default)
                {
                    configuration.TopTextSize = baseConfig.Increment;
                }

                if (configuration.BottomTextSize == default)
                {
                    configuration.BottomTextSize = baseConfig.Increment;
                }

                if (configuration.Count > 100000)
                {
                    throw new Exception("Limit has been reached");
                }

                return(File(ManipulatePdf(configuration), "application/pdf", $"qr-{configuration.Prefix}-{configuration.OffsetIter}-{configuration.Count}.pdf"));
            }
            catch (Exception exc)
            {
                return(BadRequest(new ProblemDetails()
                {
                    Detail = exc.Message
                }));
            }
        }
Example #6
0
        private Cell MakeCell(string code, PdfDocument pdfDoc, PDFQRConfiguration settings)
        {
            var cell = new Cell();

            cell.SetKeepTogether(true);
            cell.SetBorder(iText.Layout.Borders.Border.NO_BORDER);
            cell.SetHorizontalAlignment(HorizontalAlignment.CENTER);
            cell.SetVerticalAlignment(VerticalAlignment.MIDDLE);
            if (settings.PrefixAboveQR)
            {
                var p = new Paragraph(settings.Prefix);
                p.SetFontSize(settings.TopTextSize);
                p.SetTextAlignment(TextAlignment.CENTER);
                p.SetVerticalAlignment(VerticalAlignment.BOTTOM);
                p.SetMargin(0);
                p.SetPadding(0);
                cell.Add(p);
            }
            var qrParam = new Dictionary <EncodeHintType, object>
            {
                [EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.H,
                [EncodeHintType.CHARACTER_SET]    = "ASCII"
            };

            var codeInQR = "";

            if (settings.IncludePrefixInQR)
            {
                codeInQR = $"{settings.Prefix}{code}";
            }
            else
            {
                codeInQR = $"{code}";
            }

            var barcode       = new BarcodeQRCode(codeInQR, qrParam);
            var barcodeObject = barcode.CreateFormXObject(pdfDoc);

            // Create barcode object to put it to the cell as image
            var image = new Image(barcodeObject);

            image.SetMargins(0, 0, 0, 0);
            image.Scale(settings.Scale, settings.Scale);
            image.SetPadding(0);
            cell.Add(image);
            cell.SetPaddingTop(settings.CellPaddingTop);
            cell.SetPaddingRight(settings.CellPaddingRight);
            cell.SetPaddingBottom(settings.CellPaddingBottom);
            cell.SetPaddingLeft(settings.CellPaddingLeft);
            cell.SetBorder(iText.Layout.Borders.Border.NO_BORDER);

            if (settings.PrefixAboveQR)
            {
                var p = new Paragraph(code);
                p.SetFontSize(settings.BottomTextSize);
                p.SetTextAlignment(TextAlignment.CENTER);
                p.SetVerticalAlignment(VerticalAlignment.TOP);
                p.SetMargin(0);
                p.SetPadding(0);
                cell.Add(p);
            }
            else
            {
                var p = new Paragraph($"{settings.Prefix}{code}");
                p.SetFontSize(settings.BottomTextSize);
                p.SetTextAlignment(TextAlignment.CENTER);
                p.SetVerticalAlignment(VerticalAlignment.TOP);
                p.SetMargin(0);
                p.SetPadding(0);
                cell.Add(p);
            }
            return(cell);
        }