繁体   English   中英

如何将字节数组转换为pdf

[英]How to convert a byte array to pdf

我正在构建一个可修改word 2010文档的应用程序,应将其下载为pdf。我编写了将单词转换为pdf的代码,但它正在转换的文档不是我上传的已修改单词。 如何将修改后的单词转换为PDF。下面是不转换修改后的单词的功能。 受保护的无效btnUpload_Click(对象发送者,EventArgs e){

        if (FileUploadControl.HasFile)

            {
                string fileNameFromUser = FileUploadControl.FileName;
                var fiFileName = new System.IO.FileInfo(fileNameFromUser);

                using (MemoryStream ms = new MemoryStream())
                {
                    ms.Write(FileUploadControl.FileBytes, 0, FileUploadControl.FileBytes.Length);

                    using (WordprocessingDocument sDoc = WordprocessingDocument.Open(ms, true))
                    {

                    }
                    lblMessage.Text = "Dokumenti u ngarkua me sukses!";
                    Session["ByteArray"] = FileUploadControl.FileBytes;
                    Session["fileNameFromUser"] = fileNameFromUser;
                }



        }
        byte[] byteArray = (byte[])(Session["ByteArray"]);
        if (byteArray != null)
        {
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    ms.Write(byteArray, 0, byteArray.Length);
                    using (WordprocessingDocument wDoc = WordprocessingDocument.Open(ms, true))
                    {
                        var body = wDoc.MainDocumentPart.Document.Body;
                        var lastParagraf = body.Elements<Paragraph>().LastOrDefault();
                        var newParagraf = new Paragraph(

                            new Run(
                                new Text("Perdoruesi:" + " " + User.Identity.Name)));

                        var newParagraf2 = new Paragraph(

                           new Run(
                               new Text("Data dhe ora:" + " " + DateTime.Now.ToString())));

                        var newParagraf3 = new Paragraph(

                           new Run(
                               new Text("Kodi unik:" + " " + randomstring(14))));

                        var newParagraf4 = new Paragraph(

                          new Run(
                              new Text("Shifra:" )));

                        lastParagraf.InsertAfterSelf(newParagraf);
                        lastParagraf.InsertAfterSelf(newParagraf2);
                        lastParagraf.InsertAfterSelf(newParagraf3);
                        lastParagraf.InsertAfterSelf(newParagraf4);
                    }
                    Session["ByteArray"] = ms.ToArray();
                    lblMessage.Text = "U ngarkua dhe u vulos dokumenti!";

                    Guid pdfFileGuid = Guid.NewGuid();

                    var filePath = Path.GetTempFileName();
                    FileUploadControl.SaveAs(filePath);
                    var appWord = new Microsoft.Office.Interop.Word.Application();
                    var wordDoc = appWord.Documents.Open(filePath);
                    var convertedFilePath = Path.GetTempFileName();
                    wordDoc.ExportAsFixedFormat(convertedFilePath, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);
                    Response.Clear();
                    Response.AddHeader("content-disposition", "attachment; filename=Converted.Pdf");
                    Response.AddHeader("content-type", "application/pdf");
                    Response.TransmitFile(convertedFilePath);
                    File.Delete(filePath);
                    File.Delete(convertedFilePath);
                }
            }
            catch (Exception ex)
            {
                lblMessage.Text = "ERROR:" + ex.Message.ToString();
            }
        }
        else
        {
            lblMessage.Text = "Nuk e keni zgjedhur dokumentin apo formati i dokumentit nuk pershtatet!";
        }
    }

当前,在这里您将数据从FileUploadControl加载到会话中:

Session["ByteArray"] = FileUploadControl.FileBytes;

然后,将会话中的数据加载到用于打开文档进行编辑的MemoryStream中:

    byte[] byteArray = (byte[])(Session["ByteArray"]);
    if (byteArray != null)
    {
        try
        {
            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(byteArray, 0, byteArray.Length);
                using (WordprocessingDocument wDoc = WordprocessingDocument.Open(ms, true))

最后,在完成编辑后,将更新的内容复制回会话:

            lastParagraf.InsertAfterSelf(newParagraf3);
            lastParagraf.InsertAfterSelf(newParagraf4);
        }
        Session["ByteArray"] = ms.ToArray();

但; 那是我们最后一次看到会话使用; 然后,您将上传的文件写入一个临时文件,并使用文件执行Word自动化:

var filePath = Path.GetTempFileName();
FileUploadControl.SaveAs(filePath);
var appWord = new Microsoft.Office.Interop.Word.Application();
var wordDoc = appWord.Documents.Open(filePath);

可以,因此:这会将原始文件转换为upload ,因为FileUploadControl与您所做的更改无关。 相反,也许尝试:

var filePath = Path.GetTempFileName();
File.WriteAllBytes(filePath, (byte[])Session["ByteArray"]);
var appWord = new Microsoft.Office.Interop.Word.Application();
var wordDoc = appWord.Documents.Open(filePath);

然后应包括更改。


其他附带意见:

  • 网络服务器不支持Word自动化,不建议在Web服务器上使用。 如果它对您有用:很好,但是请注意,如果它突然崩溃,您将独自一人
  • 注意不要将文件分散在磁盘上,也不要将大量打开的Word实例/文件分散在磁盘上; 基本上是:检查你没有“跑冒滴漏”( appWordwordDocfilePathconvertedFilePath等等-所有可能需要一些finally的爱)
  • 将Word文件置于会话状态( Session可能不是一个好主意。 我会建议只使用一个本地byte[]或贯穿在这个方法类似,并删除Session["ByteArray"] 完全

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM