gpt4 book ai didi

asp.net - 使用 xml 数据合并/填充 pdf 表单文件

转载 作者:数据小太阳 更新时间:2023-10-29 01:52:00 24 4
gpt4 key购买 nike

假设我在网站上有一个 pdf 表单文件,由用户填写并提交给服务器。在服务器端 (Asp.Net),我想将我收到的 xml 格式的数据与填写的空 pdf 表单合并并保存。

我发现有几种可能的方法:

  1. 使用 adobe acrobat 创建的 pdf 表单并用 itextsharp 填充它。
  2. 使用 adobe acrobat 创建的 pdf 表单并用 FDF Toolkit .net 填充它(它似乎在内部使用 itextsharp)
  3. 使用 pdfkt 填写表格。
  4. 使用 adobe livecycle 创建的 pdf 表单文件并使用 Form Data Integration Service 合并数据

由于我没有完成此类任务的经验,您能否建议哪个选项更好/更容易并提供一些额外的提示?

提前谢谢你。

最佳答案

如果可能的话,我建议使用第 4 种方法,因为它会更干净。您将使用专门针对您的要求量身定制的解决方案,但如果您没有此类解决方案的可用资源,我建议您使用第一个选项。

第一个选项是我最近深入研究的。我发现实现起来相对轻松。

如果满足以下条件,则选项 1 是可能的:

  1. 您可以控制 PDF 表单的开发。
  2. 您可以控制 xml 数据的格式
  3. 您可以接受未压缩的 (fastweb=false) PDF 文件

实现示例:

  1. 使用 Adob​​e Acrobat 生成 PDF 表单。提示:生成表单时使用 Adob​​e Native Fonts。对于您添加的每个非 native 字体的控件,它将导入使用的字体并在未压缩文件时使文件膨胀,据我所知,ITextSharp 目前不生成压缩的 PDF。

  2. 使用 ITextSharp 库将 XML 数据与 PDF 表单相结合以生成填充文档。提示:要从 xml 手动填充 PDF 表单,您必须将 xml 值映射到 PDF 表单中的控件名称,并按页面匹配它们,如下例所示。

    using (MemoryStream stream = GeneratePDF(m_FormsPath, oXmlData))
    {
    byte[] bytes = stream.ToArray();
    Response.ContentType = "application/pdf";
    Response.BinaryWrite(bytes);
    Response.End();
    }

    // <summary>
    // This method combines pdf forms with xml data
    // </summary>
    // <param name="m_FormName">pdf form file path</param>
    // <param name="oData">xml dataset</param>
    // <returns>memory stream containing the pdf data</returns>
    private MemoryStream GeneratePDF(string m_FormName, XmlDocument oData)
    {
    PdfReader pdfTemplate;
    PdfStamper stamper;
    PdfReader tempPDF;
    Document doc;
    MemoryStream msTemp;
    PdfWriter pCopy;
    MemoryStream msOutput = new MemoryStream();

    pdfTemplate = new PdfReader(m_FormName);

    doc = new Document();
    pCopy = new PdfCopy(doc, msOutput);

    pCopy.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, new PdfBoolean(true));
    pCopy.AddViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);

    doc.Open();

    for (int i = 1; i < pdfTemplate.NumberOfPages + 1; i++)
    {
    msTemp = new MemoryStream();
    pdfTemplate = new PdfReader(m_FormName);

    stamper = new PdfStamper(pdfTemplate, msTemp);

    // map xml values to pdf form controls (element name = control name)
    foreach (XmlElement oElem in oData.SelectNodes("/form/page" + i + "/*"))
    {
    stamper.AcroFields.SetField(oElem.Name, oElem.InnerText);
    }

    stamper.FormFlattening = true;
    stamper.Close();
    tempPDF = new PdfReader(msTemp.ToArray());
    ((PdfCopy)pCopy).AddPage(pCopy.GetImportedPage(tempPDF, i));
    pCopy.FreeReader(tempPDF);
    }

    doc.Close();

    return msOutput;
    }
  3. 保存文件或将文件发布到您的 ASP.Net 页面的响应

关于asp.net - 使用 xml 数据合并/填充 pdf 表单文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com