簡體   English   中英

使用iTextSharp將多個圖像轉換為PDF

[英]Converting Multiple Images to PDF with iTextSharp

我正在嘗試使用C# iTextSharp將一系列從OpenFileDialog()拍攝的圖像轉換為一個PDF。 這是我正在運行的。 當我選擇文件時,出現錯誤: "System.NotSupportedException: 'Stream does not support reading.'"

在線上 :

var image = iTextSharp.text.Image.GetInstance(imageStream);

我想知道這個錯誤是什么意思,或者我可以解決該問題。 謝謝。

namespace WindowsFormsApp2
{

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private OpenFileDialog ofd = new OpenFileDialog { Multiselect = true, Filter = "Image files | * .jpg;*.jpeg;*.png;" };

    // Open file button
    private void button1_Click(object sender, EventArgs e)
    {
        // Run code only if a file is selected
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            Document doc = new Document();
            using (var stream = new FileStream("test.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
            {
                foreach (String file in ofd.SafeFileNames)
                {
                    using (var imageStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        PdfWriter.GetInstance(doc, stream);
                        doc.Open();
                        var image = iTextSharp.text.Image.GetInstance(imageStream);
                        doc.Add(image);
                        doc.Close();
                    }


                }
            }


        }
    }
}
}

這是主要代碼:

namespace WindowsFormsApp2
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

試試下面的代碼,我已經將doc的開始和結束移到了foreach循環之外。 調用doc.Close()關閉父文件流,因此僅在添加完所有圖像后才調用doc.Close()很重要。

using (var stream = File.Create("test.pdf"))
using (var doc = new Document())
using (var pdfWriter = PdfWriter.GetInstance(doc, stream))
{
    doc.Open();

    foreach (var file in ofd.SafeFileNames)
    {
        using (var imageStream = File.OpenRead(file))
        {
            var image = Image.GetInstance(imageStream);
            doc.Add(image);
        }
    }

    doc.Close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM