我正在尝试转换一系列的图像从OpenFileDialog()到一个PDF使用C#中的iTextSharp。这就是我正在运行的。当我选择文件时,我得到错误:"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());
}
}
}发布于 2018-05-17 13:21:01
尝试下面的代码,我已经将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();
}https://stackoverflow.com/questions/50383513
复制相似问题