У меня есть метод, который использует Microsoft.Office.Interop для чтения документа Word, его редактирования и записи в формате PDF. У меня есть отдельный метод, который использует Itext7 для чтения этого PDF-файла и записи его в другой PDF-файл, который можно просматривать и распечатывать, но нельзя легко изменить.
Первый метод считывает документ word с диска; однако меня попросили заставить его прочитать документ из запроса sql из переменной, хранящейся как varbinary, и записать конечный результат как varbinary -w без использования любых промежуточных файлов на диске. Я думаю, что мне нужно прочитать их как "потоки"
Вот что у меня есть:
class clsMakeCert
{
string myName;
public string myDate;
public clsMakeCert(string name, DateTime date)
{
myName = name;
myDate = date.ToString("MM/dd/yyyy");
}
public void createCertPdf(string certFilename)
{
// Get the document out of the SQL table
System.Data.DataTable dtContents = new System.Data.DataTable();
SqlDataReader rdr_Contents = null;
using (SqlConnection conn = new SqlConnection("Server=KGREEN3-LT\\SQLEXPRESS;Initial Catalog=SAN;Integrated Security=SSPI"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("Select [file_data] From cert_files where filename=@certFilename", conn);
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@certFilename", certFilename);
rdr_Contents = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dtContents.Load(rdr_Contents);
}
}
byte[] byteArray = (byte[])dtContents.Rows[0]["file_data"];
// Put it into a word document
Application wordApp = new Application { Visible = false };
Document doc = new Document();
using (MemoryStream stream = new MemoryStream())
{
stream.Write(byteArray, 0, (int)byteArray.Length);
doc = wordApp.Documents.Open(stream, ReadOnly: false, Visible: false);
doc.Activate();
FindAndReplace(wordApp, "First Middle Last", myName);
FindAndReplace(wordApp, "11/11/1111", myDate);
}
return ;
}
}
Не похоже, что открытый метод примет хотя stream.
Похоже, я могу использовать open XML, чтобы читать / редактировать docx как поток. Но это не будет конвертировать в PDF. Похоже, что я могу использовать Interop для чтения / редактирования документа и записи в PDF, но я не могу сделать это как поток (только как файл на диске).
Есть ли способ получить Interop читать поток (то есть файл, загруженный из varbinary)? к