Как создать zip-файл для изображений, преобразованных из PDF в PNG
Я хочу сохранить файлы, преобразованные из PDF в PNG, в zip-файле. До сих пор я могу конвертировать один PDF-документ в формат PNG, но если PDF имеет несколько страниц, мое приложение только скрывает и сохраняет их по отдельности (по одному за раз), в котором мне приходится неоднократно нажимать кнопку Сохранить, прежде чем будет сохранена следующая страница из PDF и т. д.
Что я уже пробовал:
Я использую Syncfusion для преобразования документов и DotNetZip для архивирования файлов. Вот мой код:
//Loaded PDF file PdfLoadedDocument loadedDocument = new PdfLoadedDocument(TxtBox_FileName.Text); //ExportAsImage method returns specified page in the PDF document as Bitmap image Bitmap[] images = loadedDocument.ExportAsImage(0, loadedDocument.Pages.Count - 1); Image imageToConvert = null; for (int i = 0; i < images.Length; i++) { if(i == 0) { //Save converted image if PDF is single page imageToConvert = images[i]; SaveFileDialog _saveFile = new SaveFileDialog(); _saveFile.Title = "Save file"; _saveFile.Filter = "PNG|*.png"; _saveFile.FileName = Lbl_FileName.Text; if (_saveFile.ShowDialog() == DialogResult.OK) { imageToConvert.Save(_saveFile.FileName, ImageFormat.Png); loadedDocument.Close(true); imageToConvert.Dispose(); } } else { //Save converted images if PDF is multi-page Image imageToConvert2 = images[i]; SaveFileDialog _saveFile = new SaveFileDialog(); _saveFile.Title = "Save file"; _saveFile.Filter = "PNG|*.png"; _saveFile.FileName = Lbl_FileName.Text; if (_saveFile.ShowDialog() == DialogResult.OK) { imageToConvert2.Save(_saveFile.FileName, ImageFormat.Png); //Create a zip file for all the images string fileName = TxtBox_FileName.Text; Thread thread = new Thread(t => { using (ZipFile zip = new ZipFile()) { FileInfo fileInfo = new FileInfo(fileName); zip.AddFile(fileName); DirectoryInfo di = new DirectoryInfo(fileName); zip.Save(string.Format("{0}/{1}.zip", di.Parent.FullName, fileInfo.Name)); } }) { IsBackground = true }; thread.Start(); } loadedDocument.Close(true); imageToConvert2.Dispose(); } }
Большое вам спасибо за вашу помощь!
Richard MacCutchan
Вы создаете новый zip-файл для каждого изображения. Вы должны создать zip-файл до начала цикла и добавить в него все изображения по мере их преобразования.
Maciej Los
Звучит как ответ.
Richard MacCutchan
На самом деле это всего лишь предположение. :)
Member 14766911
Привет, спасибо за ваше предложение. Я переместил цикл и коды saveFileDialog и поместил их внутрь - там, где я создаю zip-файл, но у меня все еще есть тот же результат.
Он по-прежнему преобразует все страницы в формате PDF в изображения, но мне приходится постоянно нажимать на кнопку Ok, когда появляется следующее окно SaveFileDialog, чтобы сохранить следующее изображение, которое было преобразовано.
Richard MacCutchan
Это происходит потому, что вы пытаетесь сохранить его каждый раз, когда добавляете изображение в zip; вы не должны делать этого, пока цикл не закончится.