2015-08-13 156 views
10

我試圖將安全的PDF轉換爲XPS並使用FreeSpire返回到PDF,然後使用iTextSharp將它們組合在一起。以下是我用於轉換各種文件的代碼片段。錯誤:值不能爲空

char[] delimiter = { '\\' }; 
string WorkDir = @"C:\Users\rwong\Desktop\PDF\Test"; 
Directory.SetCurrentDirectory(WorkDir); 
string[] SubWorkDir = Directory.GetDirectories(WorkDir); 
//convert items to PDF 
foreach (string subdir in SubWorkDir) 
{ 
    string[] Loan_list = Directory.GetFiles(subdir); 
    for (int f = 0; f < Loan_list.Length - 1; f++) 
    { 
     if (Loan_list[f].EndsWith(".doc") || Loan_list[f].EndsWith(".DOC")) 
     { 
      Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument(); 
      doc.LoadFromFile(Loan_list[f], FileFormat.DOC); 
      doc.SaveToFile((Path.ChangeExtension(Loan_list[f],".pdf")), FileFormat.PDF); 
      doc.Close(); 
     } 
     . //other extension cases 
     . 
     . 
     else if (Loan_list[f].EndsWith(".pdf") || Loan_list[f].EndsWith(".PDF")) 
     { 
      PdfReader reader = new PdfReader(Loan_list[f]); 
      bool PDFCheck = reader.IsOpenedWithFullPermissions; 
      reader.Close(); 
      if (PDFCheck) 
      { 
       Console.WriteLine("{0}\\Full Permisions", Loan_list[f]); 
       reader.Close(); 
      } 
      else 
      { 
       Console.WriteLine("{0}\\Secured", Loan_list[f]); 
       Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument(); 
       string path = Loan_List[f]; 
       doc.LoadFromFile(Loan_list[f]); 
       doc.SaveToFile((Path.ChangeExtension(Loan_list[f], ".xps")), FileFormat.XPS); 
       doc.Close(); 

       Spire.Pdf.PdfDocument doc2 = new Spire.Pdf.PdfDocument(); 
       doc2.LoadFromFile((Path.ChangeExtension(Loan_list[f], ".xps")), FileFormat.XPS); 
       doc2.SaveToFile(Loan_list[f], FileFormat.PDF); 
       doc2.Close(); 
       } 

的問題是,我得到一個Value cannot be null errordoc.LoadFromFile(Loan_list[f]);。我有string path = Loan_list[f];檢查Loan_list [F]是空的,但事實並非如此。我試圖用名爲path的變量替換Loan_list[f]參數,但它也不會去。我測試規模較小但它的工作的PDF轉換(見下文)

string PDFDoc = @"C:\Users\rwong\Desktop\Test\Test\Test.PDF"; 
string XPSDoc = @"C:\Users\rwong\Desktop\Test\Test\Test.xps"; 

//Convert PDF file to XPS file 
PdfDocument doc = new PdfDocument(); 
doc.LoadFromFile(PDFDoc); 
doc.SaveToFile(XPSDoc, FileFormat.XPS); 
doc.Close(); 

//Convert XPS file to PDF 
PdfDocument doc2 = new PdfDocument(); 
doc2.LoadFromFile(XPSDoc, FileFormat.XPS); 
doc2.SaveToFile(PDFDoc, FileFormat.PDF); 
doc2.Close(); 

我想知道爲什麼我收到此錯誤,以及如何解決它。

+0

'string WorkDir = @「C:\ Users \ rwong \ Desktop \ PDF \ Test」;'嘗試將代碼更改爲以下內容 'string WorkDir = @「C:\ Users \ rwong \ Desktop \ PDF \ Test \「;'看看是否可以解決問題 – MethodMan

+0

不是,它沒有什麼區別。我甚至嘗試在LoadFromFile(Loan_list [f],FileFormat.PDF)中添加另一個參數,但沒有骰子 – LampPost

+0

您是否嘗試過不使用FileFormat.DOC參數?你有沒有嘗試把第一個參數的文字路徑?如果你做了這些事情之一,它會起作用嗎? –

回答

4

對於您面臨的問題,會有2種解決方案。

  1. 獲取文檔Document對象不在PDFDocument。然後可能會嘗試SaveToFile像這樣的事情

    Document document = new Document(); 
    //Load a Document in document Object 
    document.SaveToFile("Sample.pdf", FileFormat.PDF); 
    
  2. 可以使用流爲同一像這樣

    PdfDocument doc = new PdfDocument(); 
    //Load PDF file from stream. 
    FileStream from_stream = File.OpenRead(Loan_list[f]); 
    //Make sure the Loan_list[f] is the complete path of the file with extension. 
    doc.LoadFromStream(from_stream); 
    //Save the PDF document. 
    doc.SaveToFile(Loan_list[f] + ".pdf",FileFormat.PDF); 
    

第二種方法是最簡單的一個,但我會建議你由於顯而易見的原因使用第一個,比如文檔會給出比流更好的可轉換性。由於該文檔具有部分,段落,頁面設置,文本,字體等所有需要做的更好或更精確的格式要求。

+0

感謝您的輸入!在嘗試使用第一個解決方案時,我沒有'SaveToFile'作爲選項。你知道爲什麼嗎? – LampPost

+0

我確信這[鏈接](http://www.e-iceblue.com/Knowledgebase/Spire.Doc/Spire.Doc-Program-Guide/Conversion.html)會幫助你 –