none
關於Microsoft Office Document Image Writer的控制 RRS feed

  • 問題

  • 想利用Microsoft Office Document Image Writer,來作轉檔的工作,文件已經使用vb.NET處理好,但我希望使用Microsoft Office Document Image Writer來輸出,轉成tif檔,過程中,不想要使用者介入操作,因這是一批次作業

    請問有人知道如何作嗎??

    2006年8月7日 上午 11:30

解答

  • VB.NET 本身直接支援 TIF 檔,不清楚你的流程是怎樣。

    已經是 .mdi 檔可透過 Automation 輸出成圖檔,請參考此份文件及相關說明:

    http://www.microsoft.com/downloads/details.aspx?FamilyID=8f93e445-b1cf-4477-a373-e17417d616bc&DisplayLang=en

    安裝好請查 SaveAs 方法。

    mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1033\MSPAUTO.chm::/html/dimthSaveAs.htm

    2006年8月7日 下午 12:34
    版主
  • 這套送的虛擬印表機並沒有提供相關設定功能讓你提高可自動化的程度,所以介面是一定會跳出的。

    至於要自動處理,可透過視窗偵測掃描另存新檔,再發送字元到目標視窗上,這部份過程比較繁瑣,而且等待時間未知,要定時掃瞄,程式執行過程中最好不要同時做其他事,免得干擾。

    你這類情況可以考慮的改善的方式如下:

    1. 報表功能自己寫,就可以自己針對印表機做畫出的動作,把畫出的東西直接存成 tif 檔,根本不透過虛擬印表機。

    2. 找可程式化的虛擬印表機,先呼叫設定功能再列印,這個一樣會有多工干擾的問題。

    我自己針對 Acrobat 做過類似的事:

    http://tlcheng.twbbs.org/Staff/PDFMerge/Help/

    Acrobat 可以把另存新檔視窗關閉,所以只要偵測過程視窗,問題會變比較少。

    2006年8月8日 上午 01:50
    版主
  • 可以啊,宣告一個新的 Bitmap 類別使用 Graphics 類別畫在上面就可以了。

    畫完以後直接存成 tif 檔。

    這邊有從網頁直接輸出成圖檔的範例:

    http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!397.entry

    部分原始碼請參閱回應內的連結。

    2006年8月8日 上午 05:59
    版主
  • 對了,上面那個 MODI 說明書內,倒是有將多個 TIF 合併成一個。

     

    2006年8月8日 下午 02:24
    版主
  •  

    ????????,?msdn?

    ????:http://msdn2.microsoft.com/zh-tw/library/system.drawing.imaging.encoder.saveflag.aspx

    Imports System
    Imports System.Drawing
    Imports System.Drawing.Imaging
    Module Module1

     


        Class Example_MultiFrame

            Public Shared Sub Main()
                Dim multi As Bitmap
                Dim page2 As Bitmap
                Dim page3 As Bitmap
                Dim myImageCodecInfo As ImageCodecInfo
                Dim myEncoder As Encoder
                Dim myEncoderParameter As EncoderParameter
                Dim myEncoderParameters As EncoderParameters

                ' Create three Bitmap objects.
                multi = New Bitmap("1.bmp")
                page2 = New Bitmap("3.jpg")
                page3 = New Bitmap("2.gif")

                ' Get an ImageCodecInfo object that represents the TIFF codec.
                myImageCodecInfo = GetEncoderInfo("image/tiff")

                ' Create an Encoder object based on the GUID
                ' for the SaveFlag parameter category.
                myEncoder = Encoder.SaveFlag

                ' Create an EncoderParameters object.
                ' An EncoderParameters object has an array of EncoderParameter
                ' objects. In this case, there is only one
                ' EncoderParameter object in the array.
                myEncoderParameters = New EncoderParameters(1)

                ' Save the first page (frame).
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.MultiFrame))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.Save("c:\Multiframe.tiff", myImageCodecInfo, myEncoderParameters)

                ' Save the second page (frame).
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.FrameDimensionPage))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.SaveAdd(page2, myEncoderParameters)

                ' Save the third page (frame).
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.FrameDimensionPage))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.SaveAdd(page3, myEncoderParameters)

                ' Close the multiple-frame file.
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.Flush))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.SaveAdd(myEncoderParameters)

            End Sub 'Main

            Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
                Dim j As Integer
                Dim encoders() As ImageCodecInfo
                encoders = ImageCodecInfo.GetImageEncoders()

                j = 0
                While j < encoders.Length
                    If encoders(j).MimeType = mimeType Then
                        Return encoders(j)
                    End If
                    j += 1
                End While
                Return Nothing

            End Function 'GetEncoderInfo
        End Class 'Example_MultiFrame

    End Module

    2006年8月9日 上午 01:17

所有回覆

  • VB.NET 本身直接支援 TIF 檔,不清楚你的流程是怎樣。

    已經是 .mdi 檔可透過 Automation 輸出成圖檔,請參考此份文件及相關說明:

    http://www.microsoft.com/downloads/details.aspx?FamilyID=8f93e445-b1cf-4477-a373-e17417d616bc&DisplayLang=en

    安裝好請查 SaveAs 方法。

    mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1033\MSPAUTO.chm::/html/dimthSaveAs.htm

    2006年8月7日 下午 12:34
    版主
  • 不是啦,我目前還沒有輸出,只是先用vb.NET 的報表功能,先將報表晝好了,只是想利用Microsoft Office Document Image Writer虛擬印表機,輸出為tif檔,以方便傳真
    2006年8月7日 下午 03:55
  • 這套送的虛擬印表機並沒有提供相關設定功能讓你提高可自動化的程度,所以介面是一定會跳出的。

    至於要自動處理,可透過視窗偵測掃描另存新檔,再發送字元到目標視窗上,這部份過程比較繁瑣,而且等待時間未知,要定時掃瞄,程式執行過程中最好不要同時做其他事,免得干擾。

    你這類情況可以考慮的改善的方式如下:

    1. 報表功能自己寫,就可以自己針對印表機做畫出的動作,把畫出的東西直接存成 tif 檔,根本不透過虛擬印表機。

    2. 找可程式化的虛擬印表機,先呼叫設定功能再列印,這個一樣會有多工干擾的問題。

    我自己針對 Acrobat 做過類似的事:

    http://tlcheng.twbbs.org/Staff/PDFMerge/Help/

    Acrobat 可以把另存新檔視窗關閉,所以只要偵測過程視窗,問題會變比較少。

    2006年8月8日 上午 01:50
    版主
  • 口圭~~~,原本是想,先用vb.net報表功能,將報表作好,再直接虛擬印表機轉成tif,會比較簡單

    請問針對印表機做畫出的動作,把畫出的東西直接存成 tif 檔,這要如何作,是否有參考資料

    另外,有什麼方式,我可以直接產生一個tif檔嗎??就是我不作報表了,只接產生圖檔....

    2006年8月8日 上午 02:13
  • 可以啊,宣告一個新的 Bitmap 類別使用 Graphics 類別畫在上面就可以了。

    畫完以後直接存成 tif 檔。

    這邊有從網頁直接輸出成圖檔的範例:

    http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!397.entry

    部分原始碼請參閱回應內的連結。

    2006年8月8日 上午 05:59
    版主
  • 我已利用您給我的資訊及方向,已可以產生單頁的 tif 傳真檔,

    不過,我要如何產生多頁??

             NewBitmap.SaveAdd(eps.Param.GetEnumerator)<---請問這個要如何使用,

    Imports System
    Imports System.IO
    Imports System.Drawing
    Imports System.Drawing.Imaging
    Module Module1

     


        Public Sub Main()

            Dim eps As System.Drawing.Imaging.EncoderParameters
            eps = New System.Drawing.Imaging.EncoderParameters
            Dim NewBitmap As Bitmap = Nothing
            Dim g As Graphics = Nothing
            Dim NewBitmap2 As Bitmap = Nothing
            Dim g2 As Graphics = Nothing

            eps.Param.GetEnumerator()
            Try
                Dim fontCounter As Font = New Font("標楷體 ", 48)

                ' calculate size of the string.
                NewBitmap = New Bitmap(1, 1, PixelFormat.Format32bppArgb)
                g = Graphics.FromImage(NewBitmap)
                Dim stringSize As SizeF = g.MeasureString("Hello World robbin 1", fontCounter)
                'Dim nWidth As Integer = CType(stringSize.Width, Integer) * 2
                'Dim nHeight As Integer = CType(stringSize.Height, Integer) * 2
                Dim nWidth As Integer = 1728
                Dim nHeight As Integer = 2443
                g.Dispose()
                NewBitmap.Dispose()

                NewBitmap = New Bitmap(nWidth, nHeight, PixelFormat.Format32bppArgb)
                g = Graphics.FromImage(NewBitmap)
                g.FillRectangle(New SolidBrush(Color.White), New Rectangle(0, 0, nWidth, nHeight))
                g.FillRectangle(New SolidBrush(Color.White), New Rectangle(0, nHeight, nWidth, nHeight * 2))
                Dim x As Single = 0
                Dim y As Single = 0

                g.DrawString("Hello World robbin 2", fontCounter, New SolidBrush(Color.Black), x, y)
                x = 0
                y = 80

                g.DrawString("Hello World robbinlee 3", fontCounter, New SolidBrush(Color.Black), x, y)
                '-------------------------------------------


             NewBitmap.Save("c:\test2.tif", ImageFormat.Tiff)
                NewBitmap.SaveAdd(eps.Param.GetEnumerator)

            Catch e As Exception
                Console.WriteLine(e.ToString())
                Console.ReadLine()
            Finally
                'If Nothing <> g Then
                g.Dispose()
                'End If
                'If Nothing <> NewBitmap Then
                NewBitmap.Dispose()
                'End If
            End Try
        End Sub

     

    End Module

    2006年8月8日 下午 12:10
  • 多頁的我自己還沒做過。

    先前在 http://support.microsoft.com/ 那邊有看過,你可以試著到那邊找資料。

    2006年8月8日 下午 12:23
    版主
  • 對了,上面那個 MODI 說明書內,倒是有將多個 TIF 合併成一個。

     

    2006年8月8日 下午 02:24
    版主
  •  

    ????????,?msdn?

    ????:http://msdn2.microsoft.com/zh-tw/library/system.drawing.imaging.encoder.saveflag.aspx

    Imports System
    Imports System.Drawing
    Imports System.Drawing.Imaging
    Module Module1

     


        Class Example_MultiFrame

            Public Shared Sub Main()
                Dim multi As Bitmap
                Dim page2 As Bitmap
                Dim page3 As Bitmap
                Dim myImageCodecInfo As ImageCodecInfo
                Dim myEncoder As Encoder
                Dim myEncoderParameter As EncoderParameter
                Dim myEncoderParameters As EncoderParameters

                ' Create three Bitmap objects.
                multi = New Bitmap("1.bmp")
                page2 = New Bitmap("3.jpg")
                page3 = New Bitmap("2.gif")

                ' Get an ImageCodecInfo object that represents the TIFF codec.
                myImageCodecInfo = GetEncoderInfo("image/tiff")

                ' Create an Encoder object based on the GUID
                ' for the SaveFlag parameter category.
                myEncoder = Encoder.SaveFlag

                ' Create an EncoderParameters object.
                ' An EncoderParameters object has an array of EncoderParameter
                ' objects. In this case, there is only one
                ' EncoderParameter object in the array.
                myEncoderParameters = New EncoderParameters(1)

                ' Save the first page (frame).
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.MultiFrame))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.Save("c:\Multiframe.tiff", myImageCodecInfo, myEncoderParameters)

                ' Save the second page (frame).
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.FrameDimensionPage))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.SaveAdd(page2, myEncoderParameters)

                ' Save the third page (frame).
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.FrameDimensionPage))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.SaveAdd(page3, myEncoderParameters)

                ' Close the multiple-frame file.
                myEncoderParameter = New EncoderParameter(myEncoder, Fix(EncoderValue.Flush))
                myEncoderParameters.Param(0) = myEncoderParameter
                multi.SaveAdd(myEncoderParameters)

            End Sub 'Main

            Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
                Dim j As Integer
                Dim encoders() As ImageCodecInfo
                encoders = ImageCodecInfo.GetImageEncoders()

                j = 0
                While j < encoders.Length
                    If encoders(j).MimeType = mimeType Then
                        Return encoders(j)
                    End If
                    j += 1
                End While
                Return Nothing

            End Function 'GetEncoderInfo
        End Class 'Example_MultiFrame

    End Module

    2006年8月9日 上午 01:17