合作的客户有时候会要求在产品上粘贴订制的标签,标签上包含序列号,客户有时候订制几十个产品,就发过来几十页的pdf文件,每一页一出二,粘贴在箱子的两侧。为了实现这类pdf文件的打印,博主尝试写了一段小程序,首先依次导入页面,然后挨个打印。详见:
在一份客户新发的文件中,同样准备采用这种方式,结果程序运行后仅成功导入了8页,而pdf总共有80页。尝试将文件直接拖入CorelDRAW窗口,程序报错如下:
因为利用vba程序导入时是在第9页的时候出错,所以单独导入8、9、10页分别进行了尝试,单页导入时导入结果又是正常的。
记得CloudConvert这个万能文件转换站有转换pdf的功能,尝试去除密码,勾选允许编辑之类的按钮,转换后的文件报错依旧,最后心一横,干脆利用CloudConvert把这个80页的文件分页,分成了80个pdf小文件。
点击上图扳手图标可进行一些转换前的设置,勾选下图“Split Pages”为“yes”即可将pdf文件按页分割。分割后的文件会依次以“原文件名-01”,“原文件名-02”这样的方式命名,这种规则的命名方式也很利于后续vba程序的处理。
批量导入CorelDRAW
每导入一页pdf文件,需要新建一个页面以容纳下一个页面,CorelDRAW中新建页面的语法如下:
Dim newPage As Page
Set newPage = ActiveDocument.InsertPagesEx(1, False, ActivePage.Index, 10, 10)
批量导入的语句如下,需要注意确保文件路径的准确性,因为需要导入有规律的文件名称,所以利用了循环中的i参数来组合文件名:
Sub Macro1()
Dim newPage As Page
Dim impflt As ImportFilter
Dim io As New StructImportOptions
For i = 1 To 80
Set newPage = ActiveDocument.InsertPagesEx(1, False, ActivePage.Index, 10, 10)
With io
.MaintainLayers = True
End With
If i < 10 Then
Set impflt = ActiveLayer.ImportEx("F:\设计资料\test-0" & i & ".pdf", cdrAI9, io)
Else
Set impflt = ActiveLayer.ImportEx("F:\设计资料\test-" & i & ".pdf", cdrAI9, io)
End If
impflt.Finish
Next i
End Sub
总结
其实最后也没有弄清楚出现IO读错误的原因,猜测可能是由于页面过多的关系,分割后导入是个比较笨重的办法,如果亲暂时没有更高效的方法,那这也不失为一种曲线救国的方法。