LEADTOOLS adding QRBarcode to an existing image

怎甘沉沦 提交于 2019-12-10 11:19:52

问题


My current code writes a qr code but it over writes my file with just the qr code. I am not sure how to adjust the size of the qr code to be placed in one corner of the document rather than taking up the whole page. Also not sure if the RasterImage.Create means that it creates a new file with just the qr and discard my original file?

Code: - Convert PDF to Bmp to add QR then saving back to PDF

 public void PDFFileExample()
    {
        RasterCodecs codecs1 = new RasterCodecs();

        codecs1.Options.Pdf.InitialPath = @"C:\LEADTOOLS 18\Bin\Dotnet4\Win32";
        codecs1.Dispose();
        RasterCodecs codecs2 = new RasterCodecs();
        codecs2.ThrowExceptionsOnInvalidImages = true;
        System.Diagnostics.Debug.Assert(codecs2.Options.Pdf.InitialPath == @"C:\LEADTOOLS 18\Bin\Dotnet4\Win32");

        string pdfFile = @"C:\QRCodeTesting\bottomRight.pdf";
        string destFileName1 = @"C:\QRCodeTesting\bottomRightOutputTemp.pdf";
        string destFileName2 = @"C:\QRCodeTesting\bottomRightOutput.bmp";

        RasterCodecs codecs = new RasterCodecs();

        if (codecs.Options.Pdf.IsEngineInstalled)
        {
            // Resulting image pixel depth.
            codecs.Options.Pdf.Load.DisplayDepth = 24;
            codecs.Options.Pdf.Load.GraphicsAlpha = 4;
            codecs.Options.Pdf.Load.Password = "";

            // Type of font anti-aliasing to use.
            codecs.Options.Pdf.Load.TextAlpha = 1;
            codecs.Options.Pdf.Load.UseLibFonts = true;

            // Horizontal,vertical  display resolution in dots per inch.
            codecs.Options.RasterizeDocument.Load.XResolution = 150;
            codecs.Options.RasterizeDocument.Load.YResolution = 150;

            using (RasterImage image = codecs.Load(pdfFile, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1))
            {

                // Set the PDF version to be v1.4
                codecs.Options.Pdf.Save.Version = CodecsRasterPdfVersion.V14;

                try
                {
                    // Save the image back as PDF
                    codecs.Save(image, destFileName1, RasterImageFormat.RasPdf, 24);
                }
                catch (RasterException ex)
                {
                    if (ex.Code == RasterExceptionCode.FileFormat)
                        MessageBox.Show(string.Format("Image in file {0} is loaded", destFileName1));
                    else
                    {
                        MessageBox.Show(string.Format("Could not load the file {0}.{1}{2}", destFileName1, Environment.NewLine, ex.Message));
                    }
                }
            }

            // And load it back before saving it as BMP
            using (RasterImage image = codecs.Load(destFileName1))
            {
                codecs.Save(image, destFileName2, RasterImageFormat.Bmp, image.BitsPerPixel);
                writeQRTag(destFileName2);
            }
        }
        else
        {
            MessageBox.Show("PDF Engine is not found!");
        }

        // Clean up
        codecs.Dispose();

    }

QRCode writing Method

private void writeQRTag(string imageFileName)
    {
        BarcodeEngine engine = new BarcodeEngine();

        // Create the image to write the barcodes to
        int resolution = 300;
        using (RasterImage image = RasterImage.Create((int)(8.5 * resolution), (int)(11.0 * resolution), 1, resolution, RasterColor.FromKnownColor(RasterKnownColor.Red)))
        {
            // Write two QR barcodes
            WriteQRCode(engine.Writer, image, QRBarcodeSymbolModel.Model1AutoSize, "QR Data 1", true);

            // Save the image
            using (RasterCodecs codecs = new RasterCodecs())
            {
                codecs.Save(image, imageFileName, RasterImageFormat.CcittGroup4, 1);
            }
        }
    }

回答1:


This is Maen from LEADTOOLS support.

I checked your code and noticed the following:

1) When you call RasterImage.Create() method, it will create a new RasterImage object that contains an empty red image, which you subsequently pass to the writeQRTag() function then save using the given file name. When you save it, the red color is replaced by black because the file format you used only supports black and white. Since you're using a new image, the old image is lost (overwritten).

If you want to write the barcode on the image from the original file, you should NOT create a new image. Instead, you need to use the image you already loaded using codecs.Load() and write the barcode on it.

2) The code performs multiple load and save operations. Normally, you don't need to do that unless your application needs the different file formats (PDF, BMP and TIFF).

3) You create different instances of our RasterCodecs object but actually use only one of them. There's no need for 3 of the 4 RasterCodecs objects in the code.

If you still face problems with the code that uses our toolkit, you can send us the details in an email to support@leadtools.com and we will try to help you.



来源:https://stackoverflow.com/questions/16596043/leadtools-adding-qrbarcode-to-an-existing-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!