如何使用PDFsharp将动态生成的位图插入PDF文档?

时间:2015-06-12 17:57:45

标签: c# pdf bitmap memorystream pdfsharp

我正在尝试使用PDFsharp将动态生成的QR码位图插入到PDF文档中。我不想将位图保存到文件中,只是想将其插入到PDF中。我遇到的问题是DrawImage命令正在寻找图像文件所在的字符串。但我不想保存文件,我只想将其插入PDF文档。有没有办法做到这一点?

var QRCode_BMP = _generalCode.QR_CodeGenerator(AddReviewPath); //This generates the bitmap
MemoryStream streamQR = new MemoryStream();
QRCode_BMP.Save(streamQR, System.Drawing.Imaging.ImageFormat.Jpeg); //save bitmap into memory stream in jpeg format System.Drawing.Image QR_Jpeg = System.Drawing.Image.FromStream(streamQR);// save memory stream to image file
XImage xImage = XImage.FromGdiPlusImage(QR_Jpeg);
gfx = XGraphics.FromPdfPage(page);

DrawImage(gfx, xImage, 0, 0, 100, 100); //This is not working

QRCode_BMP.Dispose();
streamQR.Close();
gfx.Dispose();

2 个答案:

答案 0 :(得分:1)

您在QRCode_BMP中创建了一个二维码,然后从QR_Jpeg创建一个XImage,并将其写为无效。

QRCode_BMP仅用于创建从未使用过的流。我们不知道QR_Jpeg来自哪里。

提供完整的样本。

BTW:您可以使用XImage.FromStream来使用您创建的流。

P.S。:恕我直言JPEG是QR码的不良选择。只需使用BMP,PDFsharp就会使用无损压缩。

答案 1 :(得分:0)

这就是我的工作方式;

        PdfDocument pdf = PdfGenerator.GeneratePdf("<b>some html here</b>", PageSize.A4);

        QRCodeGenerator qrGenerator = new QRCodeGenerator();
        QRCodeData qrCodeData = qrGenerator.CreateQrCode("some text here", QRCodeGenerator.ECCLevel.Q);
        QRCode qrCode = new QRCode(qrCodeData);

        Bitmap qrCodeImage = qrCode.GetGraphic(10);


        PdfPage page = pdf.Pages[0]; //I will add it to 1st page

        // Get an XGraphics object for drawing
        XGraphics gfx = XGraphics.FromPdfPage(page);

        XImage image = XImage.FromGdiPlusImage(qrCodeImage); //you can use XImage.FromGdiPlusImage to get the bitmap object as image (not a stream)
        gfx.DrawImage(image, 50, 50, 150, 150);
//save your pdf, dispose other objects