2014-02-19 65 views
0

我試圖使用iTextSharp庫存儲和更新PDF文件目錄中的字符串。我可以在標準桌面應用程序中正常執行此操作,但我無法將其保存到SharePoint服務器上(作爲使用C#編寫的SharePoint功能的一部分)。iTextSharp - 更新SharePoint文檔庫中的PDF目錄

我有一個SPFile,它是SharePoint文檔庫中最近添加的PDF文件。

我能夠通過使用

  reader = new PdfReader(File.OpenBinaryStream()); 
      PdfName name = new PdfName(propertyName); 
      PdfString propertyValue = (PdfString)reader.Catalog.Get(name); 

如果propertyName的財產的價值都存儲在PDF目錄中的鍵值對讀取現有目錄屬性出來的文件。

我被困在如何更新該屬性並將文件保存回SharePoint文檔庫。有什麼辦法可以做到嗎? reader.catalog.put似乎並未實際更改文件,或者至少這些更改未被保存到文檔庫中。

回答

3

你能否提供一點點的代碼?在您的示例中,我看到您創建了PdfReader,但無法使用PdfReader更新Pdf文檔。你應該使用PdfStamper。

我試過下面這段代碼,它適用於我的SharePoint 2013自動託管應用程序。以下代碼從庫中更​​改PDF文檔的文檔標題。

//Open binary stream from library 
ClientResult<Stream> stream = file.OpenBinaryStream(); 
clientContext.Load(file); 
clientContext.ExecuteQuery(); 

//Initialize PdfReader 
var reader = new PdfReader(stream.Value); 

//We will write output file into memory. You can use temp file of course. 
var ms = new MemoryStream(); 

//Initialize PdfStamper 
var stamper = new PdfStamper(reader, ms); 

//Tell stamper not to close stream when stamper itself is being closed 
stamper.Writer.CloseStream = false; 

//Change Title to "New Document Title" 
var moreInfo = new Dictionary<string, string>(); 
moreInfo["Title"] = "New Document Title"; 
stamper.MoreInfo = moreInfo; 

//Close stamper, readed 
stamper.Close(); 
reader.Close(); 

//Flush memory stream and set it position to start 
ms.Flush(); 
ms.Position = 0; 

//Update library item with new content 
var bi = new FileSaveBinaryInformation(); 
bi.ContentStream = ms; 
file.SaveBinary(bi); 
clientContext.Load(file); 
clientContext.ExecuteQuery(); 

//Finally, close the stream 
ms.Close(); 

就這樣。希望能幫助到你。