Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在PC上设计word文档,然后使用C#在IIS上编辑并转换为PDF吗?_C#_Asp.net_Pdf - Fatal编程技术网

我可以在PC上设计word文档,然后使用C#在IIS上编辑并转换为PDF吗?

我可以在PC上设计word文档,然后使用C#在IIS上编辑并转换为PDF吗?,c#,asp.net,pdf,C#,Asp.net,Pdf,以下是我想做的: 创建一个模板/文档,看起来像我想要的页面边框、徽标图像、结构化区域、预格式化和定位文本等。我认为这将是一个word文档,但我愿意接受任何内容。我只需要能够根据客户提供的细节设计文档。我计划在上传到服务器之前在PC上手动执行此操作 将其存储在服务器上或数据库中,以备将来检索(包括在内) 需要时,访问模板/文档,并以编程方式将数据添加到文档中的预定位置(如姓名、地址、电话、购买的产品、融资金额等) 将文档转换为PDF 通过电子邮件发送文档(已涵盖此内容) 我用C#和ASP.NE

以下是我想做的:

  • 创建一个模板/文档,看起来像我想要的页面边框、徽标图像、结构化区域、预格式化和定位文本等。我认为这将是一个word文档,但我愿意接受任何内容。我只需要能够根据客户提供的细节设计文档。我计划在上传到服务器之前在PC上手动执行此操作
  • 将其存储在服务器上或数据库中,以备将来检索(包括在内)
  • 需要时,访问模板/文档,并以编程方式将数据添加到文档中的预定位置(如姓名、地址、电话、购买的产品、融资金额等)
  • 将文档转换为PDF
  • 通过电子邮件发送文档(已涵盖此内容)

我用C#和ASP.NET/MVC来完成所有这些。你能推荐图书馆和可能的支持教程/wiki/文档来完成这项工作吗?

有很多付费的第三方图书馆可以做到这一点。我用过一个这样的()并且它对我很有效。

有很多付费的第三方图书馆都这样做。我使用了一个这样的()并且它对我很有效。

我通过以下方法完成了这一点:

  • 生成Word文档:使用
    System.Xml
    使用Word的Xml标记输出Word文档:

  • 转换为PDF:通过命令行参数静默打印到SumatraPDF,并连接虚拟打印机:


  • 我通过以下方式完成了这项工作:

  • 生成Word文档:使用
    System.Xml
    使用Word的Xml标记输出Word文档:

  • 转换为PDF:通过命令行参数静默打印到SumatraPDF,并连接虚拟打印机:


  • 我做了一件与您描述的非常类似的事情,不过这更多的是合并和拆分pdf文件,只需稍加修改内容,但我发现PDFSharp工作得非常好。绝对值得一看。[PDFSharp.net][1]


    [1] :-而且它是开源的…

    我做了一件与您描述的非常类似的事情,但是它更像是pdf文件的合并和拆分,只需对内容进行少量修改,但我发现PDFSharp工作得非常好。绝对值得一看。[PDFSharp.net][1]


    [1] :-而且它是开源的…

    我使用NPOI处理Excel文档。您可以同时读取/写入数据。对于PDF操作来说,ghostscript相当不错,但它通常输入/输出图像和文本,而不是Excel。这里有一个相关的主题:当然,pdflib(我也使用)和NPOI可以允许您手动编写转换…要求我们推荐或查找工具、库或喜爱的场外资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,描述问题以及迄今为止为解决问题所做的工作。你可以做任何你下定决心要做的事情。话虽如此,请查看第三方库。我是否正确地处理了这个问题?或者我必须完全通过代码生成文档?我使用NPOI进行Excel文档操作。您可以同时读取/写入数据。对于PDF操作来说,ghostscript相当不错,但它通常输入/输出图像和文本,而不是Excel。这里有一个相关的主题:当然,pdflib(我也使用)和NPOI可以允许您手动编写转换…要求我们推荐或查找工具、库或喜爱的场外资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,描述问题以及迄今为止为解决问题所做的工作。你可以做任何你下定决心要做的事情。话虽如此,请查看第三方库。我是否正确地处理了这个问题?还是我必须完全通过代码生成文档?谢谢@bob mac。我会看看那个图书馆。谢谢@bob mac。我要去看看那个图书馆。
    // Simple document setup
    XmlTextWriter Writer = new XmlTextWriter(HttpContext.Current.Server.MapPath("../XMLDocs/") + FileName + ".doc", System.Text.Encoding.UTF8);
    Writer.Formatting = Formatting.Indented;
    Writer.WriteStartDocument(true);
    Writer.WriteStartElement("w:wordDocument");
    Writer.WriteAttributeString("xmlns:o", "urn:schemas-microsoft-com:office:office");
    Writer.WriteAttributeString("xmlns:v", "urn:schemas-microsoft-com:vml");
    Writer.WriteAttributeString("xmlns:w", "http://schemas.microsoft.com/office/word/2003/wordml");
    Writer.WriteAttributeString("xmlns:w10", "urn:schemas-microsoft-com:office:word");
    Writer.WriteAttributeString("xmlns:wx", "http://schemas.microsoft.com/office/word/2003/auxHint");
    Writer.WriteStartElement("w:styles");
    Writer.WriteStartElement("w:style");
    Writer.WriteAttributeString("w:type", "paragraph");
    Writer.WriteAttributeString("w:default", "on");
    Writer.WriteAttributeString("w:styleId", "Paragraph");
    Writer.WriteStartElement("w:name");
    Writer.WriteAttributeString("w:val", "Paragraph");
    Writer.WriteEndElement();
    Writer.WriteStartElement("w:rPr");
    Writer.WriteStartElement("w:sz");
    Writer.WriteAttributeString("w:val", "18");
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    
    // Simple document editing
    Writer.WriteStartElement("w:p");
    Writer.WriteStartElement("w:pPr");
    Writer.WriteStartElement("w:pStyle");
    Writer.WriteAttributeString("w:val", "Paragraph");
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteStartElement("w:r");
    Writer.WriteStartElement("w:t");
    Writer.WriteRaw("Some Text");
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    
    // Simple document completion
    Writer.WriteStartElement("w:sectPr");
    Writer.WriteStartElement("w:pgSz");
    Writer.WriteAttributeString("w:w", "12240");
    Writer.WriteAttributeString("w:h", "15840");
    Writer.WriteEndElement();
    Writer.WriteStartElement("w:pgMar");
    Writer.WriteAttributeString("w:top", "1440");
    Writer.WriteAttributeString("w:right", "1440");
    Writer.WriteAttributeString("w:bottom", "1440");
    Writer.WriteAttributeString("w:left", "1440");
    Writer.WriteAttributeString("w:header", "720");
    Writer.WriteAttributeString("w:footer", "720");
    Writer.WriteAttributeString("w:gutter", "0");
    Writer.WriteEndElement();
    Writer.WriteStartElement("w:cols");
    Writer.WriteAttributeString("w:space", "720");
    Writer.WriteEndElement();
    Writer.WriteStartElement("w:docGrid");
    Writer.WriteAttributeString("w:line-pitch", "360");
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.WriteEndElement();
    Writer.Close();
    
    var flagPrintToPrinter = String.Format("-print-to \"{0}\"", printerName);
    var flagSilentAndSuppressErrors = "-silent";
    
    var args = String.Format("{0} {1} \"{2}\"", flagPrintToPrinter, flagSilentAndSuppressErrors, printFileName);
    var currentDirectory = Environment.CurrentDirectory;
    
    var process = new Process
    {
      StartInfo = {FileName = String.Format(@"{0}\ThirdPartyAssemblies\SumatraPDF.exe", currentDirectory), Arguments = args}
    };
    
    process.Start();
    process.WaitForExit();
    var exitCode = process.ExitCode;
    process.Close();