2015-08-13 33 views
10

Próbuję przekonwertować zabezpieczone pliki PDF na XPS iz powrotem na format PDF za pomocą FreeSpire, a następnie połączyć je za pomocą iTextSharp. Poniżej znajduje się mój fragment kodu służący do konwersji różnych plików.Błąd: Wartość nie może być pusta

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(); 
       } 

Zagadnienie to dostaję Value cannot be null error w doc.LoadFromFile(Loan_list[f]); .I mają string path = Loan_list[f]; aby sprawdzić, czy Loan_list [f] był pusty, ale tak nie było. Próbowałem zastąpić parametr Loan_list[f] zmienną o nazwie path, ale także nie przechodzi. Testowałem konwersji PDF na mniejszą skalę nią to działało (patrz niżej)

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(); 

Chciałbym zrozumieć, dlaczego ja dostaję ten błąd i jak go naprawić.

+0

w tym wierszu 'ciąg WorkDir = @" C: \ Users \ rwong \ Desktop \ PDF \ Test ";' spróbuj zmienić kod na następujący 'string WorkDir = @" C: \ Users \ rwong \ Desktop \ PDF \ Test \ ";' i sprawdź, czy to rozwiązało problem. – MethodMan

+0

Nie, to nie miało znaczenia. Próbowałem nawet dodać drugi parametr w LoadFromFile (Loan_list [f], FileFormat.PDF), ale bez kości – LampPost

+0

Czy wypróbowałeś to bez parametru 'FileFormat.DOC'? Czy próbowałeś umieścić literalną ścieżkę wewnątrz pierwszego parametru? Czy to działa, jeśli zrobiłeś jedną z tych rzeczy? –

Odpowiedz

4

Zaistniałoby 2 rozwiązanie problemu, przed którym stoisz.

  1. Pobierz dokument w Document Przedmiot nie PDFDocument. A następnie prawdopodobnie próbować SaveToFile coś takiego

    Document document = new Document(); 
    //Load a Document in document Object 
    document.SaveToFile("Sample.pdf", FileFormat.PDF); 
    
  2. Można wykorzystać dolarów za ten sam coś takiego

    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); 
    

Drugie podejście jest łatwa, ale polecam Ci użyj pierwszego, ponieważ z oczywistych powodów, takich jak dokument, da się lepiej przekonwertować niż strumień. Ponieważ dokument zawiera sekcję, akapit, ustawienia strony, tekst i czcionki, wszystko, co musi być wymagane do lepszego lub dokładniejszego formatowania.

+0

Dziękuję za twój wkład! Podczas próby użycia twojego pierwszego rozwiązania nie mam opcji "SaveToFile" jako opcji. Czy wiesz dlaczego? – LampPost

+0

Jestem pewien, że ten [link] (http://www.e-iceblue.com/Knowledgebase/Spire.Doc/Spire.Doc-Program-Guide/Conversion.html) pomoże ci –