从 Acrobat Reader VSTO 调用 Excel

发布于 2024-12-03 14:41:05 字数 1051 浏览 0 评论 0原文

这是我的问题。

我正在 VSTO 的帮助下制作 Excel 模板。 Excel 中显示的所有数据均来自数据库。在 Excel 模板中,我放置了一个按钮,用于打开现有的 pdf 表单模板,用数据库中的数据填充它并保存副本。为此,我使用了 ITextSharp 库,它对我帮助很大。到这里为止都没有问题。

现在我想做的是 PDF 中的每个字段都有一个与 Excel 中单元格的链接。 PDF 是只读的,它只是显示数据库中存储的数据的一种方式。当用户想要修改字段的值时,他必须进入 Excel 才能执行此操作。因此,目标是当他想要修改 pdf 中的值时,只需单击字段,然后他将重定向到 Excel 中的正确单元格以修改值。

我认为没有办法在 Acrobat 中的 JavaScript 中执行此操作,因为如果我没记错的话,Acrobat 不会让您从 JS 调用宏。

我想也许VSTO中有一种方法可以控制Acrobat,但我没有找到。

如果您对如何执行此操作有任何想法,我将不胜感激。
这是我的部分代码,也许会更清楚。

        string pdfTemplatePath = @"C:\Files.pdf";
        string pdfFinalFile = @"C:\fileCopy.pdf";
        PdfReader reader = new PdfReader(pdfTemplatePath);
        PdfStamper stamper = new PdfStamper(reader, new FileStream(pdfFinalFile, FileMode.Create));

        AcroFields form = stamper.AcroFields;
        foreach (DataRow row in data.Rows)
        {
            form.SetField(row["Name"].ToString(), row["Value"].ToString());

        }
        stamper.FormFlattening= false;
        stamper.Close();

Here is my problem.

I'm making an Excel Template with the Help of VSTO. All the Data display in Excel are comming from a DataBase. In the Excel template I put a Button which open an existing pdf form template, fill it with the data from the DB and save a copy. To do this I used the library ITextSharp which help me a lot. Until here no problem.

Now what I want to do is that each field from the PDF has a link with the cell in Excel. The PDF is read only and it's only a way to display the data stored in the DB. When the user want to modify the value of a field he has to go into Excel to do so. So the goal is that when he want to modify a value in the pdf, he just click on field and he's going to redirect on the correct cell in Excel in order to modify the value.

I don't think there is a way to do this action in JavaScript in Acrobat, because if I'm not mistaken Acrobat won't let you call a macro from the JS.

I was thinking maybe there is a way in VSTO to control Acrobat, but I didn't find it.

If you have any idea on how to do this, I will be greatfull.
Here is part of my code, maybe it will be clearer.

        string pdfTemplatePath = @"C:\Files.pdf";
        string pdfFinalFile = @"C:\fileCopy.pdf";
        PdfReader reader = new PdfReader(pdfTemplatePath);
        PdfStamper stamper = new PdfStamper(reader, new FileStream(pdfFinalFile, FileMode.Create));

        AcroFields form = stamper.AcroFields;
        foreach (DataRow row in data.Rows)
        {
            form.SetField(row["Name"].ToString(), row["Value"].ToString());

        }
        stamper.FormFlattening= false;
        stamper.Close();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文