C# 在不打开XFA文件的情况下将其打印为PDF

C# 在不打开XFA文件的情况下将其打印为PDF,c#,pdf,xfa,C#,Pdf,Xfa,我正在尝试使用Spire.PDF和C#自动填写/签署/打印联邦I-9表格。i9文件是XFA表单,受保护,不允许签名。但是,如果我填写i9并打印成PDF,那么我可以在新文件上签名 我一直坚持的步骤是将填写好的i9打印到PDF文件中,而不实际打开Acrobat或与最终用户直接交互以指定文件名。我之所以说“打印”,是因为如果我只是将其保存为PDF文件,它永远不会压平XFA表单,并且仍然会锁定签名 到目前为止,我已经使用以下代码自动打印了文件: Process proc = new Process();

我正在尝试使用Spire.PDF和C#自动填写/签署/打印联邦I-9表格。i9文件是XFA表单,受保护,不允许签名。但是,如果我填写i9并打印成PDF,那么我可以在新文件上签名

我一直坚持的步骤是将填写好的i9打印到PDF文件中,而不实际打开Acrobat或与最终用户直接交互以指定文件名。我之所以说“打印”,是因为如果我只是将其保存为PDF文件,它永远不会压平XFA表单,并且仍然会锁定签名

到目前为止,我已经使用以下代码自动打印了文件:

Process proc = new Process();
proc.StartInfo.Verb = "PrintTo";
proc.StartInfo.FileName = filename;
proc.StartInfo.Arguments = "\"" + printername + "\"";
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
我想我可以在这里强制使用Microsoft Print to PDF“打印机”,但我不知道是否有办法指定要使用的文件名,这样用户就不会收到提示

如果我尝试使用Spire.PDF控件打印,我只能得到一个带有“请稍候…”的文件。。。 如果此消息最终未被文档的正确内容替换,请使用您的PDF 因此,查看器可能无法显示此类型的“文档…”消息

当通过Acrobat打开表单进行打印时,我会弹出一个“此表单包含不完整或无效信息。是否确实要打印?”的弹出窗口。如果单击“是”,则我可以成功打印到PDF,然后我可以对该文件进行签名

所以,我相信无论发生什么样的数据检查都会导致无法通过代码打印,我希望那些比我更聪明的人能想出一些解决这个问题的办法

提前感谢您的帮助!如果你只是搜索联邦i9,你应该找到我正在使用的文件。我在这里没有看到可以附加文件的空间

这是我用来通过Spire.PDF控件完成任务的代码

    PdfDocument doc = new PdfDocument();
    string i9path = "locationofi9file"
    string newi9path = "locationoffilledi9file"
    doc.LoadFromFile(i9path); 
    /*fill form here*/
    doc.Form.IsFlatten = true;
    doc.SaveToFile(newi9path, FileFormat.PDF);
    doc.Close();
    doc.Dispose();

         
    doc.LoadFromFile(newi9path); 
    string file = "printi9";
    if (System.IO.File.Exists(file))
        System.IO.File.Delete(file);

    string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

    PrinterSettings settings = new PrinterSettings();
    PageSettings pages = new PageSettings();

    string printername   = "Microsoft Print to PDF";
    settings.PrinterName = printername;
    settings.PrintToFile = true;
    settings.PrintFileName = Path.Combine(directory, file + ".pdf");
        
    PrintDocument printDoc = doc.PrintDocument;
    printDoc.PrinterSettings = settings;
    printDoc.Print();

    doc.Close();
    doc.Dispose();