У нас есть PDF-файл, который мы заполняем из веб-формы через iTextSharp 5.5. Мы сохраняем этот PDF-файл в сетевом ресурсе из-за среды веб-фермы. Позже в приложении нам нужно представить заполненный pdf пользователю для чтения только для подтверждения документа перед продолжением.
PDF-файл защищен паролем, для просмотра мы обходим это с помощью:
PdfReader.unethicalreading = true;
Все это работает при разработке на одном веб-сервере или локальном хосте, если сохранить PDF-файл в папку на веб-сервере и, таким образом, прочитать с этого локального сервера.
Однако при развертывании на веб-ферме нам нужно прочитать PDF-файл. обратно из общего сетевого ресурса, таким образом, получая файл и считывая его в поток. Однако, используя эту технику, мы всегда получаем «Введите пароль, чтобы открыть PDF».
PDF отображается в iFrame со следующим:
// DOES WORK (but only on single server or localhost)
// pdfAgreement.Attributes["src"] = "PdfFolder/myfile.pdf";
// does not work
pdfAgreement.Attributes["src"] = "../ShowFile.aspx?file=myfile.pdf";
Код в ShowFile.aspx:
string path = "networkshare" + "myfile.pdf"; // Request.QueryString["file"];
FileInfo file = new FileInfo(path);
if (file.Exists)
{
PdfReader reader = new PdfReader(path);
PdfReader.unethicalreading = true;
MemoryStream ms = new MemoryStream();
PdfStamper pdfStamper = new PdfStamper(reader, ms);
pdfStamper.Writer.CloseStream = false;
pdfStamper.Close();
pdfBytes = ms.ToArray();
reader.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", pdfBytes.Length.ToString());
Response.AddHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BinaryWrite(pdfBytes);
}
Есть ли способ прочитать защищенный паролем файл из потока памяти? По какой-то причине это работает на одном веб-сервере или локальном хосте, но не в том случае, если нам нужно прочитать файл из общей папки.