【问题标题】:Filling out Fillable PDF From Excel Data [closed]从 Excel 数据中填写可填写的 PDF [关闭]
【发布时间】:2021-08-07 01:50:54
【问题描述】:

我有一个包含客户信息(姓名、地址、帐号等)的 Excel 表,还有一个可填写的 PDF,我需要为每个客户完成并保存。如何将 Excel 中的数据映射到可填写 PDF 中的字段?对其进行一些研究,看起来使用 VBA 可能是一种选择,但我并不真正精通它。我确实将可填写的 PDF 导出为 XML,然后将其添加为 Excel 中的源以尝试映射数据,但它没有任何要映射的字段。

【问题讨论】:

  • 我通过在 pdf 中创建 TextFields 并命名它们来做到这一点。然后,您可以将文本字段设置为 excel 中单元格中的值
  • 你有这样的例子吗?

标签: excel vba pdf


【解决方案1】:

这里有一个link 可能会有所帮助。该网站上的一些视频和示例文件也可以提供帮助。

该网站的高级步骤如下:

  1. 准备要导出的 Excel 结构。
  2. 提取 PDF 表单的 XML 结构。您可以使用Adobe Acrobat Pro(无需获得许可的 Acrobat Pro 版本即可完成,但至少需要安装 Acrobat PRO 试用版,即使您从未购买许可证。),FoxitReader,@987654324 @等
  3. 将 XML 文件映射到 Excel 工作表。
  4. 使用 XML 文件填写 PDF 表单。

【讨论】:

  • 谢谢。这是我最初尝试的,但是当我将 XML 文件作为源添加到 Excel 中时,它没有任何映射字段。
【解决方案2】:

这是我如何做到这一点的一个例子,如果它对你有用,我并不肯定。需要注意的几点:

我使用 Foxitpdf 并想打印到 pdf 以从模板创建新的 pdf。

Sub CreateDrawings()

Dim phApp As PhantomPDF.Application
Set phApp = CreateObject("PhantomPDF.Application")
Dim phCreator As PhantomPDF.Creator
Set phCreator = phApp.Creator

Dim PDFTemplateFile, NewPDFName, SavePDFFldr, Desc As String
Dim CustRow, LastRow As Long

SavePDFFldr = Sheet2.Range("D47").Value           ' Or set this to an exact directory

CreateObject("WScript.Network").SetDefaultPrinter "Microsoft Print to PDF"

LastRow = Sheet2.Range("A999").End(xlUp).Row
PDFTemplateFile1 = Sheet4.Range("E3").Value  'or set this to the exact pdf file directory.

Dim phFormDoc As PhantomPDF.Document
Set phFormDoc = phApp.OpenDocument(PDFTemplateFile1, "", True, True)
    
    D1 = .Range("M" & CustRow).Value & "''"
    D2 = .Range("AD" & CustRow).Value               
    D3 = .Range("AK" & CustRow).Value & " lbs"      
    D4 = .Range("D" & CustRow).Value              
    D5 = .Range("Z" & CustRow).Value & "''"           
    D6 = .Range("AC" & CustRow).Value & "''"        
    D7 = .Range("AA" & CustRow).Value & "''"      
    D8 = .Range("V" & CustRow).Value & "''"        

' D1-D8 are set prior to setting pdf fields to the values to make the code cleaner to look at
    
    Call phFormDoc.SetFieldValue("Size", CStr(D1))
    Call phFormDoc.SetFieldValue("Material", CStr(D2))
    Call phFormDoc.SetFieldValue("Weight", CStr(D3))
    Call phFormDoc.SetFieldValue("Description", CStr(D4))
    Call phFormDoc.SetFieldValue("Inlet", CStr(D5))
    Call phFormDoc.SetFieldValue("Length", CStr(D6))
    Call phFormDoc.SetFieldValue("Outlet", CStr(D7))
    Call phFormDoc.SetFieldValue("MajorDiameter", CStr(D8))

    Description = D4                                    ' whatever dimension is the description of the element
    
Call phFormDoc.Export(SavePDFFldr & "\" & Description & ".pdf")
    
Call phApp.CloseDocument(phFormDoc, False)

Next CustRow

Call phApp.Exit

End With

我不确定您在 pdf 应用程序中使用什么,但使用 Foxit 并不太难。

我省略了大部分循环和 If 语句,因为它们只会添加不相关的信息。

结束子

【讨论】:

  • 太好了,谢谢。我正在尝试跟随 YouTube 视频,并且只有一些基本代码来打开模板,但是在运行它时出现编译错误。单元格 B26 是我的模板的路径,c:\backup\template.PDF。 Sub CreatePDFForms() Dim PDFTemplateFile, NewPDFName, SavePDFFolder, CustomerName As String Dim CustRow, LastRow As Long With Sheet1 LastRow = .Range("A9999").End(xlUp).Row 'Last Row PDFTemplateFile = .Range("B26").Value 'Template File Name SavePDFFolder = .Range("B27").Value 'Save Location OpenURL "" & PDFTemplateFile & "" End With End Sub
  • 抱歉,我不知道如何正确布局代码。我也在使用福昕阅读器。在您的代码中,尺寸、材料、重量等字段名称在 PDF 文档中,然后您将它们分配给 Excel 中的单元格?
  • @pantherhawk 是的,这些是 pdf 中的文本字段名称。代码Call phFormDoc.SetFieldValue("Size", CStr(D1)) 只是将文本字段的值设置为上面几行设置的指定“D1”值。 CStr(D1) 只是确保在传输到 pdf 之前将值转换为字符串。
  • 谢谢。该代码中是否有任何特定于您正在使用的 PDF 文件名的内容,或者我是否应该能够使用它并且只需更改一些字段名以及这些单元格的位置?
  • SavePDFFldrPDFTemplateFile1 专门命名为我计算机上的文件夹/文件。您只需要正确命名它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
相关资源
最近更新 更多