我希望用vba打印pdf文件,但想要添加一个文本框,其中的信息会根据excel中的列表进行更改。我在excel文件中有三列,其中包含材料pdf的文件位置,副本数量以及需要运行的订单号等信息。
目前,在我的vba打印pdf文件后,我必须手写所有订单号。有没有办法在我的代码中添加代码行,这些代码行将添加一个文本框或水印,每个pdf上都有订单号。订单号可以根据要打印的pdf文件而更改。谢谢!代码如下:
Sub Button4_Click()
Dim Msg As String, Ans As Variant
Msg = "Would you like to print all of the BOMs"
Ans = MsgBox(Msg, vbYesNo)
Select Case Ans
Case vbYes
'NOTE:
'/s=don't show splash screen
'/n=new instance
'/h=minimized window
'/t=print to default printer; or use /t <filename> <printername> <drivername> <portname>
'CHECK YOUR ADOBE READER VERSION, AND USE CORRECT PATH..
zProg = "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
zLastRow = [M65536].End(xlUp).Row 'find last row in column [M]; e.g. 15
temp = "M1:M" & zLastRow 'e.g. "M1:M15"
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For Each cell In Range(temp) 'loop through all entries in range
zFile = cell.Value 'fetch filename from cell
r = cell.Row
zPrintCopies = Cells(r, "N")
If zPrintCopies = "" Then
zPrintCopies = 1
Cells(r, "B") = 1
End If
If zFile Like "*.pdf" Then 'check it is a pdf file type
.LeftHeader = Format(Now(), "dd/mm/yy")
For i = 1 To zPrintCopies
Shell (zProg & " /n /h /t " & zFile) 'execute command to print the pdf document
Next i
End If 'end of test for pdf file type
Next 'process next file in list
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Case vbNo
GoTo Quit:
End Select
Quit:
End Sub
答案 0 :(得分:0)
以下是几个选项(虽然其中任何一个都需要一些工作):
根据我的经验,PDF文件在最好的时候使用并不好玩 - 当需要实际修改文件时更是如此。这主要是因为Adobe对其专有软件如此秘密。
有能力注释文件以添加您需要的内容(请参阅here),但这可能涉及手动修改每个文件。
购买Adobe Acrobat(完整版;而不是Reader)后,我相信你会得到一个可以帮助你用VBA操作文件的库(我相信Acrobat.tlb
)。值得检查VBA引用以查看您的公司是否已拥有许可证,在这种情况下something like this可能有效。
根据您需要处理的文件量,这可能是一个选项。网上有各种免费赠品,如this和this。
许多(如果不是大多数)打印机可以选择在“所有”打印页面上添加页眉/页脚甚至水印。 (我家里的cheap Brother printer确实。)
有些人可能选择将文件名作为标题。对于我的,我会将打印机设置为包含位图作为水印,然后在每个打印作业之前以编程方式创建.bmp
文件,并提供我需要包含的任何信息。使用VBA进行编码/解码时,位图非常简单。 (一些想法here和here。)