none
(VB.NET2005 Winform)PrintDocument打印后奇怪的问题! RRS feed

  • 问题

  •  (VB.NET2005 Winform)PrintDocument打印后,如果使用PDF虚拟打印机就打印文档导出为PDF文件,发现一个很奇怪的问题!
    一部分文档可以选择,并且拷贝;另一些不能选择,拷贝。发现是设置了LandScope属性后就会有这种现象。
    怀疑是因为PrintDocument内部实现的问题,是不是LandScope相关的一些设置下,是以文本方式输出到打印机的,另一种设置下是使用图形的方式输出到打印机。
    请问大家有遇到这样的问题吗?俺的猜想是不是正确的?该如何解决这个问题呢?
    谢谢先~
    Work Harder
    2009年2月5日 3:42

答案

  • PrintDocument  本身走的是标准的打印  只有在打印机可能不识别的状况下  才会输出图片  这也是标准打印的流程
    而打印机理所当然不识别粗体斜体
    比较该bs的是 pdf 虚拟printer  


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月5日 9:23
  • liuyc 说:

    韦恩卑鄙 said:

    PrintDocument  本身走的是标准的打印  只有在打印机可能不识别的状况下  才会输出图片  这也是标准打印的流程
    而打印机理所当然不识别粗体斜体
    比较该bs的是 pdf 虚拟printer  


    Guitar Hero IV -- Singing Rock & Roll.


    但是奇怪的是使用同样的VB6程序,同样的虚拟打印机,打印出同样的文档,得出的结果不一样:(
    VB6的粗体字也是可以选择的
    所以,客户才会给俺找茬,唉~

    Work Harder



    那你干脆调vb6的程序打印
    http://feiyun0112.cnblogs.com/
    2009年2月7日 1:14
    版主

全部回复

  • 是的  一部分是以文档  一部分是以图形方式传递到打印机设备的


     理论程序只应该对打印出来的最后结果负责   把文字和图形的区别暴露给用户 这个属于pdf虚拟打印机的实现问题  orintdocument不应该为此负责


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月5日 5:59
  • 韦恩卑鄙 说:

    是的  一部分是以文档  一部分是以图形方式传递到打印机设备的


     理论程序只应该对打印出来的最后结果负责   把文字和图形的区别暴露给用户 这个属于pdf虚拟打印机的实现问题  orintdocument不应该为此负责


    Guitar Hero IV -- Singing Rock & Roll.



    sorry上面的调查有些偏差了,刚才做了一个sample,发现这种现象其实与字体设置有关系,,字体加粗以及斜体时,打印出来的PDF中就会以图片呈现

        Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
            PrintDocument1.Print()
        End Sub

        Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

            Dim font As New Font(Me.Font.Name, Me.Font.Size, FontStyle.Bold)
     
            Dim font2 As New Font(Me.Font.Name, Me.Font.Size, FontStyle.Italic)
            Dim font3 As New Font(Me.Font.Name, Me.Font.Size, FontStyle.Regular)
            Dim font4 As New Font(Me.Font.Name, Me.Font.Size, FontStyle.Strikeout)
            Dim font5 As New Font(Me.Font.Name, Me.Font.Size, FontStyle.Underline)

            e.Graphics.FillRectangle(Brushes.Red, 0, 0, 200, 200)

            e.Graphics.DrawString("FontStyle.Bold", font, Brushes.Blue, 0, 0)
            e.Graphics.DrawString("FontStyle.Italic", font2, Brushes.Blue, 110, 25)
            e.Graphics.DrawString("FontStyle.Regular", font3, Brushes.Blue, 150, 30)
            e.Graphics.DrawString("FontStyle.Strikeout", font4, Brushes.Blue, 150, 70)
            e.Graphics.DrawString("FontStyle.Underline", font5, Brushes.Blue, 150, 110)
        End Sub


    Work Harder
    2009年2月5日 6:50
  • 打印机机制很有意思   比如说有的打印机带字库   如果是汉字ascii 输出  可能有的打印机就可以直接换成中文汉字

    如果加粗或者斜体  可能就没办法正确识别了


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月5日 7:18
  • 韦恩卑鄙 说:

    打印机机制很有意思   比如说有的打印机带字库   如果是汉字ascii 输出  可能有的打印机就可以直接换成中文汉字

    如果加粗或者斜体  可能就没办法正确识别了


    Guitar Hero IV -- Singing Rock & Roll.



    所以是不是可能PrintDocument对于粗体和斜体就是使用图形方式输出的?
    Work Harder
    • 已编辑 liuyc 2009年2月6日 14:44
    2009年2月5日 7:26
  • PrintDocument  本身走的是标准的打印  只有在打印机可能不识别的状况下  才会输出图片  这也是标准打印的流程
    而打印机理所当然不识别粗体斜体
    比较该bs的是 pdf 虚拟printer  


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月5日 9:23
  • 韦恩卑鄙 said:

    PrintDocument  本身走的是标准的打印  只有在打印机可能不识别的状况下  才会输出图片  这也是标准打印的流程
    而打印机理所当然不识别粗体斜体
    比较该bs的是 pdf 虚拟printer  


    Guitar Hero IV -- Singing Rock & Roll.


    但是奇怪的是使用同样的VB6程序,同样的虚拟打印机,打印出同样的文档,得出的结果不一样:(
    VB6的粗体字也是可以选择的
    所以,客户才会给俺找茬,唉~

    Work Harder
    2009年2月6日 14:46
  • liuyc 说:

    韦恩卑鄙 said:

    PrintDocument  本身走的是标准的打印  只有在打印机可能不识别的状况下  才会输出图片  这也是标准打印的流程
    而打印机理所当然不识别粗体斜体
    比较该bs的是 pdf 虚拟printer  


    Guitar Hero IV -- Singing Rock & Roll.


    但是奇怪的是使用同样的VB6程序,同样的虚拟打印机,打印出同样的文档,得出的结果不一样:(
    VB6的粗体字也是可以选择的
    所以,客户才会给俺找茬,唉~

    Work Harder



    那你干脆调vb6的程序打印
    http://feiyun0112.cnblogs.com/
    2009年2月7日 1:14
    版主
  • 呵呵,VB6的程序需要升级到Vb.NET,所以才做这件事情的!
    Work Harder
    2009年2月8日 14:58