如何在ASP.NET上使用iText保存对pdf文件所做的更改?

如何在ASP.NET上使用iText保存对pdf文件所做的更改?,.net,pdf,model-view-controller,itext,itext7,.net,Pdf,Model View Controller,Itext,Itext7,我正在创建一个web应用程序,它可以自动化我们使用PDF的工作 我目前正在.NET上测试iText7,以测试它是否符合我们的需要 现在的主要问题是保存从网页对文件所做的修改 编辑 场景如下:我们每天处理数百个PDF表单。我们填写、修改、保存、打印等等。我们目前使用的工具太复杂了。因此,我们想要简化 我测试了我可以从数据库中填写表单并从字段中提取信息。然而,在填充之后,我们可能需要手动更改表单中的一些值,保存更改并写回数据库 最简单的解决方案当然是填写、下载文件、在本地编辑和保存、将文件重新上传到

我正在创建一个web应用程序,它可以自动化我们使用PDF的工作

我目前正在.NET上测试iText7,以测试它是否符合我们的需要

现在的主要问题是保存从网页对文件所做的修改

编辑

场景如下:我们每天处理数百个PDF表单。我们填写、修改、保存、打印等等。我们目前使用的工具太复杂了。因此,我们想要简化

我测试了我可以从数据库中填写表单并从字段中提取信息。然而,在填充之后,我们可能需要手动更改表单中的一些值,保存更改并写回数据库

最简单的解决方案当然是填写、下载文件、在本地编辑和保存、将文件重新上传到服务器上,然后从更新的表单中提取值并填写数据库。它可以工作,但是它包含了太多的手工工作,比如下载和重新上传。我的客户希望它自动化

我尝试的另一种方法是在我的web应用程序中显示pdf文档,用按钮(在网页上)编辑并保存所有修改。但无法使我的按钮保存更新的pdf文档。我在MVC视图中显示了该文件,如下所示:
object data=“@Url.Action”(“ShowPDFwithButton”,“PdfTemplates”,new{id=Model.FilledForm.id})”type=“application/pdf”>/object>

我提出的第三种方法是在我填写的表单中添加一个带有“保存”按钮的新页面。我想用pdf格式的按钮保存我的修改。之后,我只提取保存表单的值并更新数据库。我试图用这段代码向我的“保存”按钮添加一些功能,但无法理解如何使其保存更改和/或将更新的文件发送到我的操作控制器:
button.SetAction(pdp.CreateSubmitForm(“/PdfTemplates/SavePdf/”+pdfMetadata.id,null,pdp.SUBMIT_EXCL_F_KEY))


如果有人能帮助第二和第三种方法发挥作用,我将不胜感激。或者提供其他方法。

OP在评论中阐明了他从网页保存对文件所做修改的意思:

我说的是填表。您能分享一下如何将表单内容发送到目标URL的代码示例吗

不幸的是,我只能为iText 7 for Java找到一个例子:

public void manufacturepdf(String dest)引发IOException{
PdfDocument pdfDoc=新PdfDocument(新PDF阅读器(子组)、新PDF编写器(目的地));
PdfAcroForm form=PdfAcroForm.getAcroForm(pdfDoc,true);
PdfButtonFormField submit1=PdfFormField.createButton(pdfDoc,新矩形(906605030),“POST”,“POST”);
提交1.背景色(新设备灰色(0.75f));
submit1.setVisibility(PdfFormField.VISIBLE但不打印);
submit1.setAction(pdp.createSubmitForm(
“/book/request”,空,
pdpartion.SUBMIT_HTML_格式| pdpartion.SUBMIT_坐标);
//添加按钮
表格.addField(submit1);
//创建一个提交按钮,将表单发布为FDF
PdfButtonFormField submit2=PdfFormField.CreateButton(
pdfDoc,新矩形(2006605030),“FDF”,“FDF”);
提交2.背景色(新设备灰色(0.7f));
submit2.setVisibility(PdfFormField.VISIBLE但不打印);
submit2.setAction(pdp.createSubmitForm(
“/book/request”,空,pdp。提交(不包括密钥);
//添加按钮
表格.addField(submit2);
//创建一个提交按钮,将表单发布为XFDF
PdfButtonFormField submit3=PdfFormField.CreateButton(
pdfDoc,新矩形(310,660,50,30),“XFDF”,“XFDF”);
submit3.背景色(新设备灰色(0.7f));
submit3.setVisibility(PdfFormField.VISIBLE但不打印);
submit3.setAction(pdp.createSubmitForm(
“/book/request”,空,pdp.SUBMIT_XFDF));
//添加按钮
表格.addField(submit3);
//创建一个重置按钮
PdfButtonFormField重置=Pdformfield.CreateButton(
pdfDoc,新矩形(420、660、50、30),“重置”、“重置”);
重置。设置背景颜色(新设备灰色(0.7f));
reset.setVisibility(PdfFormField.VISIBLE但不打印);
//TODO DEVSIX-573
setAction(pdpartion.createResetForm(null,0));
form.addField(重置);
//关闭文档
pdfDoc.close();
}
(示例从iText第9章移植到iText 7,第2版)


正如您所看到的,根据发送到URL的确切内容,有多个选项。

看起来您正在显示PDF对象,希望将其中的数据发回?那恐怕不行。浏览器如何将PDF格式转换为POST数据?但是,如果这将在现代浏览器上运行,那么不妨看看作为Mozilla PDF.js的JavaScript查看器?我可以想象,你可以通过某种方式破解它们,从PDF表单获取数据,然后通过Ajax将其发回。

你所说的“从网页修改文件”是什么意思?iText不是一种web客户端技术。它可以在web服务器上使用,但应该很明显,毕竟您有一些输出流或文件…@mkl,场景如下:我自动从db填充pdf文件,并在网页上显示结果。现在,我希望我的用户能够编辑它并保存将更新数据库的更改。如果itsn不具备itext的功能,您能建议我如何实现它吗?我不知道任何具体的解决方案,您可以按原样使用。@mkl,我想在我的pdf中添加一个带有“保存”按钮的新页面。能让那个按钮按我的要求吗?保存文档的当前状态。遗憾的是,您仍然不清楚用户应该能够进行哪些更改。如果您仅仅是指表单填写,那么您可以通过创建一个保存窗口来实现您的用例