精华内容
下载资源
问答
  • 我用“windows 图片查看器”打印图片的时候,他会有一个向导,让你选择需要打印几张图片,例如我选择了4张,然后点击打印,从打印机打印队列中可以看到这4张图片是作为一个打印任务被发送过去的,所以打印机打印的...
  • 不少家庭或单位选购的激光打印机都不支持自动双面打印功能;为了有效节约打印成本,不少人往往会无奈地使用手工方法进行双面打印操作。不过在实际打印材料的过程中,一旦需要打印的材料内容非常多的时候,我们就会...

    不少家庭或单位选购的激光打印机都不支持自动双面打印功能;为了有效节约打印成本,不少人往往会无奈地使用手工方法进行双面打印操作。不过在实际打印材料的过程中,一旦需要打印的材料内容非常多的时候,我们就会感觉到手工双面打印方法操作起来有一定的难度,例如经常容易出现正反页面内容的页码没有连续显示或者容易出现卡纸现象。为了有效避免这些麻烦现象的发生,笔者经过多次仔细琢磨,总结了以下几则操作心得,希望下面内容能帮助各位提高双面打印的操作效率。

    1、使用优质纸张,远离卡纸现象

    大家知道,要是我们在打印材料的时候,随意使用那些质量不合格的打印纸张时,不但会对激光打印机自身造成一定程度的损伤,而且在进行双面打印操作时十分容易发生卡纸现象,从而妨碍双面打印操作的顺利进行。例如,要是选用的打印纸比较薄的话,那么打印纸的一面已经被打印过,需要反过来打印另外一面时,薄薄的打印纸张经过先前的加热后十分容易变形,这样一来打印机继续打印另外一面时就很有可能出现卡纸现象。而双面打印操作一旦遭遇到卡纸现象后,处理起来比较烦琐,毕竟加热过后的薄薄打印纸张十分“脆弱”,不小心就容易被扯破。为了让双面打印操作远离卡纸现象,我们一定要使用优质的打印纸,具体要求就是每张打印纸重量一定要在60克以上,使用的材料必须是纯木浆,而且还不能有粉尘。

    除了要注意打印纸的选用质量外,我们还需要使用表面相对干燥的打印纸。因为不少打印纸被拆包之后,往往会长时间地暴露在空气中,这样一来空气中的潮湿水分就容易附着在打印纸表面,而水分含量相对较重的打印纸一旦被加热之后也容易发生严重的变形现象,从而容易引发卡纸现象。因此,当我们感觉打印纸张表面太潮湿的话,我们不妨将纸张直接拿到太阳光线下照射一段时间,或者直接将打印纸放在显示器外壳上烘干一段时间,不过千万要控制好时间,不然纸张表面又会太干燥了。

    此外,要是双面打印的操作量不是很大的话,我们最好不要同时往打印机进纸槽中放置太多的打印纸,因为纸张长时间地摆放在进纸槽中,并且受到外力的挤压后,十分容易出现粘连现象,毕竟长时间受到挤压之后的纸张容易形成一个整体。在将有粘连问题的打印纸放置到进纸槽中时,打印机在工作时十有八九会出现一次进多纸或者卡纸现象的发生。为了有效避免卡纸现象的发生,我们必须想办法将粘连的纸张分散开来;最简单的方法就是用手捏住纸张的边缘,然后用力抖动几下,就能使每页纸张之间分散开来了,这种方法通常适合粘连现象不严重的情况。要是打印纸相互之间粘连比较严重的话,我们最好先将打印纸放在太阳光线下照射一段时间,然后在正式装入进纸槽之前,用两只手分别拿住纸张的两端进行来回搓动,确保使每一张打印纸都能活动开来;接着使打印纸的一头摆放成一个整齐的斜面,并将斜面朝下正确地放到打印机进纸槽中,这样的话打印机在进纸时基本上就不会出现卡纸现象了。

    小提示:纸张表面的静电感应现象也会使打印纸张相互粘连在一起,所以我们在将纸张正式放置到打印机进纸槽中时,最好能将打印纸分散掸开来消除静电感应现象,以保证每页打印纸之间不粘连在一起,之后再整齐地将纸张放置到打印机进纸槽中。

    2、正确设置参数,避免页码出错

    在进行双面打印操作时,稍微不小心的话就可能导致正反面的页码被打印出错;为了有效避免页码被打印出错,我们不妨在正式进行双面打印操作之前,对双面打印参数进行一下适当设置,下面就是具体的设置过程:

    首先启动文档编辑程序,并在编辑界面的菜单栏中依次单击“文件”/“打印”命令,在弹出的目标文档打印属性设置窗口中,选中“页面范围”设置项处的“全部”项目;

    图1

    然后在“打印”设置项处,单击该设置项右侧的下拉按钮,从弹出的下拉列表中先选中“奇数页”项目,如图1所示,之后单击“确定”按钮,这样打印机就会自动开始打印目标文档中的奇数页面内容;

    图2

    等到奇数页面内容被打印成功之后,我们再把打印好的纸张内容重新正确放入到打印机进纸槽中;倘若目标文档在编辑排版的时候恰好碰到最后一页的页码是偶数时,那我们在“打印”设置项处选中“偶数页”项目时,同时需要单击“选项”按钮,进入到如图2所示的选项设置对话框;在该对话框的“打印选项”处,检查一下“逆页序打印”项目是否已经被选中,要是发现它还没有被选中的话,必须及时将它重新选中,然后单击“确定”按钮,这样打印时页码就不会显示出错了。

    倘若目标文档在编辑排版的时候恰好碰到最后一页的页码是奇数时,我们就不能再按照上面的设置方法进行打印了,因为按上面方法打印出来的页码就会出错了。这个时候,要是目标文档打印份数或页数比较少的话,我们不妨将最后一页纸张抽出来进行单独打印,不过这种方法在打印份数非常多的情况下,也容易造成打印页码出错的现象。其实,最为稳妥的办法就是在目标文档结尾的奇数页面后面人为地增加一个空白页面,确保目标文档的最后一页的页码是偶数,以后再按照上面的方法进行打印设置就可以了。

    一旦设置好打印参数后,我们在正式进行双面打印操作时,只需要将打印纸两次放到打印机进纸槽中,那么打印机就能按照指定的页码顺序将目标文档内容打印出来了,这种方法在文档打印份数非常多的情况下特别适用。此外,笔者在这里还需要提醒各位的是,当目标文档中的奇数页面内容被打印出来后,我们再重新放置打印纸时一定要注意放置的方向,否则打印出来的内容容易出现方向混乱。

    3、启用双面选项,提高打印效率

    上面的双面打印方式需要我们进行两次打印设置,而且需要执行两次打印命令,很显然这种打印方式效率不是很高。事实上,我们只要进行一次打印设置和打印操作,就能轻松实现目标文档的双面打印目的,下面就是具体的实现步骤:

    首先运行Word应用程序,打开目标文档内容,并在文档编辑界面中依次单击“文件”/“打印”菜单命令,进入到目标文档的打印属性设置窗口,在该窗口的“打印”设置项处,单击右侧的下拉按钮,在弹出的“打印”下拉列表中,选中“范围中所有页面”项目;

    图3

    其次选中该窗口中的“手动双面打印”复选项(如图3所示),单击“确定”按钮,这样系统会自动弹出“请将已打印好的一面纸张取出并将其重新放回到进纸槽中……”之类的提示窗口,单击该提示窗口中的“确定”按钮,打印机就会自动先打印目标文档中的奇数页面,等到奇数页面打印结束后再将一面已打印好的打印纸张反过来重放到进纸槽中,再单击提示窗口中的“确定”按钮,这样的话打印机又会自动将目标文档中的偶数页面打印出来了,如此一来我们只要进行一次设置就能完成双面打印操作了,这样就能大大提高双面打印效率。

    4、选合适打印机,随意双面打印

    我们知道除了在Word之类的应用程序中,可以直接设置双面打印参数进行双面打印操作外,其他文本编辑程序都不支持双面打印功能的设置,这样说来我们在打印Word之外的文本文档时,难道就不能进行双面打印操作了吗?答案是否定的!如果我们直接选择一款本身就支持双面打印功能的打印机的话,那么无论在打印什么类型的文本文档,我们都能随意进行双面打印操作。例如,要是我们选用了HP LaserJet 1150型号的激光打印机时,就能随时随地启用双面打印操作;下面就是该型号的激光打印机启用双面打印功能的具体操作步骤:

    首先运行特定类型的文本应用程序,并在该程序界面中打开待打印的目标文本文件,然后在文本编辑界面中单击“文件”菜单项,从弹出的下拉菜单中执行“打印”命令,打开目标文本文件的打印参数设置窗口;

    其次在该设置窗口的“打印机”下拉列表中,将HP LaserJet 1150型号的激光打印机选中,并单击该设置选项右侧的“属性”按钮,打开该激光打印机的属性设置界面;

    单击该属性设置界面中的“完成”标签,并在对应标签页面中找到“双面打印”复选项,同时将该复选项选中,最后单击“确定”按钮,这样的话打印机就能自动开始文本打印操作;当打印纸的第一面被打印完毕后,打印机就会自动弹出提示窗口,我们此时只要按照提示窗口的具体操作提示正确地取出纸张再重新放入纸张,最后再单击提示窗口中的“确定”按钮,打印机就能自动将文本内容打印输出到目标纸张的第二面了。

    就是在页面的两面上都打印上文字。

    目前惠普 A4 幅面喷墨打印机中支持自动双面打印单元的打印机比较多。当然,不支持自动双面打印单元的打印机也能实验手动双面打印,就是用手动翻页来实现双面打印。

    双面打印简单 的理解就是在一张纸的两面上都打印,以节约纸张。

    使用方法:打印机属性 打印首选页勾上"自动双面."

    将资料打印在纸张的反正面上,关健在于其中一侧的宽度要比另一侧宽一些,好做为装订线。在页边距页框中的设置决定着能否进行双面打印,主要是对页边距中的上、下、内侧、外侧、装订.线等值进行设置,然后进入打印设置窗口中,选择双面打印,由于激光打印机出纸的顺序不同,这时要进行的设置也有所不同,如果你使用打印机的上出纸,那么要进入选项设置,用鼠标点击选项按钮,在双面打印选项中,将打印顺序2选中,即窗口上显示顺序为6、4、2。当然如果你手的是下出纸,那么就不用这步设置了。全部设置好了后就可以进行双面打印了。 访问打印机属性(或在windows 2000 和xp 中访问“打印首选项”)。有关说明请参阅打印机属性(驱动程序)。

    在设备设置选项卡上,选择允许手动双面打印的选项。

    在完成选项卡上,选择双面打印。确保未选中直通送纸道。

    有些打印机功能在某些驱动程序或操作系统上不可用。有关该驱动程序中各功能可用性的信息,请参阅打印机属性(驱动程序)联机帮助。

    使用单页优先进纸槽(纸盘1)打印文档。将纸张装入纸槽,每次装入一张。

    收集打印完的页,并将纸叠整齐。将打印面朝下,顶端在前。

    将纸张装入单页优先进纸槽(纸盘1),从打印的第一页开始,每次装入一张。装纸时打印面朝下,顶端在前。

    点"打印"-"打印机属性"-"完成"栏-勾选"双面打印"-"确定"

    打印机会先打印文档的奇数页面,并跳出"双面打印向导"窗口,待文档所有奇数页打印完后,将已经打印好的纸张理齐,不改变方向,重新放入导纸槽,按"双面打印向导"窗口中的-"继续".

    0 0

    添加评论(0)

    展开全文
  • 最近需要按顺序打印word、excel、图片,其中有的需要单面打印,有的双面。网上查了很多方法。主要集中在几个方式解决 1、word的print和excel的printout里设置单双面 2、printdocument里的printsettings的duplex...

    最近需要按顺序打印word、excel、图片,其中有的需要单面打印,有的双面。网上查了很多方法。主要集中在几个方式解决

    1、word的print和excel的printout里设置单双面

    2、printdocument里的printsettings的duplex设置单双面

    试过之后效果都不好,昨天终于在MSDN上找到个直接设置打印机单双面的代码,非常管用。

    using System.Runtime.InteropServices;
    using System;
    
    namespace MyDuplexSettings
    {
    class DuplexSettings
    {
    #region Win32 API Declaration
    
    
        [DllImport("kernel32.dll", EntryPoint = "GetLastError", SetLastError = false, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern Int32 GetLastError();
    
    
    [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool ClosePrinter(IntPtr hPrinter);
    
    
    [DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesA", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern int DocumentProperties(IntPtr hwnd, IntPtr hPrinter, [MarshalAs(UnmanagedType.LPStr)]
    string pDeviceNameg, IntPtr pDevModeOutput, IntPtr pDevModeInput, int fMode);
    
    
    [DllImport("winspool.Drv", EntryPoint = "GetPrinterA", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool GetPrinter(IntPtr hPrinter, Int32 dwLevel, IntPtr pPrinter, Int32 dwBuf, ref Int32 dwNeeded);
    
    
    [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
    static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, ref PRINTER_DEFAULTS pDefault);
    
    
    [DllImport("winspool.Drv", EntryPoint = "SetPrinterA", ExactSpelling = true, SetLastError = true)]
    public static extern bool SetPrinter(IntPtr hPrinter, int Level, IntPtr pPrinter, int Command);
    
    
    [StructLayout(LayoutKind.Sequential)]
    public struct PRINTER_DEFAULTS
    {
        public IntPtr pDatatype;
        public IntPtr pDevMode;
        public int DesiredAccess;
    }
    
    [StructLayout(LayoutKind.Sequential)]
    public struct PRINTER_INFO_9
    {
    
        public IntPtr pDevMode;
            // Pointer to SECURITY_DESCRIPTOR
        public int pSecurityDescriptor;
    }
    
    public const short CCDEVICENAME = 32;
    
    public const short CCFORMNAME = 32;
    
    [StructLayout(LayoutKind.Sequential)]
    public struct DEVMODE
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCDEVICENAME)]
        public string dmDeviceName;
        public short dmSpecVersion;
        public short dmDriverVersion;
        public short dmSize;
        public short dmDriverExtra;
        public int dmFields;
        public short dmOrientation;
        public short dmPaperSize;
        public short dmPaperLength;
        public short dmPaperWidth;
        public short dmScale;
        public short dmCopies;
        public short dmDefaultSource;
        public short dmPrintQuality;
        public short dmColor;
        public short dmDuplex;
        public short dmYResolution;
        public short dmTTOption;
        public short dmCollate;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCFORMNAME)]
        public string dmFormName;
        public short dmUnusedPadding;
        public short dmBitsPerPel;
        public int dmPelsWidth;
        public int dmPelsHeight;
        public int dmDisplayFlags;
        public int dmDisplayFrequency;
    }
    
    
    public const Int64    DM_DUPLEX = 0x1000L;
    public const Int64 DM_ORIENTATION = 0x1L;
    public const Int64 DM_SCALE = 0x10L;
    public const Int64 DMORIENT_PORTRAIT = 0x1L;
    public const Int64 DMORIENT_LANDSCAPE = 0x2L;
    public const Int32  DM_MODIFY = 8;
    public const Int32 DM_COPY = 2;
    public const Int32 DM_IN_BUFFER = 8;
    public const Int32 DM_OUT_BUFFER = 2;
    public const Int32 PRINTER_ACCESS_ADMINISTER = 0x4;
    public const Int32 PRINTER_ACCESS_USE = 0x8;
    public const Int32 STANDARD_RIGHTS_REQUIRED = 0xf0000;
    public const int PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE);
        //added this 
    public const int CCHDEVICENAME = 32;
        //added this 
    public const int CCHFORMNAME = 32;
    
        #endregion
    
    #region Public Methods
    
    
    /// <summary>
    /// Method Name : GetPrinterDuplex 
    /// Programmatically get the Duplex flag for the specified printer 
    /// driver's default properties. 
    /// </summary>
    /// <param name="sPrinterName"> The name of the printer to be used. </param>
    /// <param name="errorMessage"> this will contain error messsage if any. </param>
    /// <returns> 
    /// nDuplexSetting - One of the following standard settings: 
    /// 0 = Error
    /// 1 = None (Simplex)
    /// 2 = Duplex on long edge (book) 
    /// 3 = Duplex on short edge (legal) 
    /// </returns>
    /// <remarks>
    /// </remarks>
    public short GetPrinterDuplex(string sPrinterName, out string errorMessage)
    {
        errorMessage = string.Empty;
        short functionReturnValue = 0;
        IntPtr hPrinter = default(IntPtr);
        PRINTER_DEFAULTS pd = default(PRINTER_DEFAULTS);
        DEVMODE dm = new DEVMODE();
        int nRet = 0;
        pd.DesiredAccess = PRINTER_ACCESS_USE;
        nRet = OpenPrinter(sPrinterName, out hPrinter, ref pd);
        if ((nRet == 0) | (hPrinter.ToInt32() == 0)) {
            if (GetLastError() == 5) {
                errorMessage = "Access denied -- See the article for more info.";
            } else {
                errorMessage = "Cannot open the printer specified " + "(make sure the printer name is correct).";
            }
            return functionReturnValue;
        }
        nRet = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, IntPtr.Zero, IntPtr.Zero, 0);
        if ((nRet < 0)) {
            errorMessage = "Cannot get the size of the DEVMODE structure.";
            goto cleanup;
        }
        IntPtr iparg = Marshal.AllocCoTaskMem(nRet + 100);
        nRet = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, iparg, IntPtr.Zero, DM_OUT_BUFFER);
        if ((nRet < 0)) {
            errorMessage = "Cannot get the DEVMODE structure.";
            goto cleanup;
        }
        dm = (DEVMODE)Marshal.PtrToStructure(iparg, dm.GetType());
        if (!Convert.ToBoolean(dm.dmFields & DM_DUPLEX)) {
            errorMessage = "You cannot modify the duplex flag for this printer " + "because it does not support duplex or the driver " + "does not support setting it from the Windows API.";
            goto cleanup;
        }
        functionReturnValue = dm.dmDuplex;
        
        cleanup:
        if ((hPrinter.ToInt32() != 0))
            ClosePrinter(hPrinter);    
        return functionReturnValue;
    }
    
    
    /// <summary>
    /// Method Name : SetPrinterDuplex     
    /// Programmatically set the Duplex flag for the specified printer driver's default properties. 
    /// </summary>
    /// <param name="sPrinterName"> sPrinterName - The name of the printer to be used. </param>
    /// <param name="nDuplexSetting"> 
    /// nDuplexSetting - One of the following standard settings: 
    /// 1 = None 
    /// 2 = Duplex on long edge (book) 
    /// 3 = Duplex on short edge (legal) 
    /// </param>
    ///  <param name="errorMessage"> this will contain error messsage if any. </param>
    /// <returns>
    /// Returns: True on success, False on error.
    /// </returns>
    /// <remarks>
    /// 
    /// </remarks>
    public bool SetPrinterDuplex(string sPrinterName, int nDuplexSetting, out string errorMessage)
    {
        errorMessage = string.Empty;
        bool functionReturnValue = false;
        IntPtr hPrinter = default(IntPtr);
        PRINTER_DEFAULTS pd = default(PRINTER_DEFAULTS);
        PRINTER_INFO_9 pinfo = new PRINTER_INFO_9();
        DEVMODE dm = new DEVMODE();
        IntPtr ptrPrinterInfo = default(IntPtr);
        int nBytesNeeded = 0;
        int nRet = 0;
        Int32 nJunk = default(Int32);
        if ((nDuplexSetting < 1) | (nDuplexSetting > 3)) {
            errorMessage = "Error: dwDuplexSetting is incorrect.";
            return functionReturnValue;
        }
        pd.DesiredAccess = PRINTER_ACCESS_USE;
        nRet = OpenPrinter(sPrinterName, out hPrinter, ref pd);
        if ((nRet == 0) | (hPrinter.ToInt32() == 0)) {
            if (GetLastError() == 5) {
                errorMessage = "Access denied -- See the article for more info." ;
            } else {
                errorMessage = "Cannot open the printer specified " + "(make sure the printer name is correct).";
            }
            return functionReturnValue;
        }
        nRet = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, IntPtr.Zero, IntPtr.Zero, 0);
        if ((nRet < 0)) {
            errorMessage = "Cannot get the size of the DEVMODE structure.";
            goto cleanup;
        }
        IntPtr iparg = Marshal.AllocCoTaskMem(nRet + 100);
        nRet = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, iparg, IntPtr.Zero, DM_OUT_BUFFER);
        if ((nRet < 0)) {
            errorMessage = "Cannot get the DEVMODE structure.";
            goto cleanup;
        }
        dm = (DEVMODE)Marshal.PtrToStructure(iparg, dm.GetType());
        if (!Convert.ToBoolean(dm.dmFields & DM_DUPLEX)) {
            errorMessage = "You cannot modify the duplex flag for this printer " + "because it does not support duplex or the driver " + "does not support setting it from the Windows API.";
            goto cleanup;
        }
        dm.dmDuplex = (short) nDuplexSetting;
        Marshal.StructureToPtr(dm, iparg, true);
        nRet = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, pinfo.pDevMode, pinfo.pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
        if ((nRet < 0)) {
            errorMessage = "Unable to set duplex setting to this printer.";
            goto cleanup;
        }
        GetPrinter(hPrinter, 9, IntPtr.Zero, 0, ref nBytesNeeded);
        if ((nBytesNeeded == 0)) {
            errorMessage = "GetPrinter failed.";
            goto cleanup;
        }
        ptrPrinterInfo = Marshal.AllocCoTaskMem(nBytesNeeded + 100);
        nRet = GetPrinter(hPrinter, 9, ptrPrinterInfo, nBytesNeeded, ref nJunk)?1:0;
        if ((nRet == 0)) {
            errorMessage = "Unable to get shared printer settings.";
            goto cleanup;
        }
        pinfo = (PRINTER_INFO_9)Marshal.PtrToStructure(ptrPrinterInfo, pinfo.GetType());
        pinfo.pDevMode = iparg;
        pinfo.pSecurityDescriptor = 0;
        Marshal.StructureToPtr(pinfo, ptrPrinterInfo, true);
        nRet = SetPrinter(hPrinter, 9, ptrPrinterInfo, 0)?1:0;
        if ((nRet == 0)) {
            errorMessage = "Unable to set shared printer settings.";
        }
        functionReturnValue = Convert.ToBoolean(nRet);
        cleanup:
        if ((hPrinter.ToInt32() != 0))
            ClosePrinter(hPrinter);
        return functionReturnValue;
    }
    #endregion
    
    }
    }

    使用方法,以word为例:

    public static void PrintWord(string FileName, PrintDocument pd)
            {
                //0 check if there are any winword process exist
                //if is,kill it
                Process[] wordProcess = Process.GetProcessesByName("WINWORD");
                for (int i = 0; i < wordProcess.Length; i++)
                {
                    wordProcess[i].Kill();
                }
                object missing = System.Reflection.Missing.Value;
                object objFileName = FileName;
                object objPrintName = pd.PrinterSettings.PrinterName;
                WORD.Application objApp = new WORD.Application();
                WORD.Document objDoc = null;
                try
                {
    
                    objDoc = FrameWork.WordTool.OpenWord(objApp, FileName);
                    objDoc.Activate();
                    object copies = "1";
                    object pages = "";
                    object range = WORD.WdPrintOutRange.wdPrintAllDocument;
                    object items = WORD.WdPrintOutItem.wdPrintDocumentContent;
                    object pageType = WORD.WdPrintOutPages.wdPrintAllPages;
                    object oTrue = true;
                    object oFalse = false;
                    objApp.Options.PrintOddPagesInAscendingOrder = true;
                    objApp.Options.PrintEvenPagesInAscendingOrder = true;
                    objDoc.PrintOut(
                    ref oTrue, ref oFalse, ref range, ref missing, ref missing, ref missing,
                    ref items, ref copies, ref pages, ref pageType, ref oFalse, ref oTrue,
                    ref missing, ref oFalse, ref missing, ref missing, ref missing, ref missing);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (objDoc != null)
                    {
                        Marshal.ReleaseComObject(objDoc);
                        Marshal.FinalReleaseComObject(objDoc);
                        objDoc = null;
                    }
                    if (objApp != null)
                    {
                        objApp.Quit(ref missing, ref missing, ref missing);
                        Marshal.ReleaseComObject(objApp);
                        Marshal.FinalReleaseComObject(objApp);
                        objApp = null;
                    }
                }
            }

    使用方法,以excel为例,我这有两种表格,把打印页数固定了打印:

    public static void PrintExcel(string excelFileName, PrintDocument pd, int iFlag)
            {
                //0 check if there are any winword process exist
                //if is,kill it
                Process[] wordProcess = Process.GetProcessesByName("EXCEL");
                for (int i = 0; i < wordProcess.Length; i++)
                {
                    wordProcess[i].Kill();
                }
                object Missing = System.Reflection.Missing.Value;
                object objExcel = null;
                object objWorkbooks = null;
    
                try
                {
                    objExcel = ExcelTool.OpenExcel(excelFileName);
                    if (iFlag == 1)
                    {
                       
                        objWorkbooks = ExcelTool.GetWorkSheets(objExcel);
                        object[] parameters = null;
                        try
                        {
                            parameters = new object[8];
                            parameters[0] = 1;
                            parameters[1] = 4;
                            parameters[2] = 1;
                            parameters[3] = Missing;
                            parameters[4] = pd.PrinterSettings.PrinterName;
                            parameters[5] = Missing;
                            parameters[6] = true;
                            parameters[7] = Missing;
                            objWorkbooks.GetType().InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, objWorkbooks, parameters);
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                    }
                    else
                    {
                        
                        objWorkbooks = ExcelTool.GetWorkSheets(objExcel);
                        object[] parameters = null;
                        try
                        {
                            parameters = new object[8];
                            parameters[0] = 5;
                            parameters[1] = 5;
                            parameters[2] = 1;
                            parameters[3] = Missing;
                            parameters[4] = pd.PrinterSettings.PrinterName;
                            parameters[5] = Missing;
                            parameters[6] = true;
                            parameters[7] = Missing;
                            objWorkbooks.GetType().InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, objWorkbooks, parameters);
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (objWorkbooks != null)
                    {
                        ExcelTool.ReleaseComObj(objWorkbooks);
                    }
                    if (objExcel != null)
                    {
                        ExcelTool.ReleaseComObj(objExcel);
                    }
                    System.GC.Collect();
                }
            }

    最后再说说图片打印A4纸的设置,这里省略其它代码,如果纠结这问题的人一下就看出来问题出哪里了。

    如果要适应纸张尺寸的话:

     pd.PrintPage += (_, e) =>
                        {
                            var img = System.Drawing.Image.FromFile(FileName[i]);
                            e.Graphics.DrawImage(img, 20, 20, e.PageSettings.PrintableArea.Width, e.PageSettings.PrintableArea.Height);
                            if (i == FileName.Length - 1)
                            {
                                e.HasMorePages = false;
                            }
                            else
                            {
                                e.HasMorePages = true;
                            }
                            i++;
                        };

    如果是固定大小的话:

    pd.PrintPage += (_, e) =>
                        {
                            var img = System.Drawing.Image.FromFile(FileName[i]);
                            int iWidth = 520;
                            double hFactor = iWidth / (double)img.Width;
                            int iHeight = Convert.ToInt32(img.Height * hFactor);
                            Rectangle Rect = new Rectangle(170, 330, iWidth, iHeight);
                            e.Graphics.DrawImage(img, Rect);
                            if (i == FileName.Length - 1)
                            {
                                e.HasMorePages = false;
                            }
                            else
                            {
                                e.HasMorePages = true;
                            }
                            i++;
                        };

     

     

    我辛苦了几天累的代码,分享给有用之人:)

     

    自己在做独立开发,希望广结英豪,尤其是像我一样脑子短路不用react硬拼anroid、ios原生想干点什么的朋友。

    App独立开发群533838427

    微信公众号『懒文』-->lanwenapp<--

    转载于:https://www.cnblogs.com/matoo/p/3680117.html

    展开全文
  • 顺序还是逆序对于不少家庭用户来说,在打印多页文件时,都会发现一个很纠结的事情,打印出来的稿件页序是反的,最后一页在最上面,而第一页在最下面,每次打印完毕后,还得手动整理一下页序才能阅读或装订,这要是几...

    提到打印,相信很多人都认为很简单,不就是在文档编排好后点击“打印”就行了吗?其实打印还是有技巧的,特别是在遇到打印机出现小问题时,掌握好一些技巧,对提高打印效率是很有帮助的。

    顺序还是逆序

    对于不少家庭用户来说,在打印多页文件时,都会发现一个很纠结的事情,打印出来的稿件页序是反的,最后一页在最上面,而第一页在最下面,每次打印完毕后,还得手动整理一下页序才能阅读或装订,这要是几十页甚至几百页的大稿子,那可是劳神劳力的大问题了。而办公用户遇到这样的问题却很少,为什么呢?原因很简单,家庭用户大多使用喷墨打印机,而喷墨打印机在打印时,其打印面一般是朝上的,这样在堆叠后,就变成最后打印的一页在最上面,从而导致逆序。而办公用户大多使用的是激光打印机,其打印面朝下,这样在取出打印稿时,其顺序与打印顺序是一致的。

    735c42fd0e054f473c5eafa7152c4f48.png

    其实解决的办法很简单,不就是打印出来的稿件是逆序的吗?那干脆在打印时也逆序打印,先打最后一页,这样打印出来的页序不就正常了吗?要做到这一点,只需要点击Word菜单中的“文件”,在弹出的菜单中选择“选项”并进入后,选择“高级”,下拉右侧菜单,找到打印选项后,勾选第三项“逆序打印页面”,再点击右下角的“确定”。好了,这下打印出的文稿顺序就正常了,再也不用整理了。请注意,这一设定一般符合喷打,符合出纸时打印面朝上的打印机,如果用在打印面朝下的激打中,就弄巧成拙了。

    手动双面输出,卡纸怎么办

    双面打印自然是好处多多,毕竟减少一半的纸张消耗,让打印稿装订和携带都更加方便。因此即便是使用不带自动双面打印单元的打印机,不少使用者也用手动双面输出的方式来实现双面打印。而实现的办法也很简单,只需要在打印时将单面打印改为“手动双面打印”(图1),就可以轻松实现。

    这种方法当然也没有错,不过手动双面输出有一个问题,就是打印纸在正面打印后,容易产生轻微变形和褶皱,这样在背面打印时,卡纸的概率将增加。而手动双面打印一旦在打印背面时卡纸,后果将很严重:卡纸页将作废,另外由于卡纸后电脑将重发当前页,这就会导致后续打印的页序混乱,如此一来,整个打印稿就会作废。这要是打印页码数量多的稿件,损失可就大了。那么如何应对手动双面打印时的卡纸呢?

    一旦在打印背面时卡纸,首先在进纸器内带打印反面的纸张上方放置一张白纸,并将双面都已经打印完成的纸张取出,放在边上。随后打开打印机盖板,取出卡纸的纸张,继续进行打印。在打印完成后,取出出纸器最下方的打印纸,也就是之前放入的仅打印单面的白纸,根据打印纸输出的页码,重新回到文件中,找到这张纸的页数,如是18页,那么可以推断出其正面打印的应该是第17页。

    此时,将这张单面打印的纸张翻面,重新放回进纸器,重新进入Word中选择打印,在设置中,将“打印所有页”改为“自定义打印范围”,并输入需要打印的页数,也就是第17页(图2)。在打印后,重新整理文件页数,这下文件就完整了。什么,双面打印时总是隔几页就卡一次纸?其实这真不是操作的问题,而是你选用的打印纸质量不好,容易变形,使用70g以上的品牌打印纸,这是双面打印时对纸张的最低要求了。

    c5ae32db8da9443ba7c238e110768225.png

    打印到文件,这是干啥的

    打印,不就是把文件打印到纸张上吗?可在不少图形处理和办公软件中,都有个“打印到文件”的选项(图3),这是个什么东西?其实这就是虚拟打印机,虚拟打印机的用处多多,首先就是格式转换,如在安装了Microsoftprintto PDF虚拟打印机后,就可以利用该打印选项,将Word文件转换为PDF文件;如果安装了 Microsoft XPS Document Writer虚拟打印机后,就可以输出WPS文件。

    373d1231dea5886a3f6b6df2822555a9.png

    当然,“打印到文件”还有个重要用处,那就是增加打印的方便性。打个比方,我们经常会在家里制作各种文档,可家里没有打印机,只能拿到单位进行打印,这时候如果单位的电脑上没有安装同一款软件,就抓瞎了。而即便是单位安装了同一款软件,可如果字体和图库不一样,这样即便把源文件拷贝到单位的电脑上,也无法打印出与家中电脑上显示相同的文档。

    在这种情况下,“打印到文件”功能就显得很重要了,利用它可以将文稿按打印时的格式生成打印文件,这样在单位电脑上不需要字库和图库的支持,就可以达到理想的输出效果。不过,“打印到文件”所生成的prn文件不仅较大,而且常规的软件是无法将它打开输出的,需要在安装SendFileToPrinter软件后,才能将该文件发送到打印机进行打印。同时,虽然prn文件的后缀名一致,但由于各品牌各型号打印机的打印语言存在差异,因此在生成打印文件时,使用的打印机型号必须和最终打印时的打印机型号相同(图4),否则会出现打印错误。

    13101dc65a744502786e9d53bd1f42a2.png

    (CP)

    展开全文
  • Fagoo P310e证卡打印机,不仅可以在卡片上打印出精美的彩色图片,还可以打印可擦写卡,在不增加任何成本的情况下打印出防伪水印,还可以在不增加任何硬件设备情况下,轻松从单面打印功能升级为双面打印功能,还可以...

    0227e381758f306217ac23398f2875ea.png

    Fagoo P310e证卡打印机,不仅可以在卡片上打印出精美的彩色图片,还可以打印可擦写卡,在不增加任何成本的情况下打印出防伪水印,还可以在不增加任何硬件设备情况下,轻松从单面打印功能升级为双面打印功能,还可以通过增加模块对磁条卡、IC卡进行读写操作,确实是一款一机多能、性价比非常高的机器。该产品6大领先优势:

    1. 专业---彩色证卡打印

    Fagoo P310e标配300dpi专业级热升华打印模式,可实现边到边彩色证卡打印。

    2. 多用---可擦写卡打印

    Fagoo P310e标配可擦写看打印模式,用户无需增加任何成本,即可打印可擦写卡。

    c52ef319c244da3a4332a1e7110d2b84.png

    3. 安全---防伪水印打印

    Fagoo P310e拥有HoloKote专利技术,在打印履膜的同时打印HoloKote安全防伪水印,并且无需额外耗材费用支出。

    6e64f0a5d3f73ec205b83d557fee1510.png

    4. 4.升级----单双面自行升级

    通过一个简单的嵌入式升级模式,Fagoo P310e可由用户自行从单面升级为双面打印机。Enduro Duo Fagoo为自动双面证卡打印机.

    5. 5.灵活---前后双进卡方式

    Fagoo P310e同时提供前/后双进卡方式,灵活满足不同用户对于单次/批量打印需求。

    6. 6.智能---即插即用USB接口

    时尚、紧凑的设计,具有简单按钮菜单选择的彩色LCD液晶显示。USB接口及微软认证即插即用驱动程序使Fagoo P310e极易安装和使用

    技术参数打印模式:300dpi彩色热升华/可擦写卡打印/防伪水印打印单/双面:通过一个嵌入式升级模块,终端用户可以很容易将Fagoo P310e单面打印机升级为自动双面打印机。
    Fagoo P310e为出厂预设双面打印机。可视安全:用户可在卡片表面打印HoloKote安全防伪水印,当使用HoloPatch卡片时,此水印可以在卡片的金色封印上高亮显示。机器内置有4种固定的HoloKote防伪水印图案。色带:FA300YMCKO:300YMCKO色带
    FA450YMCKO-HALF:450YMCKO半格色带
    FA1000K:1000印黑色色带
    FA600KO:600印黑色加履膜黑色色带
    FA250YMCKOK:250印双面色带打印速度:彩色35秒/张(单面),黑色7秒/张(单面)质保方式:1年质保打印接口:USB兼容系统:Windows 2000™, 2003™,XP™,Vista和Windows 7打印机尺寸:高:233mm 长:453mm 高:206mm卡盒容量:100张进卡盒,30张出卡盒卡片厚度:0.51mm-1.02mm卡片类型:PVC白卡,磁条卡(HiCo,LoCo),胶贴卡和HoloPatch卡片.卡片尺寸:ISO标准CR80 85.6mm x 54mm打印机重量:5.5kg工作环境:办公室环境 10°C to 30°C电源外置90-265V 40-60Hz自适应电源产品型号Fagoo P310e 单面证卡打印机
    Fagoo P310e Duo 双面证卡打印机

    展开全文
  • 公式、图片打印不出来双面打印、单面打印、试卷正反面颠倒A4的页面如何打印到B4或A3纸上面……试卷打印的设置涉及内容:显示设置打印设置——“缩放”、“每版打印?页”短边与长边翻转First我们来解决打印不出来的...
  • 点击图片 1元抢购Excel、Word、PPT全套课程作者:佚名 来源:学个P啊(id:i_sharing8)Word...今天我来给大家介绍日常办公中最最常用的几个Word双面打印技巧:1、双面打印2、正反面不同3、缩放打印4、格式转换希望学习...
  • 批量化的打印PDF文档是可以做到的,你可以先将PDF文档在软件中进行合并,就可以直接直接打印了。大多数人常用的PDFelement就有这样的功能。首先是合并,在PDFelement的软件首页就有一个“合并”的选项,进去之后,将...
  • #原图片的顺序 OldOrder = [] #新图片的顺序 NewOrder = [] #原图片名称 PicturesList = [] #图片路径 PicPath = 'E:/Pic' #列出图片名称 PicturesList = os.listdir(PicPath) #根据图片数量生成连续...
  • 3.进纸盒里要准备至少文档四分之一页数的纸张(例如:80页A5图片双面打印,需要80/2/2=20页,A4纸),提示缺纸的时候把出纸口的纸保持绝对朝向不变再次放入纸盒打印另一面,装好纸盒后按下进纸按钮(不要按电源键)...
  • 3、在打印预览界面添加了简单的双面打印功能。(打印预览界面工具栏中的“打印\双面打印”菜单); 4、其他一些完善,比如DGVPrint组件中设置的行高无效等问题。 本控件特色: 1、强大的DataGridView打印功能,不仅...
  • 公式、图片打印不出来双面打印、单面打印、试卷正反面颠倒A4的页面如何打印到B4或A3纸上面……试卷打印的设置涉及内容:显示设置打印设置——“缩放”、“每版打印?页”短边与长边翻转First,我们来解决打印不出来的...
  • Web打印控件

    2012-04-18 09:08:58
    6. 如何输出多页长文档及双面打印见样例六 7. 如何定向输出见样例七 8. 如何打印图片见样例八 9. 如何用程序加载打印维护背景图见样例九 10 如何控制打印样式(STYLE)见样例十 11 如何打印条码图案见样例十一 ...
  • 公式、图片打印不出来双面打印、单面打印、试卷正反面颠倒A4的页面如何打印到B4或A3纸上面……试卷打印的设置涉及内容:显示设置打印设置——“缩放”、“每版打印?页”短边与长边翻转First我们来解决打印不出来的...
  • 1.经常会遇到打印某个人的A\B\C文档,包含Word、Excel、图片三种内容,有些需要单面打印,有些需要双面打印,如果打开文件去打印很麻烦,尤其是需要批量的时候。 2.单双面打印的设定代码网上很多,但最后还是在msdn...
  • Fagoo P310e证卡打印机,不仅可以在卡片上打印出精美的彩色图片,还可以打印可擦写卡,在不增加任何成本的情况下打印出防伪水印,还可以在不增加任何硬件设备情况下,轻松从单面打印功能升级为双面打印功能,...
  • 首先检查您的电脑已经连接到一个打印机上,然后您只需要打开想要打印的文件或者图片,点击软件中的打印按钮,设置好打印分数和是否双面打印等设置,点击打印即可。 1、首先检查您的电脑已经连接到一个打印机上,您...
  • 现在要进行word打印,WORD为横向,必须设置为“双面打印” “翻转长边的页面” 请问各位大虾怎么设置呀! 我通过网上查找只有 在wordapp 下的 options下有,但属性太多了,不知怎么设置,请大 神指导!最后3个币了,...
  • 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10如何控制打印样式(STYLE) 见样例十 11如何直接打印条形码见样例十一 12如何读写...
  • ● 客户端强制黑白打印、去除图片打印、去除图形打印等(新增) 页眉和水印打印 ● 增加水印功能,强制在每页纸上自定义水印文字内容(新增) ● 可以强制在每页纸上自定义页眉打印内容(如:用户名、打印机名、...
  • Lodop6.0web打印控件及技术手册

    热门讨论 2011-10-09 17:04:03
    6. 如何输出多页长文档及双面打印见样例六 7. 如何定向输出见样例七 8. 如何打印图片见样例八 9. 如何用程序加载打印维护背景图见样例九 10 如何控制打印样式(STYLE)见样例十 11 如何直接打印条形码见样例十一 ...
  • 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10.如何控制打印样式(STYLE)见样例十 11.如何直接打印条形码见样例十一 12.如何...
  • 万圣节 数据 随着万圣节的临近... 该型号是快速打印件,可以用一些双面胶带轻松地粘贴到光滑的表面上。 使用eSun的发光绿色PLA(聚乳酸)灯丝印刷,您可以在Thingiverse上找到其型号 。 2.捣蛋迹象 与Thing...
  • 问题:A3幅面的双面打印的在中间用骑马钉装订成小册子, 拆开中间装订的订书钉由复印机一次性扫描成PDF文件。 阅读不方便:页码错乱,A3幅面,左右两页。 本程序将扫描的A3幅面的PDF文件转换成理顺页码单面的A4...
  • Hello大家好,我是帮帮。今天跟大家分享一组会议座位牌,座牌简易可编辑,word排版多样式批量打印套用。为了让大家能更稳定的下载模板,我们又...メメ完整背景图片,文本框设计,轻松套打打印,应用轻松。メメ大家...
  • 双面打印】打印双面小册子专用 【打印底端标题】将最后几行做为底端标题进行打印,弥补Excel只有顶端标题之不足 【生成系统图标】VBA编程人员常用的工具。可以查询Excel内部图标的ID号 【获取内置命令ID】VBA编程...
  • Hello大家好,我是帮帮。...メ大家请看范例图片,96套word邀请函,精美背景图片设计,文本框邮件合并,一键打印。メメ两种风格样式设计,双面折页邀请函,单页邀请函。メメword源文件打包套用,自...
  • 从商品图片或介绍中也能看到,只要是多功能打印机上面多了一层放文件的小帽子,就是自动输稿器。不过这个输稿器,也有讲究。多功能打印机上面放文件的小帽子就是ADF输稿器价格相对便宜的,就是单面ADF自动输稿器,一...

空空如也

空空如也

1 2 3 4 5
收藏数 82
精华内容 32
关键字:

双面打印图片