精华内容
下载资源
问答
  • 现在可以苹果手机直接可以和打印机实现打印,再也不用把手机的内容铐到电脑里在去打印,节省了很多时间
  • android 安卓手机 网络打印 如果家有WIFI共享打印机(不一定要带WIFI功能的打印机,可以通过WIFI路由器或WIFI共享器分配了IP地址的打印机),那你一定要下,手机直接打印输出,爽到底。
  • 使用现成工具类实现的demo,不喜勿喷,手机蓝牙连接打印机、打印机打印方法为现成,只需要将自己打印的数据出入即可完成,关于打印格式可自己在demo中printTest()中设置调试
  • 该资源里面含有屏幕截图打印,控件直接打印和图片分页打印的源码,的是C#,VS2005,源。其中控件直接打印可以避免屏幕打印的屏幕转换问题,图片分页打印则是把图片截成两部分,再分别打印出来
  • 3D打印源文件,小象手机支架,123D作品打印直接转换STL
  • 这段时间公司给人开发连接打印机的手机端APP时候做的一个小的例子,直接打开手机蓝牙,连接打印机,还有就是打印出来的内容我直接在程序里面写死了,大家可以修改一下,就能了,的Androidstudio开发的。...
  • 这段时间公司给人开发连接打印机的手机端APP时候做的一个小的例子,直接打开手机端输打印机的IP,连接打印机,还有就是打印出来的内容直接在程序里面可修改,大家可以修改一下,就能了,的Androidstudio开发的。...
  • 苹果手机有一个叫“隔空打印”功能,急需打印的时候不需要开电脑也不必将照片或文件传到电脑,就可以打印,下面我们来了解一下这个新技巧。 首先,苹果手机都有一个扫描功能,我们打开备忘录-新建-点这里的加号-...

    很多人应该都试过急需打印的时候,身边却没有电脑这种情况吧?只用手机怎么打印呢?苹果手机有一个叫“隔空打印”功能,急需打印的时候不需要开电脑也不必将照片或文件传到电脑,就可以打印,下面我们来了解一下这个新技巧。

    首先,苹果手机都有一个扫描功能,我们打开备忘录-新建-点这里的加号-扫描文稿之后点储存。

    然后扫完之后点右上角的小箭头就可以看到-打印-选择打印机-选择几份-几页,这样就可以"隔空打印"啦.

    最后还要说一下,除了苹果手机能打印,我们安卓手机也是可以的哦,只不过得先下载一个打印软件,然后打开WIFI设置,

    连接打印机之后选择打印照片或文档直接打印,用手机打印是不是大大的提高了办公效率了呢?这样打印出来的资料质量也好,操作更方便更快捷。学会了给我点个赞哦!

    展开全文
  • } private void reportViewer_RenderingComplete(object sender, Microsoft.Reporting.WinForms.RenderingCompleteEventArgs e) { } } } 直接打印用到了一个工具类 using System; using System.Collections.Generic...

    最近需要用到WPF做一个报表
    然后经过各种查阅资料
    终于整出来了一个Demo

    软件是VS2017 .netframework是4.5
    1.配置环境
    工具,获取扩展和更新
    然后安装RDLC,然后重启
    在这里插入图片描述
    新建项目
    项目的引用里面添加
    System.Printing
    System.Management
    System.Drawing

    NuGet包里面添加
    Microsoft.ReportViewer V11.0.3366.16

    在这里插入图片描述

    2.创建实体类和数据集

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RDLCPrinter
    {
        public class Customer
        { 
    
            public string carrierCompanyName { get; set; }
            public string checkInTime { get; set; }
            public string startPoint { get; set; }
            public string outStock { get; set; }
    
        }
    }
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RDLCPrinter
    {
        class Plan
        {
            public string carrierCompanyName { get; set; }  //承运单位
            public string driver { get; set; } //司机
            public string driverId { get; set; } //司机id
            public string vehicleNo { get; set; } //车牌号
            public string mobile { get; set; } //电话
            public string planNo { get; set; } //调度单号
            public string startPoint { get; set; } //装点
            public string endPoint { get; set; } //卸点
            public string flowName { get; set; } //流向
            public string prodName { get; set; } //品名
            public string planWeight { get; set; } //重量
            public string planQuantity { get; set; } //件数
            public string remark { get; set; } //备注
            public string cardNo { get; set; }
            public string planStatusName { get; set; }//签到状态
            public string checkInTime { get; set; }//签到时间
            public string scanDateTime { get; set; }//扫码日期和时间
            public string scanTime { get; set; }//扫码时间
            public string outStock { get; set; }//仓库
        }
    }
    
    

    然后创建两个数据集
    在这里插入图片描述
    数据集里 右键 添加 DataTable把实体类的属性都加进去
    或者
    工具箱 双击DataTable
    加完之后是这样的
    在这里插入图片描述

    在这里插入图片描述

    然后创建一个rdlc
    在这里插入图片描述
    左边 新建 数据集 在这里插入图片描述
    自己找到实体类,或者直接选择刚才创建好的DataSet.xsd

    两个实体类都添加一下数据源

    然后在rdlc文件 右键 插入 表
    在这里插入图片描述
    表里绑定一下属性
    在这里插入图片描述
    表头的汉字是自己加的

    新建几个文本框 还有创建一个页眉
    一个文本框绑定页数
    另外的绑定另外一个实体类
    具体的操作流程
    在一个文本框上面右键
    数据集->DataSet->然后选择属性双击
    在这里插入图片描述
    绑定页数同理,用的是内置字段->pageNumber双击,然后用一下字符串拼接
    (这个感觉和Excel非常神似啊)
    在这里插入图片描述
    3.页面设计
    MainWindow添加两个按钮,一个是打印预览的,一个是直接打印的

    <Window x:Class="RDLCPrinter.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" 
            xmlns:local="clr-namespace:RDLCPrinter"
            mc:Ignorable="d"
            Title="MainWindow" Height="324" Width="576">
        <Grid>
            <DockPanel>
                <Button Width="100" Height="30" Content="打印预览" Click="btnClickMe_Click" Margin="90,0,0,0"/>
                <Button x:Name="Button_Printer"  Width="100" Height="30"  Content="直接打印"  Click="Button_Print_Click"/>
            </DockPanel>
        </Grid>
    </Window>
    

    然后是RepoerViewer.xaml
    这个需要注意的是
    需要在头上加上这个

    xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
    

    然后是整体的代码

    <UserControl x:Class="RDLCPrinter.ReportViewer"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
            xmlns:local="clr-namespace:RDLCPrinter"
            mc:Ignorable="d"
              d:DesignHeight="600" d:DesignWidth="800" Loaded="UserControl_Loaded">
        <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
            <WindowsFormsHost Name="printArea">
                <rv:ReportViewer x:Name="reportViewer1" RenderingComplete="reportViewer_RenderingComplete" />
            </WindowsFormsHost>
        </Grid>
    </UserControl>
    

    然后新建一个CustomerReport.xaml
    这个是打印预览界面
    调一下刚才的ReportViewer

    <Window x:Class="RDLCPrinter.CustomerReport"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:RDLCPrinter"
            
            mc:Ignorable="d"
            Title="CustomerReport" Height="600" Width="800">
    
        <Grid>
            <local:ReportViewer ></local:ReportViewer>
        </Grid>
    </Window>
    
    

    4.数据注入
    这一步是最主要的
    ReportViewer.cs注入打印预览界面的数据
    然后mainWindow注入直接打印的数据

    using System.Data;
    using System.Windows;
    using System.Windows.Controls;
    using Microsoft.Reporting.WinForms;
    
    namespace RDLCPrinter
    
    {
    
        /// <summary>
    
        /// Interaction logic for ReportViewer.xaml
    
        /// </summary>
    
        public partial class ReportViewer : UserControl
        {
            public ReportViewer()
            {
                InitializeComponent();
            }
            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {          
                DataTable dt2 = new DataTable();
                dt2.Columns.Add(new DataColumn("carrierCompanyName", typeof(string)));
                dt2.Columns.Add(new DataColumn("checkInTime", typeof(string)));
                dt2.Columns.Add(new DataColumn("startPoint", typeof(string)));
                dt2.Columns.Add(new DataColumn("outStock", typeof(string)));
                DataRow dr2 = dt2.NewRow();
                dr2["carrierCompanyName"] = "日照钢铁";
                dr2["checkInTime"] = "2019-8-13 16:03";
                dr2["startPoint"] = "山东青岛";
                dr2["outStock"] = "Z1-热轧#1580成品库";
                dt2.Rows.Add(dr2);
                ReportDataSource reportDataSource2 = new ReportDataSource();
                reportDataSource2.Name = "DataSet1";
                reportDataSource2.Value = dt2;
                reportViewer1.LocalReport.DataSources.Add(reportDataSource2);
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("carrierCompanyName", typeof(string)));
                dt.Columns.Add(new DataColumn("driverId", typeof(string)));
                dt.Columns.Add(new DataColumn("startPoint", typeof(string)));
                dt.Columns.Add(new DataColumn("endPoint", typeof(string)));
                dt.Columns.Add(new DataColumn("prodName", typeof(string)));
                dt.Columns.Add(new DataColumn("planQuantity", typeof(string)));
                dt.Columns.Add(new DataColumn("checkInTime", typeof(string)));
                dt.Columns.Add(new DataColumn("outStock", typeof(string)));
    
                DataRow dr = dt.NewRow();
                for (int i = 0; i < 20; i++)
                {
                    dt.Rows.Add(new string[] { ("京创" + i).ToString(), (i + 10).ToString(), ("日照"+i).ToString(),
                        ("山东" +i).ToString(),"卷钢" + i.ToString(),(10+i).ToString(),("2019-8-1"+i).ToString(), (i+"号").ToString()});
                } 
    
                ReportDataSource reportDataSource = new ReportDataSource();
                reportDataSource.Name = "DataSet2";
                reportDataSource.Value = dt;
                reportViewer1.LocalReport.DataSources.Add(reportDataSource);
                reportViewer1.LocalReport.ReportPath = "D:\\Documents\\GitHub\\DEMO\\RDLC\\RDLC\\CustomerReport.rdlc"; 
                //刷新
                reportViewer1.RefreshReport();
            }
            private void reportViewer_RenderingComplete(object sender, Microsoft.Reporting.WinForms.RenderingCompleteEventArgs e)
    
            {
            }
    
        }
    
    }
    
    

    直接打印用到了一个工具类

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Drawing.Imaging;
    using System.Drawing.Printing;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Text;
    using Microsoft.Reporting.WinForms;
    
    namespace RDLCPrinter
    {
        /// <summary>
        /// 通过RDLC向默认打印机输出打印报表
        /// </summary>
        public class BillPrint : IDisposable
        {
            /// <summary>
            /// 当前打印页号
            /// </summary>
            static int m_currentPageIndex;
    
            /// <summary>
            /// RDCL转换stream一页对应一个stream
            /// </summary>
            static List<Stream> m_streams;
    
            /// <summary>
            /// 把report输出成stream
            /// </summary>
            /// <param name="report">传入需要Export的report</param>
            private void Export(LocalReport report)
            {
                string deviceInfo =
                  "<DeviceInfo>" +
                  "  <OutputFormat>EMF</OutputFormat>" +
                    //"  <PageWidth>2in</PageWidth>" +
                    //"  <PageHeight>20in</PageHeight>" +
                    "  <MarginTop>1in</MarginTop>" +
                    "  <MarginLeft>0in</MarginLeft>" +
                    "  <MarginRight>0in</MarginRight>" +
                    "  <MarginBottom>1in</MarginBottom>" +
                  "</DeviceInfo>";
                Warning[] warnings;
                m_streams = new List<Stream>();
                report.Render("Image", deviceInfo, CreateStream, out warnings);
                foreach (Stream stream in m_streams)
                    stream.Position = 0;
            }
    
            /// <summary>
            /// 创建具有指定的名称和格式的流。
            /// </summary>
            private Stream CreateStream(string name, string fileNameExtension,
          Encoding encoding, string mimeType, bool willSeek)
            {
                Stream stream = new FileStream(name + "." + fileNameExtension,
                  FileMode.Create);
                m_streams.Add(stream);
                return stream;
            }
    
            /// <summary>
            /// 打印输出
            /// </summary>
            private void PrintPage(object sender, PrintPageEventArgs ev)
            {
                Metafile pageImage =
                  new Metafile(m_streams[m_currentPageIndex]);
                ev.Graphics.DrawImage(pageImage, ev.PageBounds);
                m_currentPageIndex++;
                ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
            }
    
            /// <summary>
            /// 打印预处理
            /// </summary>
            private void Print()
            {
                PrintDocument printDoc = new PrintDocument();
                string printerName = printDoc.PrinterSettings.PrinterName;
                if (m_streams == null || m_streams.Count == 0)
                    return;
                printDoc.PrinterSettings.PrinterName = printerName;
                if (!printDoc.PrinterSettings.IsValid)
                {
                    string msg = String.Format("Can't find printer \"{0}\".", printerName);
                    throw new Exception(msg);
                }
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                StandardPrintController spc = new StandardPrintController();
                printDoc.PrintController = spc;
                printDoc.Print();
            }
    
            public void Dispose()
            {
                if (m_streams != null)
                {
                    foreach (Stream stream in m_streams)
                        stream.Close();
                    m_streams = null;
                }
            }
    
            /// <summary>
            /// 对外接口,启动打印
            /// </summary>
            /// <param name="dtSource">打印报表对应的数据源</param>
            /// <param name="sReport">打印报表名称</param>
            public static void Run(LocalReport report)
            {
                //LocalReport report = new LocalReport();
                //report.ReportPath = @"..\..\" + sReport;
                //ReportDataSource dataset = new ReportDataSource("DataSet1", dtSource);
                //report.DataSources.Add(dataset);
                m_currentPageIndex = 0;
                BillPrint billPrint = new BillPrint();
                billPrint.Export(report);
                billPrint.Print();
                billPrint.Dispose();
            }
    
            /// <summary>
            /// 获取打印机状态
            /// </summary>
            /// <param name="printerName">打印机名称</param>
            /// <param name="status">输出打印机状态</param>
            private static void GetPrinterStatus2(string printerName, ref uint status)
            {
                try
                {
    
                    string lcPrinterName = printerName;
                    IntPtr liHandle = IntPtr.Zero;
                    if (!Win32.OpenPrinter(lcPrinterName, out liHandle, IntPtr.Zero))
                    {
                        Console.WriteLine("print  is close");
                        return;
                    }
                    UInt32 level = 2;
                    UInt32 sizeNeeded = 0;
                    IntPtr buffer = IntPtr.Zero;
                    Win32.GetPrinter(liHandle, level, buffer, 0, out sizeNeeded);
                    buffer = Marshal.AllocHGlobal((int)sizeNeeded);
                    if (!Win32.GetPrinter(liHandle, level, buffer, sizeNeeded, out sizeNeeded))
                    {
                        Console.WriteLine(Environment.NewLine + "Fail GetPrinter:" + Marshal.GetLastWin32Error());
                        return;
                    }
    
                    Win32.PRINTER_INFO_2 info = (Win32.PRINTER_INFO_2)Marshal.PtrToStructure(buffer, typeof(Win32.PRINTER_INFO_2));
                    status = info.Status;
                    Marshal.FreeHGlobal(buffer);
                    Win32.ClosePrinter(liHandle);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            /// <summary>
            /// 对外接口,调去打印机信息
            /// </summary>
            /// <param name="printerName">打印机名称</param>
            /// <returns>返回打印机当前状态</returns>
            public static string GetPrinterStatus(string printerName)
            {
                uint intValue = 0;
                PrintDocument pd = new PrintDocument();
                printerName = printerName == "" ? pd.PrinterSettings.PrinterName : printerName;
                GetPrinterStatus2(printerName, ref intValue);
                string strRet = string.Empty;
                switch (intValue)
                {
                    case 0:
                        strRet = "准备就绪(Ready)";
                        break;
                    case 4194432:
                        strRet = "被打开(Lid Open)";
                        break;
                    case 144:
                        strRet = "打印纸用完(Out of Paper)";
                        break;
                    case 4194448:
                        strRet = "被打开并且打印纸用完(Out of Paper && Lid Open)";
                        break;
                    case 1024:
                        strRet = "打印中(Printing)";
                        break;
                    case 32768:
                        strRet = "初始化(Initializing)";
                        break;
                    case 160:
                        strRet = "手工送纸(Manual Feed in Progress)";
                        break;
                    case 4096:
                        strRet = "脱机(Offline)";
                        break;
                    default:
                        strRet = "未知状态(unknown state)";
                        break;
                }
                return strRet;
            }
        }
        public class Win32
        {
            [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool OpenPrinter(string printer, out IntPtr handle, IntPtr printerDefaults);
            [DllImport("winspool.drv")]
            public static extern bool ClosePrinter(IntPtr handle);
            [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool GetPrinter(IntPtr handle, UInt32 level, IntPtr buffer, UInt32 size, out UInt32 sizeNeeded);
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public struct PRINTER_INFO_2
            {
                public string pServerName;
                public string pPrinterName;
                public string pShareName;
                public string pPortName;
                public string pDriverName;
                public string pComment;
                public string pLocation;
                public IntPtr pDevMode;
                public string pSepFile;
                public string pPrintProcessor;
                public string pDatatype;
                public string pParameters;
                public IntPtr pSecurityDescriptor;
                public UInt32 Attributes;
                public UInt32 Priority;
                public UInt32 DefaultPriority;
                public UInt32 StartTime;
                public UInt32 UntilTime;
                public UInt32 Status;
                public UInt32 cJobs;
                public UInt32 AveragePPM;
            }
        }
    }
    
    

    判断打印机状态好像没啥用

    最后是MainWindow的数据

    using Microsoft.Reporting.WinForms;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace RDLCPrinter
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            private void btnClickMe_Click(object sender, RoutedEventArgs e)
            {
                CustomerReport rpt = new CustomerReport();
                rpt.ShowDialog();
            }
            //打印
            private void Button_Print_Click(object sender, RoutedEventArgs e)
            {
                ReportViewer rvDoc = new ReportViewer();
                DataTable dt2 = new DataTable();
                dt2.Columns.Add(new DataColumn("carrierCompanyName", typeof(string)));
                dt2.Columns.Add(new DataColumn("checkInTime", typeof(string)));
                dt2.Columns.Add(new DataColumn("startPoint", typeof(string)));
                dt2.Columns.Add(new DataColumn("outStock", typeof(string)));
    
                DataRow dr2 = dt2.NewRow();
                dr2["carrierCompanyName"] = "日照钢铁";
                dr2["checkInTime"] = "2019-8-13 16:03";
                dr2["startPoint"] = "山东青岛";
                dr2["outStock"] = "Z1-热轧#1580成品库";
                dt2.Rows.Add(dr2);
    
                ReportDataSource reportDataSource2 = new ReportDataSource();
    
                reportDataSource2.Name = "DataSet1";
                reportDataSource2.Value = dt2;
                rvDoc.reportViewer1.LocalReport.DataSources.Add(reportDataSource2);
               
                //rvDoc.reportViewer1
                //rvDoc.reportViewer1.LocalReport.DataSources.Add(reportDataSource2);
                rvDoc.reportViewer1.LocalReport.ReportPath = @"D:\\Documents\\GitHub\\DEMO\\RDLC\\RDLC\\CustomerReport.rdlc";
                //rvDoc.reportViewer1.RefreshReport();
    
                /*自动打印*/
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("carrierCompanyName", typeof(string)));
                dt.Columns.Add(new DataColumn("driverId", typeof(string)));
                dt.Columns.Add(new DataColumn("startPoint", typeof(string)));
                dt.Columns.Add(new DataColumn("endPoint", typeof(string)));
                dt.Columns.Add(new DataColumn("prodName", typeof(string)));
                dt.Columns.Add(new DataColumn("planQuantity", typeof(string)));
                dt.Columns.Add(new DataColumn("checkInTime", typeof(string)));
                dt.Columns.Add(new DataColumn("outStock", typeof(string)));
    
                DataRow dr = dt.NewRow();
                for (int i = 0; i < 20; i++)
                {
                    dt.Rows.Add(new string[] { ("京创" + i).ToString(), (i + 10).ToString(), ("日照"+i).ToString(),
                        ("山东" +i).ToString(),"卷钢" + i.ToString(),(10+i).ToString(),("2019-8-1"+i).ToString(), (i+"号").ToString()});
                }
    
                ReportDataSource reportDataSource = new ReportDataSource();
                reportDataSource.Name = "DataSet2";
                reportDataSource.Value = dt;
                rvDoc.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
                RDLCPrinter.BillPrint.Run(rvDoc.reportViewer1.LocalReport);
            }
        }
    
    }
    
    

    5.运行预览
    准备工作结束之后
    开始运行
    点击打印预览
    在这里插入图片描述
    点击直接打印就直接打印了
    上图
    在这里插入图片描述
    手机像素比较差
    然后是项目下载地址
    链接:https://pan.baidu.com/s/15p_qbIlgP5FQslTSYtqoSA
    提取码:9xfp
    6.注意点
    1.打印预览如果正常,但是打印出来多余空白页的话
    如下设置
    点击到rdlc文件,然后右边的属性,选择报表
    然后把下面的ConsumeContainerWhite设置为true

    在这里插入图片描述
    2.这个clsReportPrint类是多余的,下载下来可以不用管
    在这里插入图片描述

    展开全文
  • 蓝牙&WiFi 智能手机无线打印全攻略

    万次阅读 2008-09-22 09:42:00
    蓝牙&WiFi 智能手机无线打印全攻略注:此文剽窃与:http://fbljava.blog.163.com/blog/static/2652117420085523713663/智能...就一直在琢磨怎样更大的发挥它的用途,使得我们可以通过蓝牙智能手机和pda直接连接打印机打印

    蓝牙&WiFi 智能手机无线打印全攻略

    注:此文剽窃与:http://fbljava.blog.163.com/blog/static/2652117420085523713663/

    智能手机无线打印完全攻略(一)

        自打花朵上次拿到磐正的蓝牙打印适配器后本着榨干手机每一滴油水的宗旨,就一直在琢磨怎样更大的发挥它的用途,使得我们可以通过蓝牙智能手机和pda直接连接打印机打印文档。经过多普达和磐正双方的协助,终于测试成功,同时也成功地使用PPC的WIFI实现了无线网络打印。接下来就将经验与大家分享。在此花朵先要感谢磐正和多普达为我们提供测试的设备。本篇文章的内容是通过PPC蓝牙连接打印机,直接打印PPC中的文档,所以,我们首先要有一个具备蓝牙功能的PPC。另外需要一台蓝牙打印机,如果你没有蓝牙打印机,那么就准备接下来的这个东东,这是一个打印机的蓝牙模块,我们只需要将它安装到打印机上,就可以使得普通的打印机具备蓝牙无线连接功能。

        将蓝牙打印适配器连接到打印机,适配器的借口是一个方形的USB口,正好对应打印机背后的USB接口。

        接通打印适配器的的电源,并打开打印机电源,打印适配器上的指示灯就会蓝色常亮,这就表示打印机已经进入就绪状态,蓝牙打印适配器随时可以接受蓝牙打印信号。

    智能手机无线打印完全攻略(二)

        接下来我们打开PPC端的蓝牙

        进入蓝牙设备管理界面,点击新建,用ppc搜索附近的蓝牙设备

        这时ppc便能搜索到处于待机状态的蓝牙打印适配器。

        接下来要做的工作大家十分熟悉,就是输入密匙进行匹配

        由于蓝牙打印适配器是通过虚拟串口与ppc之间建立连接的,所以ppc端会提示是否为打印适配器产生一个蓝牙串行端口

    智能手机无线打印完全攻略(三)

        输入蓝牙设备的名称后,整个匹配过程完成。

        然后我们要详细地设置蓝牙串口的传入和传出端口,对于打印,我们只要设置传出端口就行了,我就点击新建传出端口

        然后选择绑定到该端口的设备,当然就是我们前面刚刚匹配的蓝牙打印适配器了

        设置ppc上的传出端口为com6,当然你也可以设置成其他的端口号,只要你自己记得就行了。是不是安全连接倒不是很重要,可选可不选。

        设置完成后我们就在蓝牙com口的管理窗口中看到已经绑定在com6上的蓝牙打印适配器了

    智能手机无线打印完全攻略(四)

        在接下来这一步看似简单,其实是最艰苦的,俺经历了无数次的失败,几乎搜刮了能找到的所有软件,一一测试后,最终选定print pocket ce,这款软件是我测试下来内置打印机驱动最多,兼容性最好的一个文档打印软件。

        print pocket ce支持office文档,email,以及TXT等各式的文件打印。我们的测试文档为TXT格式

        在print pocket ce中,我们选择好需要打印的文件后,就进入了打印设置界面,这也是我为什么最终选中print pocket ce的最终原因,因为它的打印设置相当专业,几乎可以匹敌PC,而其他很多打印软件是没有打印的具体设置项目的

        这一界面的设置相当重要,关键在于驱动选择,如果选错驱动,打印机可是不会搭理你的哦。接下来的com口也不能选错,否则也不能打印。前面我们已经将打印端口设置成了com6,这里我们当然就算则com6拉,接下来的纸张大小和颜色等选项就按照打印的实际需要选择了。

        一切选项设置完毕后就选择打印,屏幕会提示正在向打印机发送打印指令。这是后打印机端的蓝牙打印适配器原本点亮的蓝色等开始转为红色闪亮,表明正在接受信号。

    智能手机无线打印完全攻略(五)

        当ppc屏幕上显示文件发送完成后,打印机端的蓝牙适配器停止闪烁,蓝色灯再次常亮。这时打印机就开始打印文档了。如果打印机没有开始打印,那应该是驱动有误,我们只能使用print pocket ce列表中所支持的打印机,如果没有找到自己打印机的型号也可以尝试一下同品牌同系列的打印机。如果在前面一步就卡住了,那么请检查蓝牙端口的设置。

        前面说的都是关于文档的打印,那么打印图片用什么呢?当然是pocket pix print,这款软件与print pocket ce出自同一家公司,在界面上也惊人的相似,操作过程可以参考前面文档打印的过程,在此就不重复熬述了。

        对于smartphone的打印,蓝牙配对过程可以参照前文。比较关键的是千万不要忘了蓝牙设置中串行口设置。主要是设置传出的com端口,本例中是com7

        smartphone端支持打印的软件可以说是少的可怜,找了半天只发现repligo支持打印

        在relpigo中打开文档后,在右键菜单中选择print

    repligo的打印设置界面相当简单,在打印机端口当然是选择我们前面设置的蓝牙传出端口com7,第二项可以选择是黑白打印还是彩色打印。最后一项可以指定打印的页数,一切设置妥当后,便可开始打印

        不过smartphone目前我所发现的只有repligo支持打印,实用性有限,在本文中只是提出这样一个概念。希望今后smartphone中也能出现类似ppc print pocket ce这样的重量级打印软件。而ppc端的打印就比较实用了。我经常用ppc带一些文本文件,现在有了蓝牙打印适配器,能够随时随地用ppc打印确实感觉相当方便。特别是用摄像头所拍摄的一些照片,可以在ppc上用pocket artist简单处理后直接打印出来。就不再需要经过同步啊,copy之类麻烦的动作了。

    最后要说的是,虽然在ppc上打印需要打印机驱动的支持,但是print pocket ce已经内置了大多数常见型号的打印机驱动。基本上只要不是太偏门的打印机都能够正常使用。而smartphone的repligo在我的测试中就遇到了不支持的情况,在公司的惠普激光打印机打印正常,但是家中的利蒙Z32就罢工了。看来还是ppc比较实用啊。

    智能手机无线打印完全攻略(六)

        现在有很多ppc支持wifi,或者是可以通过SDIO的无限网卡扩展WIFI功能。本着将无线进行到底的原则,在蓝牙之后,我们继续钻研WiFi打印。由于赛马rtphone基本无法扩展wifi,所以这里的无线网络打印就只针对PPC展开讨论。

        前文中的蓝牙打印虽然也是无线打印的解决方案之一,但是蓝牙打印机或者蓝牙打印机适配器目前的普及程度并不是很高,更多的公司在使用普通打印服务器。那么我们就可以考虑通过局域网来实现ppc的无线打印。目前wifi技术在ppc上的应用已经十分广泛。我们只要将ppc接入公司的无线网络,便可像PC一样的共享局域网内的网络打印机。

        将ppc接入打印机所在的局域网后打开print pocket ce。与蓝牙打印所不同的是,这次我们先要在print pocket ce中先设置好打印机的IP地址和端口号。

    如果共享的网络打印机不是采用打印服务器而是连接在某台局域网内的PC上的,那么我们就输入连接打印机的那台PC的IP地址。

        在打印设置的打印机端口中,这次我们要选择network:ip printer,其他的设置一切照旧。

        关于print pocket ce的其他一些实用方法,参照前文蓝牙打印的即可。如此我们就能便捷的打印自己智能手机上的各种文档了。对于818、696之类带摄像头的机型,我们可以在拍摄照片之后通过pocket artist软件对照片进行简单的处理即可通过打印机实时打印照片。是不是感觉就如今的智能手机越来越像电脑了呢?

    展开全文
  • Android手机连接蓝牙打印机实现打印功能。适用于所有蓝牙打印机。代码可以直接使用。
  • H5前端手机调试打印之vConsole

    千次阅读 2018-12-13 11:56:45
    一个轻量、可拓展、针对手机网页的前端开发者调试面板。 特性 查看 console 日志 查看网络请求 查看页面 element 结构 查看 Cookies 和 localStorage 手动执行 JS 命令行 自定义插件 下载 下载 vConsole 的最新版本...

    vConsole

    一个轻量、可拓展、针对手机网页的前端开发者调试面板。

    特性

    查看 console 日志
    查看网络请求
    查看页面 element 结构
    查看 Cookies 和 localStorage
    手动执行 JS 命令行
    自定义插件

    下载

    下载 vConsole 的最新版本

    上手

    下载 vConsole 的最新版本。(不要直接下载 dev 分支下的 dist/vconsole.min.js)

    引入 dist/vconsole.min.js 到项目中:

    <script src="path/to/vconsole.min.js"></script>
    <script>
      // 初始化
      var vConsole = new VConsole();
      console.log('Hello world');
    </script>
    

    详细使用方法请参阅使用教程

    内置插件

    Network 网络

    所有 XMLHttpRequest 请求都会被显示到 Network tab 中。

    若不希望一个请求显示在面板中,可添加属性 _noVConsole = true 到 XHR 对象中:

    var xhr = new XMLHttpRequest();
    xhr._noVConsole = true; // 不会显示到 tab 中
    xhr.open("GET", 'http://example.com/');
    xhr.send();
    
    展开全文
  • 手机蓝牙连接热敏打印机 打印票据话不多说上代码: 项目地址:可直接作为项目依赖 引用 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { compile'com.gi
  • WPF实现打印打印预览

    千次阅读 2018-02-09 15:33:45
    WPF的打印功能是很强大而简便的,它甚至能够直接打印界面上的内容,包括各种控件的显示内容,例如你在界面上摆放了一个datagrid控件,画了一个五角星,或写了一段文字,都可以直接打印出来,这里有一篇文章很简单...
  • 华为手机测试程序是,eclipse的logcat不能打印日志,我按照网上说的方法打开了windows下面的show view 的logcat,日志有logcat但是日志不打印,调试程序必须要日志,最后终于搜到了这个调试方法,在手机拨号界面...
  • 比如学校的试卷、公司的文档用手机进行拍照由于光线的原因会呈现出一种阴影黑底的现象,直接打印这种带黑底的照片会影响阅读还浪费打印墨水,此时就需要用到PictureCleaner这种图片去黑底的软件帮助去除黑底...
  • 1、问题我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是1)、获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名adb shell dumpsys activity ...
  • 魅族手机默认是不开启打印高级日志的。所以有时候你使用一些自定义的log库看不到输出日志。打开方式:设置——辅助功能——开发者选项(假如你看不到开发者选项再想办法)——高级日志输出–点击允许全部华为手机也...
  • 各个厂商手机打印log日志的解决方法

    万次阅读 多人点赞 2018-11-29 10:24:21
    360手机 1) 在桌面的【其他应用】文件夹找到【用户反馈】,或通过搜索找到【用户反馈】 2 ) 点击系统问题反馈 3 ) 等复现问题,让问题出现2~3次 4 ) 问题复现之后,直接到文件管理、...
  • TP-LINK-TL-WR703N刷BreedOpenwrt固件挂MP288打印机服务共享手机打印服务 参考资料: U-Boot 刷机方法大全: https://www.right.com.cn/forum/thread-154561-1-1.html openwrt官网703N说明 ...
  • 安卓手机连接蓝牙打印机实现打印功能

    万次阅读 多人点赞 2013-09-22 14:22:48
    最近在做一个安卓应用,其中有一个需求是要求蓝牙连接打印机实现打印功能。一开始没有一点头绪,网上找了很多资料也找不到有用的数据。所以自己就去研究,最终,功夫不负有心人,顺利的完成了这个功能。下边贴出我...
  • 于是Date.parse打印了一下接口获取的时间戳,浏览器正常打印出了一段数字,但是手机端在控制台打印的则是NAN,这弄得我非常郁闷,后来网上查了一下应该是有的手机系统不支持2019-04-29这样格式而支持2019/04/...
  • 第一个要求用手机蓝牙连接打印机实现手填报表打印功能,第二个是手机蓝牙连接的手持设备,需求同步里面的数据,同步成功后要删除设备里面的数据。 先开始玩的是佳能IP100的打印机, 发现这款打印机蓝牙只能实现打印...
  • 我们在开发手机版网页的时候,常常会出现下面的情景: (1) 开发时,在自己电脑上运行得好好的,在手机上打开就挂了,但是手机上又看不到error log; (2) 上线后,某用户表示页面失灵,但我们自己又重现不出来...
  • sdk下载地址:https://www.poscom.cn/down-show-82.html 代码下载:... 一、打印机通过蓝牙连接手机设备 新建蓝牙管理类:LMBluetoothManeger LMBluetoothManeger.h文件 LMBluetoothManeger.m文...
  • 直接打印RAW文件到打印机(一)

    千次阅读 2012-05-17 10:14:29
     OpenPrinter函数获取一个句柄到指定的打印机或打印服务器或打印子系统中其他类型的句柄。 BOOL OpenPrinter(  LPTSTR pPrinterName, // printer or server name  LPHANDLE phPrinter, // printer or ...
  • 新打印机使用的时侯,可以利用HP Setup......网络讯号,使用手机上安装的HP Smart App将打印机添加到无线网络中。1.如果您的打印机是新买的...然后将手机先加入到家中的无线路由网络中,打开手机上的无线设置画面,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,911
精华内容 27,564
关键字:

如何用手机直接打印