Il metodo My web crea un file pdf nella mia cartella% temp% e funziona. Poi voglio aggiungere alcuni campi personalizzati (meta) a quel file usando il codice qui sotto.Impossibile accedere al file perché è utilizzato da un altro processo
La classe PdfStamper
genera un IOException
, se uso il suo metodo .Close()
o il blocco using
appena termina. Il processo che è ancora in attesa sull'handle del file è il server web di webdev stesso (sto eseguendo il debug in VS2010 SP1).
private string AddCustomMetaData(string guid, int companyID, string filePath)
{
try
{
PdfReader reader = new PdfReader(filePath);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
PdfStamper st = new PdfStamper(reader, fs);
Dictionary<string, string> info = reader.Info;
info.Add("Guid", guid);
info.Add("CompanyID", companyID.ToString());
st.MoreInfo = info;
st.Close();
}
reader.Close();
return guid;
}
catch (Exception e)
{
return e.Message;
}
}
Non importa quello che provo, che mantiene gettando l'eccezione in st.Close();
, per essere più precisi:
Il processo non può accedere al file 'C: \ Users [mia nome utente] \ AppData \ Local \ Temp \ 53b96eaf-74a6-49d7-a715-6c2e866a63c3.pdf ' perché è utilizzato da un altro processo.
O sto trascurando qualcosa di ovvio o c'è un problema con la classe PdfStamper
di cui sono ancora inconsapevole. Le versioni di itextsharp utilizzate sono 5.3.3.0 e 5.4.0.0, il problema è lo stesso.
Qualsiasi intuizione sarebbe molto apprezzata.
EDIT: Attualmente sto "codificando" il problema, ma non ho trovato alcuna soluzione.
sei sicuro che il file non sia in uso prima che il lettore di PDF lo apra? (come in quello che stai facendo con questo file prima di questo) – Sayse
meglio ancora, prova a cambiare l'ordine di apertura del file ('filestream' prima di 'pdf reader') – Sayse