打印路径为:
在步骤3中,是否可以从PS文件创建PDF(使用GhostScript),同时减少页面并使用4页(4页)?或2到一页(2上)?
4 up表示缩小4页以适合一张纸:
'This uses a list of PS files to create one PDF
Private Shared Sub ConvertToPDF(ByVal PSPathFileList As List(Of String), _
ByVal PDFPathName As String, _
ByVal WaitForExit As Boolean, ByVal DeletePS As Boolean)
'check that all files exist
PSPathFileList.ForEach(AddressOf CheckFiles)
'check old pdf file
If IO.File.Exists(PDFPathName) Then
Throw New ApplicationException( _
"PDF cannot be created. File already exists: " & PDFPathName)
End If
'convert engine
Dim myProcInfo As New ProcessStartInfo
myProcInfo.FileName = DanBSolutionsLocation & "Misc\GhostScript\GSWIN32C.EXE"
Debug.Print(myProcInfo.FileName)
'write file names to text file as the list can be very long
Dim tempPath As String = IO.Path.GetDirectoryName(PSPathFileList.Item(0))
Dim fiName2 As String = tempPath & IO.Path.GetFileNameWithoutExtension(PDFPathName) & ".txt"
Dim ft As New StreamWriter(fiName2)
ft.WriteLine("-sDEVICE=pdfwrite -q -dSAFER -dNOPAUSE -sOUTPUTFILE=""" & PDFPathName & """ -dBATCH ")
For i As Long = 0 To PSPathFileList.Count - 1
ft.WriteLine(Chr(34) & PSPathFileList.Item(i) & Chr(34))
Next
ft.Close()
'set args to text file
myProcInfo.Arguments = """@" & fiName2 & """"
'set up for output and errors
myProcInfo.UseShellExecute = False
myProcInfo.RedirectStandardOutput = True
myProcInfo.RedirectStandardError = True
Debug.Print(myProcInfo.Arguments)
'do the conversion
Dim myProc As Process = Process.Start(myProcInfo)
Debug.Print(myProc.StandardOutput.ReadToEnd)
Debug.Print(myProc.StandardError.ReadToEnd)
If WaitForExit Then
'wait for finish; (no more than 60 seconds)
myProc.WaitForExit(60000)
'delete PS
If DeletePS Then
PSPathFileList.ForEach(AddressOf DeleteFiles)
End If
End If
End Sub
答案 0 :(得分:1)
是的,它可以拍摄带有'N'页的PostScript文件并生成带有'M'页的单个PDF文件,其中每个页面都有原始页面的N / M,缩小和偏移。
这称为拼版,有商业工具可以做到这一点,或者你可以使用psnup。
或者你也可以编写PostScript来自己完成这项工作(毕竟PostScript是一种编程语言)。可能最简单的方法是自定义BeginPage例程。
此例程应检查页数,并使用它来确定将虚拟页面绘制到哪个象限。这意味着改变CTM以缩放内容并翻译原点。虽然缩放保持不变,但翻译随每个虚拟页面而变化,以便将其移动到不同的象限。哦,你也需要一个自定义的EndPage,所以只有每4页被发送到输出。
更复杂的实现还会覆盖setpagedevice,以便为每个媒体请求单独设置缩放,以防页面不在同一媒体上。
或者您可以将整个批次提炼成一个PDF文件,然后使用我编写的程序here来完成PDF格式的工作。
当然,由于每种页面描述语言的功能不同,您的多次转换,PS-> PDF-> PCL很可能会导致妥协。我希望这些页面内容非常简单......