【问题标题】:Printing of PDF document in C# that contains images generated from Byte array在 C# 中打印包含从字节数组生成的图像的 PDF 文档
【发布时间】:2018-02-10 05:55:57
【问题描述】:

我的网页上有两个图像,我使用iTextSharp Image 函数将数据库中的图像字节数据转换为图像。现在我想将两个图像转换为一个 PDF,然后打印 PDF。 PDF 的转换工作正常,但打印对话框未打开。我的代码如下。这里image1image2 是显示两个图像的网页中的asp:Images

protected void button_print_Click(object sender, EventArgs e)
{
    try
    {
        byte[] img1 = null;
        byte[] img2 = null;
        try
        {
            SqlCommand select = new SqlCommand("select Image1, Image2 from Images where ID=@id", con);
            select.Parameters.AddWithValue("@id", ViewState["ImageID"].ToString());
            if (con.State != ConnectionState.Open)
            {
                con.Open();
            }
            using (SqlDataReader da = select.ExecuteReader())
            {
                while (da.Read())
                {
                    img1 = (byte[])da["Image1"];
                    img2 = (byte[])da["Image2"];
                }
            }
        }
        catch
        {
            // throws exception
        }
        finally
        {
            if (con.State == ConnectionState.Open || con.State == ConnectionState.Broken)
            {
                con.Close();
            }
        }
        image1.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(img1, 0, img1.Length);
        image2.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(img2, 0, img2.Length);
        iTextSharp.text.Image imageOne = iTextSharp.text.Image.GetInstance(CreateThumbnail(img1));
        iTextSharp.text.Image imageTwo = iTextSharp.text.Image.GetInstance(CreateThumbnail(img2));
        Document document = new Document(PageSize.A4, 0f, 0f, 0f, 0f);
        using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
            document.Open();
            document.Add(imageOne);
            Paragraph line = new Paragraph("----------------------------------------------------------------------------------------------------------------------------------------------------");
            line.Alignment = Element.ALIGN_CENTER;
            document.Add(line);
            document.Add(imageTwo);
            document.Close();
            byte[] bytes = memoryStream.ToArray();
            memoryStream.Close();
        }
        // CODE FOR PRINTING THE PDF DOCUMENT
    }
    catch
    {
        // throws exception
    }
}

我不确定打开打印对话框使用什么功能。我尝试了一些,例如PrintDialog,但不确定它是如何工作的。有人可以建议我一种更好的方法来打印适用于所有网络浏览器和所有打印机的 PDF 文档吗?如果可能的话,使用打印 PDF 文档的代码。

【问题讨论】:

    标签: c# asp.net image pdf printing


    【解决方案1】:

    由于这是一个网络应用程序,它在网络浏览器中运行。您不能在不先下载 PDF 对象的情况下指示 Web 浏览器打印它。即使在下载 PDF 文档后,您也无法让 Web 应用程序在下载后自动打印 PDF。

    更好的 Web 方法是将 PDF 转换为 HTML,或者更好地确保文档及其内容本身就是一个网页。您可以通过运行一行 javascript 让网络浏览器显示打印对话框。如果你想自动拥有它,你可以把它放在页面加载事件中。

    document.addEventListener("DOMContentLoaded", function() {
      window.print();
    });
    

    【讨论】:

    • 但是在我的情况下它是如何工作的?我没有将图像保存在计算机上。图像在网页上,当我单击按钮时,它应该会自动转到打印机。这就是我使用网页上的图像自己创建 PDF 的原因。
    • 您说 PDF 的转换工作正常,所以我假设图像在其中。所以您的问题不是如何打印,而是如何正确地在 PDF 中获取这些图像?
    • 没有没有。正在将图像转换为 PDF。但是转换为PDF后,它应该会在打印对话框中自动打开,而不会将PDF保存在计算机中
    • 转换后的PDF存储在这个变量Document document = new Document(PageSize.A4, 0f, 0f, 0f, 0f);中。如何在 C# 代码中直接将其发送到打印对话框?
    • 您正在构建的应用程序是 Web 应用程序还是桌面应用程序?如果是桌面,我建议将 PDF 存储在临时目录中,然后从那里打印出来,并在答案中添加代码。要么在之后删除它,要么让操作系统负责清理它。
    猜你喜欢
    • 2015-12-23
    • 2012-07-03
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多