2016-10-04 21 views
1

Я пишу конвертер PDF в слова, который отлично работает для меня. Но я хочу, чтобы иметь возможность конвертировать несколько файлов.Подробнее об одном файле

Что происходит сейчас, так это то, что он считывает первый файл и выполняет процесс преобразования.

public static void PdfToImage() 
{ 
    try 
    { 
     Application application = null; 
     application = new Application(); 
     var doc = application.Documents.Add(); 



     string path = @"C:\Users\Test\Desktop\pdfToWord\"; 
     foreach (string file in Directory.EnumerateFiles(path, "*.pdf")) 
     { 
      using (var document = PdfiumViewer.PdfDocument.Load(file)) 
      { 
       int pagecount = document.PageCount; 
       for (int index = 0; index < pagecount; index++) 
       { 
        var image = document.Render(index, 200, 200, true); 
        image.Save(@"C:\Users\chnikos\Desktop\pdfToWord\output" + index.ToString("000") + ".png", ImageFormat.Png); 
        application.Selection.InlineShapes.AddPicture(@"C:\Users\chnikos\Desktop\pdfToWord\output" + index.ToString("000") + ".png"); 

       } 
       string getFileName = file.Substring(file.LastIndexOf("\\")); 
       string getFileWithoutExtras = Regex.Replace(getFileName, @"\\", ""); 
       string getFileWihtoutExtension = Regex.Replace(getFileWithoutExtras, @".pdf", ""); 

       string fileName = @"C:\Users\Test\Desktop\pdfToWord\" + getFileWihtoutExtension; 
       doc.PageSetup.PaperSize = WdPaperSize.wdPaperA4; 

       foreach (Microsoft.Office.Interop.Word.InlineShape inline in doc.InlineShapes) 
       { 

        if (inline.Height > inline.Width) 
        { 
         inline.ScaleWidth = 250; 
         inline.ScaleHeight = 250; 
        } 

       } 
       doc.PageSetup.TopMargin = 28.29f; 
       doc.PageSetup.LeftMargin = 28.29f; 
       doc.PageSetup.RightMargin = 30.29f; 
       doc.PageSetup.BottomMargin = 28.29f; 

       application.ActiveDocument.SaveAs(fileName, WdSaveFormat.wdFormatDocument); 
       doc.Close(); 
      } 


     } 

Я думал, что с моим foreach эта проблема не должна возникать. И да, есть более чем один PDF в этой папке

+1

Вы открываете 'doc' _outside_ цикл' foreach' и 'doc.Close()' после того, как вы закончили первый файл _inside_ 'foreach'. Я думаю, вы хотите переместить строку 'var doc = application.Documents.Add();' _inside_ 'цикл foreach', но я не испытываю офисного взаимодействия. –

+0

@ RenéVogt Итак, я переместил doc.Close(); вне цикла foreach, и теперь он швы создает для каждого pdf файл слова, но «выходные» изображения по-прежнему соответствуют первому pdf, который он читает, а не другим –

+0

Кажется, вы не хотите комбинировать все файлы PDF в один файл слова, поэтому вам нужно добавить новый документ документа _foreach_ pdf. Поэтому переместите строку 'doc = application.Documents.Add()' _inside_ цикл вместо перемещения 'doc.Close()' снаружи. –

ответ

2

Линия

var doc = application.Documents.Add(); 

является внеforeach петли. Таким образом, вы создаете только один документ для всех ваших * .pdf-файлов.

Переместить вышеприведенную строку внутри цикл foreach, чтобы добавить новый документ Word для каждого файла * .pdf.