创建后脚本以选择不同页面的打印托盘

时间:2014-02-10 17:11:11

标签: vb.net pdf printing postscript

我有一个生成PDF文件的应用程序。我想实现这一目标:有些页面要用普通纸张(存在于特定的打印机托盘中)打印,有些打印在特殊的不干​​胶纸上(来自另一个打印机托盘)

如果PDF文件本身可以包含此信息(可在打印时读取),则可以解决问题,但我认为这不可能。

我设法检查PDF并生成一个包含其规格的文件。这是一些代码:

        sw = New StreamWriter(File.Open(DATOutputFile, FileMode.Create))
        sw.WriteLine("Zustell".PadRight(20, " ") & ZustellPages(0))


        Dim i As Integer
        Dim aux = ""
        For i = 0 To AddressPages.Count - 2
            aux = aux & AddressPages(i) & ","
        Next
        aux = aux & AddressPages(i)
        sw.WriteLine("Adressen".PadRight(20, " ") & aux)

        aux = ""
        For i = 0 To BotenPages.Count - 2
            aux = aux & BotenPages(i) & ","
        Next
        aux = aux & BotenPages(i)
        sw.WriteLine("Botenbezirk".PadRight(20, " ") & aux)

        aux = ""
        For i = 0 To Etiquetas.Count - 2
            aux = aux & Etiquetas(i)(0) & "-" & Etiquetas(i)(1) & ","
        Next
        aux = aux & Etiquetas(i)(0) & "-" & Etiquetas(i)(1)
        sw.WriteLine("Label".PadRight(20, " ") & aux)

        sw.Close()

这个位创建一个如下所示的文件:

part of the file

也就是说,我知道哪些页面包含标签,地址等。订购打印时,每个页面都指向不同的打印机托盘。

如何实现这一目标?

我可以使用PDF格式创建包含托盘规格的帖子脚本文件,还是创建Crystal报告?

编辑:

我已经从PDF创建了一个PS文件,并且在每个页面的规范开头都有这样的内容:

%%Page: 11 72
%%BeginPageSetup
%%PageBoundingBox: 0 0 596 842
%%PageOrientation: Portrait
%%EndPageSetup
%%<!--LARADOCID--xx/10000000/E/0000011-->
<< /MediaPosition 3 /TraySwitch false >> setpagedevice
<< /PageSize [595 842] /ImagingBBox null >> setpagedevice
STARTP

我在想这里是插入一些代码来指定要用于该页面的托盘的地方,但是,我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

您可以尝试为PDF文件创建作业单,但这取决于您的打印机是否能够读取PJTF并对其进行操作(可以嵌入PDF文件中)。

是否可以在转换为PostScript时执行此操作,而非依赖于用于将PDF转换为PostScript的软件,答案可能“可能不是”。

您最好的选择可能是转换为符合DSC标准的PostScript文件,然后对PostScript进行后处理,并在每页的页面设置中注入托盘选择。 DSC兼容文件的结构使得可以相对容易地找到这些部分。

当然,您需要知道打印机所需的托盘选择PostScript序列。

答案 1 :(得分:1)

我正在尝试解决类似的问题,我需要在不同的托盘上打印每个页面。 postscript文件创建由两个部分组成,该程序由想要打印创建ps而没有任何打印机特定命令的程序创建,另一部分是postscript驱动程序添加有关托盘选择,页面大小,...的所有信息。 我能够在不同的托盘上打印,在每台打印机上指定正确的命令 惠普

%%PageTrailer
%%Page: 2 2
%%PageBoundingBox: 0 0 595 842
%%BeginPageSetup
/pagesave save def
21 0 obj
<</Type/Page/MediaBox [0 0 595 842]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
/Font 23 0 R
>>
/Contents 22 0 R
/CropBox 
[0 0 594.0 842.0]
>>
<</ManualFeed false /MediaPosition 0>> setpagedevice  <-- just add this 
endobj
%%EndPageSetup
22 0 obj
<</Length 922>>stream

在Lexmark上我添加了类似 currentpagedevice / InputAttributes get 0 get setpagedevice 我刚刚做了一些反向工程。打印机停止,我在打印机C生成的ps版本之间做了一些差异:\ Windows \ System32 \ spool \ PRINTERS更改托盘输出