2015-07-06 4 views
0

Я пытаюсь преобразовать, как строку, так и документ .rtf в документ PDF. До сих пор я имел смешанный успех. Я попробовал 3 разных способа (код ниже), чтобы превратить текст в PDF. Все они компилируют, запускают и создают PDF-файл, но во всех папках документ заканчивается поврежденным. Ошибка: Link (https://www.dropbox.com/s/j7sckgwm10gf5ml/PdfError.jpg?dl=0)Преобразование строки/*. Rtf в PDF

  1. Превратить простую строку в PDF документ

    String msg = "dfsgfdsgdfgfdf"; 
    
    byte[] messageBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(msg); 
    
    System.IO.FileStream stream = new System.IO.FileStream(@"C:\\file.pdf", System.IO.FileMode.CreateNew); 
    System.IO.BinaryWriter writer = new BinaryWriter(stream); 
    writer.Write(messageBytes, 0, messageBytes.Length); 
    writer.Close(); 
    
  2. Аналогично методу методу 1 .:

    //String myString: Contains the rft document loaded from the RTF file 
    byte[] messageBytes = Encoding.UTF8.GetBytes(myString); 
    System.IO.File.WriteAllBytes(@"C:\foo.pdf", messageBytes); 
    
  3. а также более сложная попытка 3:

    public void wordToPDF() { 
    
        ApplicationClass wordApplication = new ApplicationClass(); 
        Document wordDocument = null; 
        object paramSourceDocPath = @"C:\rtfdoc.rtf"; 
        object paramMissing = Type.Missing; 
    
        string paramExportFilePath = @"C:\pdfdoc.pdf"; 
        WdExportFormat paramExportFormat = WdExportFormat.wdExportFormatXPS; 
        bool paramOpenAfterExport = false; 
        WdExportOptimizeFor paramExportOptimizeFor = 
         WdExportOptimizeFor.wdExportOptimizeForPrint; 
        WdExportRange paramExportRange = WdExportRange.wdExportAllDocument; 
        int paramStartPage = 0; 
        int paramEndPage = 0; 
        WdExportItem paramExportItem = WdExportItem.wdExportDocumentContent; 
        bool paramIncludeDocProps = true; 
        bool paramKeepIRM = true; 
        WdExportCreateBookmarks paramCreateBookmarks = 
         WdExportCreateBookmarks.wdExportCreateWordBookmarks; 
        bool paramDocStructureTags = true; 
        bool paramBitmapMissingFonts = true; 
        bool paramUseISO19005_1 = false; 
    
        try 
        { 
         // Open the source document. 
         wordDocument = wordApplication.Documents.Open(
          ref paramSourceDocPath, ref paramMissing, ref paramMissing, 
          ref paramMissing, ref paramMissing, ref paramMissing, 
          ref paramMissing, ref paramMissing, ref paramMissing, 
          ref paramMissing, ref paramMissing, ref paramMissing, 
          ref paramMissing, ref paramMissing, ref paramMissing, 
          ref paramMissing); 
    
         // Export it in the specified format. 
         if (wordDocument != null) 
          wordDocument.ExportAsFixedFormat(paramExportFilePath, 
           paramExportFormat, paramOpenAfterExport, 
           paramExportOptimizeFor, paramExportRange, paramStartPage, 
           paramEndPage, paramExportItem, paramIncludeDocProps, 
           paramKeepIRM, paramCreateBookmarks, paramDocStructureTags, 
           paramBitmapMissingFonts, paramUseISO19005_1, 
           ref paramMissing); 
        } 
        catch (Exception e) 
        { 
         MessageBox.Show(e.Message); 
        } 
        finally 
        { 
         // Close and release the Document object. 
         if (wordDocument != null) 
         { 
          wordDocument.Close(ref paramMissing, ref paramMissing, 
           ref paramMissing); 
          wordDocument = null; 
         } 
    
         // Quit Word and release the ApplicationClass object. 
         if (wordApplication != null) 
         { 
          wordApplication.Quit(ref paramMissing, ref paramMissing, 
           ref paramMissing); 
          wordApplication = null; 
         } 
    
         GC.Collect(); 
         GC.WaitForPendingFinalizers(); 
         GC.Collect(); 
         GC.WaitForPendingFinalizers(); 
        }   
    } 
    

PS: В случаях 2 и 3 я загружаю RTF документ, который содержит специальные (немецкий) символов, в случае 1. Это просто простая строка, которую вы видите в коде, но все это заканчивается (см. изображение с вышеприведенной ошибкой)

Я надеюсь, что кто-то может мне помочь или указать мне в правильном направлении.

+1

Как об использовании библиотеки в формате PDF, как http://sourceforge.net/projects/itextsharp/ или http://pdfsharp.codeplex.com/ – EZI

+1

Решение 1) и 2) не может работать, потому что вы экспортировали текст только без форматирования. Стандартные читатели в формате PDF ожидают некоторой инкапсуляции. – Graffito

+0

Невозможно реализовать надежный писатель PDF, основанный на ответах на такой вопрос. В формате PDF есть больше возможностей, чем можно решить в одном вопросе переполнения стека. Либо используйте библиотеку, либо получите копию спецификации (свободно доступной от Adobe). –

ответ

1

для решения 3, попробуйте изменить paramExportFormat:

object paramExportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF; 
+0

После этого я получаю ошибку времени выполнения: https://www.dropbox.com/s/ujhanzidpbezlgp/RuntimeErr.png?dl=0 – user3557388

+0

Измените первый параметр wordApplication.Quit на Word.WdSaveOptions.wdDoNotSaveChanges. – Graffito

+0

Выполнение этой ошибки приводит к следующей ошибке выполнения: – user3557388

Смежные вопросы