2010-11-16 34 views
1

Avec l'aide de ce http://msdn.microsoft.com/en-us/library/ff742315.aspx j'ai essayé de faire une conversion de docx en pdf sur sharepoint ... 1) J'ai créé un fichier cs sur le serveur de sharepoint ... 2) I compilé avec un fichier bat à une console exe 3) L'exe s'exécute mais donne une exception System.NullReferenceException: Référence d'objet non définie sur une instance d'un objet.Convertir docx en pdf avec Word Automation Services

Les fichiers existent et sont modifiables à \ mysrv \ sites \ casedocs \ Documents \ ElfDev \ 10080003 et à https: \ mysrv \ sites \ casedocs \ Documents \ ElfDev \ 10080003, ce dernier sans erreur de cert.

1) Le fichier Cs ...

using System ; 
using System.Collections.Generic ; 
using System.Linq ; 
using System.Text ; 
using Microsoft.SharePoint ; 
using Microsoft.Office.Word.Server.Conversions ; 
class Program 
{ 
    static void Main(string[] args) 
    { 
string siteUrl = "https://mysrv" ; 
string wordAutomationServicesName = "Word Automation Services" ; 
string source = siteUrl + "/sites/casedocs/Documents/ElfDev/10080003/JK1.docx" ; 
string target = siteUrl + "/sites/casedocs/Documents/ElfDev/10080003/jk1.pdf" ; 
using(SPSite spSite = new SPSite(siteUrl)) 
{ 
    ConversionJob job = new ConversionJob(wordAutomationServicesName) ; 
    job.UserToken = spSite.UserToken ; 
    job.Settings.UpdateFields = true ; 
    job.Settings.OutputFormat = SaveFormat.PDF ; 
     // System.Null reference exception on next line ... 
    job.AddFile(source , target ) ; 
} 
    } 
} 

2) Le fichier bat compilateur ...

csc /out:d2p.exe /target:exe d2pMain.cs /r:"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.SharePoint.dll" /r:"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.Office.Word.Server.dll" 

3. L'exception complète ...

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. 
    at Microsoft.Office.Word.Server.FolderIterator.CheckInputFile(SPListItem item) 
    at Microsoft.Office.Word.Server.FolderIterator.CheckSingleItem(SPFile inputFile, SPFile outputFile) 
    at Microsoft.Office.Word.Server.Conversions.ConversionJob.AddFileCore(String inputFileName, String outputFileName) 
    at Microsoft.Office.Word.Server.Conversions.ConversionJob.AddFile(String inputFile, String outputFile) at Program.Main(String[] args) 

On dirait qu'il ne peut pas voir le fichier d'entrée, mais a) \ mysrv \ sites \ casedocs \ Documents \ ElfDev \ 10080003 \ jk1.docx ouvrira le fichier dans le mot 2010 et b) https://mysrv/sites/casedocs/Documents/ElfDev/10080003/jk1.docx ouvre le fichier dans Word 2010

Répondre

1

Le problème est que lors de l'exécution dans une application de console, et vous n'avez pas de contexte HTTP lorsque vous utilisez la version serveur de Microsoft.SharePoint.dll.

Le code explose parce qu'il s'attend à avoir le contenu HTTP dans la variable Microsoft.SharePoint.SPContext.

Pour que ce code fonctionne, vous devez l'exécuter sur le serveur Web SharePoint IIS.

Convertissez votre code en classe, compilez-le dans une fonctionnalité SharePoint et un package de solution (.WSP) et déployez-le dans la batterie de serveurs SharePoint. Ensuite, le code fonctionnera, car Microsoft.SharePoint.SPContent sera rempli et ne sera pas nul.