精华内容
下载资源
问答
  • C#打印窗体中的文字,只要文字显示在窗口中,都可以打印出来,貌似挺基础的技巧,欢迎C#初学者参考。 运行环境:Visual Studio2010
  • 在使用浩辰CAD制图软件绘制完成图之后,经常需要CAD图纸打印出来,但是有时候会出现在同样的图层、文字样式和颜色中预览打印后却只显示部分文字,这是什么原因导致的呢?该如何解决呢?接下来就以浩辰CAD制图软件...

    在使用浩辰CAD制图软件绘制完成图之后,经常需要将CAD图纸打印出来,但是有时候会出现在同样的图层、文字样式和颜色中预览打印后却只显示部分文字,这是什么原因导致的呢?该如何解决呢?接下来就以浩辰CAD制图软件为例给大家详细介绍一下CAD图纸打印后图纸中文字消失的解决办法吧!
    打印效果和预览效果具体情况如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    首先确定一下是不是打印驱动或CAD图纸的问题。在浩辰CAD制图软件中用内置的dwg to pdf的驱动试一下,确实如此。
    打印完PDF后,首先看哪些文字是打印出来的,哪些文字是没有打印出来的,然后在图中分别选中了一个可以打印和一个不能打印的文字,打开属性框(CTRL+1)。来看看他们有哪些共同属性,哪些不同的属性,如下图所示。
    在这里插入图片描述
    从属性框中可以看出两个文字是单行文字,图层相同,文字样式相同,只是宽度因子不同。其实从图面上也可以看出来文字的宽度不同,而且一个边界比较平滑,一个则能看到一些锯齿。
    为了看到比属性框更多的信息,输入LI(LIST)命令,进一步查看一下这两个文字的参数,如下图所示。
    在这里插入图片描述
    从这里可以看到两个文字的宽度因子分别是1和0.9,可以打印出来的是0.9,尝试将宽度因子为1的宽度因子改为0.9,这些字就能打印出来了。但感觉这应该不是问题根源所在,而且也想不通为什么0.9就能打印出来,而1就打印不出来呢!
    在上图中还注意到一个细节,就是这个文字样式的字体是simplex。字体名后面没有带shx,说明用的是操作系统的字体simplex.ttf,而不是CAD字体simplex.shx。跟CAD的simplex.shx字体类似,simplex也只有单字体字符,不包含汉字,哪些汉字是如何显示出来的呢?
    输入ST,打开文字样式对话框,发现这个文字样式设置的字体是simplex,“使用大字体”勾选框是灰的,而且右侧“字体样式”下拉列表被激活了,说明使用的是系统字体。这个字体不包括中文,国内几乎不可能有人这么设置字体,而图中的中文只所以能显示,是浩辰CAD制图软件采取了自动替换的策略,应该被替换成了宋体显示了。
    我们选跟simplex类似的SHX字体试一下,就知道正常显示的时候是什么状态。在字体名列表中选一种其他的SHX文件,然后在选回simplex.shx,如果点“应用”按钮使用这种设置并关闭文字样式对话框,然后输入RE命令重生成图形,可以发现刚才那些汉字都变成了问号,这才是这种文字样式设置下中文的正常状态,如下图所示。
    在这里插入图片描述
    显然这张图的文字样式的数据有错误,本身样式设置是无法显示中文的,但浩辰CAD制图软件的自动替换蒙蔽了我们,使我们想不到是文字样式的问题。将文字样式修改成能显示汉字的字体,例如直接在字体列表里选择“新宋体”,或者勾选“使用大字体”后,大字体选择hztxt.shx,然后再打印,就完全正常了,所有文字都可以正常打印了。
    以上就是关于浩辰CAD制图软件中打印CAD图纸后CAD文字无法全部显示的解决办法,大家在使用浩辰CAD制图软件打印CAD图纸的时候要注意哦!

    展开全文
  • 使用Python输入的字符以心形图案打印出来
  • 最近在处理打印的时候,打印机有些繁体的字无法打印出来,或者其它韩文打印出来显示 ? 问题 解决思路: 需要打印的 String 文本内容,先转换成 Bitmap 位图 , 然后图片转换成打印机能打印的byte[]类型 不同印...

    Android 打印之将文字转换成 Bitmap 图片,再转换成Bytes 数组 进行打印

    一、前言

    Android 打印解决文字显示?问好 乱码

    最近在处理打印的时候,打印机有些繁体的字无法打印出来,或者其它韩文打印出来显示 ? 问题

    解决思路:

    将需要打印的 String 文本内容,先转换成 Bitmap 位图 , 然后将图片转换成打印机能打印的byte[]类型

    不同印机 最终丢给印机打印的方法不同。

    如下图,打印的是一栏地址,原来第三个字呢打印出来是 ? 号的 ,这张图是用以下的转换方法修复后的。

    使用印机都是 EPSON,其它也类似。

    左边的是 网络打印 (通过 OutputStream 流的方式 将 byte[] 写入 到缓冲区)

    右边的是 USB 连接 EPSON 打印 (通过EPSON SDK的方法,addImage() ) 打印出来的很OK

    其实还有一个问题就是,通过网络传递的Esc 指令打印之后,打印文字可能打印像素有点不全的问题 ,我感觉是 下面的 genBitmapCode 方法 转换出来的时候,像素精度还是什么问题 ,如果有好的解决方式 请给我留言 谢谢。(文末已找到完美解决方式)

    后面发现,如果打印的文字很大的话,或者给文字 设置字体是加粗的话 就 不会打印出来是缺像素的,不过其实这样也不太好。总之目前就是如果是有SDK的,就优先使用专门的打印 Bitmap 的方法, 而网络打印只能发 Esc 指令发送Bytes。

        String familyName ="宋体";
        Typeface font = Typeface.create(familyName,Typeface.BOLD);
        textPaint.setTypeface(font);
    

    在这里插入图片描述

    下面提供了 ,创建Bitmap 图片, 创建 QRCode 二维码图片 ,转换成 Bytes 数组 进行打印

    二、将文字转换成Bitmap

        /**
         * 根据文字创建一个 bitmap  , 打印的位图需要 黑字 白底
         *
         * @param text
         * @param height
         * @param width
         * @return
         */
        public Bitmap getNewBitMap(String text, int height, int width) {
            Bitmap newBitmap = createBitmap(width, height, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(newBitmap);
            canvas.drawColor(Color.WHITE);
    
            canvas.drawBitmap(newBitmap, 0, 0, null);
            TextPaint textPaint = new TextPaint();
           //       String familyName ="宋体";
          //  Typeface font = Typeface.create(familyName,Typeface.BOLD);
           // textPaint.setTypeface(font);
            textPaint.setAntiAlias(true);
            textPaint.setTextSize(height * 2 / 3);
    //        textPaint.setColor(Color.rgb(0, 0, 0));
            textPaint.setColor(Color.BLACK);
            //     "在Android开发中,Canvas.drawText不会换行,即使一个很长的字符串也只会显示一行,超出部分会隐藏在屏幕之外.StaticLayout是android中处理文字的一个工具类,StaticLayout 处理了文字换行的问题";
            StaticLayout sl = new StaticLayout(text, textPaint, newBitmap.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
            textPaint.setStyle(Paint.Style.FILL);
            canvas.translate(0, height / 10);
            sl.draw(canvas);
            return newBitmap;
        }
    
    
        /**
         * 生成二维码bitmap 要转换的地址或字符串,可以是中文
         *
         * @param url
         * @param width
         * @param height
         * @return
         */
        public Bitmap createQRImage(String url, final int width, final int height) {
            try {
                // 判断URL合法性
                if (url == null || "".equals(url) || url.length() < 1) {
                    return null;
                }
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                // 图像数据转换,使用了矩阵转换
                BitMatrix bitMatrix = new QRCodeWriter().encode(url,
                        BarcodeFormat.QR_CODE, width, height, hints);
                int[] pixels = new int[width * height];
                // 下面这里按照二维码的算法,逐个生成二维码的图片,
                // 两个for循环是图片横列扫描的结果
                for (int y = 0; y < height; y++) {
                    for (int x = 0; x < width; x++) {
                        if (bitMatrix.get(x, y)) {
                            pixels[y * width + x] = 0xff000000;
                        } else {
                            pixels[y * width + x] = 0xffffffff;
                        }
                    }
                }
                // 生成二维码图片的格式,使用ARGB_8888
                Bitmap bitmap = createBitmap(width, height,
                        Bitmap.Config.ARGB_8888);
                bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
                return bitmap;
            } catch (WriterException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    
    
    
    

    三、把图片转换成POS机能打印的byte[]类型

      /**
         * 将图片转换成POS机能打印的byte[]类型
         *
         * @param bm
         * @param doubleWidth
         * @param doubleHeight
         * @return
         */
        private static byte[] genBitmapCode(Bitmap bm, boolean doubleWidth, boolean doubleHeight) {
            int w = bm.getWidth();
            int h = bm.getHeight();
    //        if(w > MAX_BIT_WIDTH)
    //            w = MAX_BIT_WIDTH;
            int bitw = ((w + 7) / 8) * 8;
            int bith = h;
            int pitch = bitw / 8;
            byte[] cmd = {0x1D, 0x76, 0x30, 0x00, (byte) (pitch & 0xff), (byte) ((pitch >> 8) & 0xff), (byte) (bith & 0xff), (byte) ((bith >> 8) & 0xff)};
            byte[] bits = new byte[bith * pitch];
            // 倍宽
            if (doubleWidth) {
                cmd[3] |= 0x01;
            }
            // 倍高
            if (doubleHeight) {
                cmd[3] |= 0x02;
            }
            for (int y = 0; y < h; y++) {
                for (int x = 0; x < w; x++) {
                    int color = bm.getPixel(x, y);
                    if ((color & 0xFF) < 128) {
                        bits[y * pitch + x / 8] |= (0x80 >> (x % 8));
                    }
                }
            }
    
            ByteBuffer bb = ByteBuffer.allocate(cmd.length + bits.length);
            bb.put(cmd);
            bb.put(bits);
    
            return bb.array();
        }
    

    四、调用打印文本方式

          //生成的bitmap 显示 固定是一行 ,如果要生成多行,需要自行通过文本控制Bitmap的宽高
                    Bitmap newBitMap = getNewBitMap(IMAGE, 20, 300);
    
                    byte[] bytes = genBitmapCode(newBitMap, true, true);
                     
    							//此方式是网络打印 通过 OutputStream 流的方式 将 byte[] 写入 到缓冲区
                    socketOut.write(bytes);
    							
    
    

    五、EPSON 爱普生 中打印图片的方式

    	       //创建单行文字 
     					Bitmap newBitMap = getNewBitMap(IMAGE, 40, 600);
    
                //打印图片 方式 1  打印出来很漂亮
                mPrinter.addImage(newBitMap, 0, 0,
                        newBitMap.getWidth(),
                        newBitMap.getHeight(),
                        Printer.COLOR_1,
                        Printer.MODE_MONO,
                        Printer.HALFTONE_DITHER,
                        Printer.PARAM_DEFAULT,
                        Printer.COMPRESS_AUTO);
    		
    		// 方式2 打印出来 有少像素没打全
    		  Bitmap newBitMap = getNewBitMap(IMAGE, 20, 300);
    
                byte[] bytes = genBitmapCode(newBitMap, true, true);
                     
    			mPrinter.addCommand(bytes)
    

    六、调用打印二维码图片

    
    		          Bitmap qrImage = createQRImage("qr123456", 170, 170);
    
                    byte[] bytes = genBitmapCode(qrImage, true, true);
    
                    socketOut.write(bytes);
    

    以上代码只是作为一个参考思路, 主要是 将 String 转换 为 Bitmap ,再丢给打印机 进行打印。

    不同印机应优选考虑不同的调用方式,如果是 USB 连接 EPSON 的话 其实也支持 Esc 指令 进行命令打印的。

    网络打印的话,只能传递 Esc 指令集 通过流的方式传输进行打印了。


    X、 解决图片像素打印不全问题

    经过排查,使用了另外一种创建 Bitmap 的方式,可正常进行完美打印不会像素失真, 另外也可以使用另外一种 将 Bitmap 图片转化为打印机可以打印的字节流的方法

    
    	 /**
         * 将文字 生成 文字图片 生成显示编码的Bitmap,目前这个方法是可用的 ,  打印的位图需要 黑字 白底
         * @param contents
         * @param context
         */
        public static Bitmap creatCodeBitmap(String contents ,Context context) {
            float scale=context.getResources().getDisplayMetrics().scaledDensity;
    
            TextView tv = new TextView(context);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            tv.setLayoutParams(layoutParams);
            tv.setText(contents);
            tv.setTextSize(scale*12);
            tv.setGravity(Gravity.CENTER_HORIZONTAL);
            tv.setDrawingCacheEnabled(true);
            tv.setTextColor(Color.BLACK);
            tv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());
    
            tv.setBackgroundColor(Color.WHITE);
    
            tv.buildDrawingCache();
            Bitmap bitmapCode = tv.getDrawingCache();
            return bitmapCode;
        }
    
    
      /**
         * 把一张Bitmap图片转化为打印机可以打印的字节流
         *
         * @param bmp
         * @return
         */
        public static byte[] draw2PxPoint(Bitmap bmp) {
            //用来存储转换后的 bitmap 数据。为什么要再加1000,这是为了应对当图片高度无法
            //整除24时的情况。比如bitmap 分辨率为 240 * 250,占用 7500 byte,
            //但是实际上要存储11行数据,每一行需要 24 * 240 / 8 =720byte 的空间。再加上一些指令存储的开销,
            //所以多申请 1000byte 的空间是稳妥的,不然运行时会抛出数组访问越界的异常。
            int size = bmp.getWidth() * bmp.getHeight() / 8 + 1000;
            byte[] data = new byte[size];
            int k = 0;
            //设置行距为0的指令
            data[k++] = 0x1B;
            data[k++] = 0x33;
            data[k++] = 0x00;
            // 逐行打印
            for (int j = 0; j < bmp.getHeight() / 24f; j++) {
                //打印图片的指令
                data[k++] = 0x1B;
                data[k++] = 0x2A;
                data[k++] = 33;
                data[k++] = (byte) (bmp.getWidth() % 256); //nL
                data[k++] = (byte) (bmp.getWidth() / 256); //nH
                //对于每一行,逐列打印
                for (int i = 0; i < bmp.getWidth(); i++) {
                    //每一列24个像素点,分为3个字节存储
                    for (int m = 0; m < 3; m++) {
                        //每个字节表示8个像素点,0表示白色,1表示黑色
                        for (int n = 0; n < 8; n++) {
                            byte b = px2Byte(i, j * 24 + m * 8 + n, bmp);
                            data[k] += data[k] + b;
                        }
                        k++;
                    }
                }
                data[k++] = 10;//换行
            }
            return data;
        }
      /**
         * 灰度图片黑白化,黑色是1,白色是0
         *
         * @param x   横坐标
         * @param y   纵坐标
         * @param bit 位图
         * @return
         */
        public static byte px2Byte(int x, int y, Bitmap bit) {
            if (x < bit.getWidth() && y < bit.getHeight()) {
                byte b;
                int pixel = bit.getPixel(x, y);
                int red = (pixel & 0x00ff0000) >> 16; // 取高两位
                int green = (pixel & 0x0000ff00) >> 8; // 取中两位
                int blue = pixel & 0x000000ff; // 取低两位
                int gray = RGB2Gray(red, green, blue);
                if (gray < 128) {
                    b = 1;
                } else {
                    b = 0;
                }
                return b;
            }
            return 0;
        }
    
        /**
         * 图片灰度的转化
         */
        private static int RGB2Gray(int r, int g, int b) {
            int gray = (int) (0.29900 * r + 0.58700 * g + 0.11400 * b);  //灰度转化公式
            return gray;
        }
    
    

    使用方式

         //生成的bitmap 显示 固定是一行
    
                    Bitmap bitmap = creatCodeBitmap(IMAGE, App.getInstance());
                    byte[] bytes = draw2PxPoint(bitmap);
                    
                    socketOut.write(bytes);
    

    借鉴

    android 字符串 转换成Bitmap 设置文本的字体: 宋体,隶书啥的,获取字体的 行高, 文字生成图片

    展开全文
  • winXP系统电脑打印文字字体出现乱码该怎么解决?在打印机在打印文件时,打印输出的文字字体全部出现乱码,而此时别的计算机上使用打印机是正常的。对于这个问题该怎么解决呢?下面学习啦小编就为大家详细地介绍一下吧...

    winXP系统电脑打印文字字体出现乱码该怎么解决?在打印机在打印文件时,打印输出的文字字体全部出现乱码,而此时别的计算机上使用打印机是正常的。对于这个问题该怎么解决呢?下面学习啦小编就为大家详细地介绍一下吧。

    XP系统,台式/笔记本电脑通用。在打印机在打印文件时,打印输出的文字字体全部出现乱码,而此时别的计算机上使用打印机是正常的,可以判断打印机本身无障碍。那出现问题的原因最大可能是所使用的字体,遇到这样的问题,可以按以下操作步骤处理:

    1、在左侧程序里选择“控制面板”,打开窗口,双击“字体”图标(在打开的对话框中保证打印机已正常安装)。图片显示在最下一排,第二个。

    1f423ccca3fe85430b4dceb33bbf47db.png

    2、假如所打印的字体没有安装,可选择“文件F(在窗口的左上角)”,打开下属栏,选择“安装新字体”选项,在打开的“添加字体”对话框中选择字体所在路径,就可以进行字体的安装了。

    80a1b871543bf3325d7cbfc2dd3bf6fa.png

    3、双击选中的字体图标,在打开的对话框中单击“打印”按钮,看输出的打印结果是否正常。比如你用的是仿宋体,看下图。假如打开不正常,可能是该字体已损坏,要对此字体进行重新安装。

    68bb336596a8e70ec7b0bc508aa64bd6.png

    4、此时可以用另外一种字体,对所选中的文件进行打印,可以确认字体的问题。看下图选择其它字体。比如选择“黑体”字体。重复以上步骤,看是否可以用黑体打印。可打印就是“字体”出现问题。

    e60ef7ddd37bbd1cede6f778ceb75e36.png

    5、假如还是不可打印,可做以下3点。

    1)可用同一种字体打印不同的文档,可以确定是否是文档存在问题。

    2)用不同的应用程序用同一字体进行打印,可以确认是否是应用程序的问题。

    3)检查是否是系统假脱机引起的问题,或者打印驱动程序出现问题。

    其实大多情况就是“字体”的问题,一般在第四步骤就已经奏效。

    6、排除所有情况后,可以重新打印,假如第四步骤解决问题,第五步骤不必执行。此方法定能解决打印文件字体出现乱码。

    94308432278b959b87507b816efac3bf.png

    展开全文
  • 该demo可以打印图片和文字,可以设定page大小,文字可以进行排版
  • web 调取浏览器打印 打印图片+文字 浏览器调取浏览器打印 打印图片+文字
  • VB打印彩色文字

    2021-05-11 12:10:49
    VB打印彩色文字,不过测试发现文字没有变彩色,我没有打印机,所以不知道打钱出来是什么样子。我这里是Windows XP SP3,或许是需要win7或Win8吧,觉得没几行代码,有兴趣的就参考吧。 运行环境:Windows/VB6
  • C#打印系列---打印窗体中的文字信息(打印实例)
  • Python 如何打印一段文字,用友云霸气控制台颜文字打印打印一段文字只要前后三个点包起来就行。 我主要想是展示一下用友云的颜文字收藏!哈哈,有意思吧!

    打印一段文字只要前后三个点包起来就行。
    我主要想是展示一下用友云的颜文字收藏!哈哈,有意思吧!

    print(
    '''
    \ \   / /     \ \   / /         / ____| |               | |
     \ \_/ /__  _ _\ \_/ /__  _   _| |    | | ___  _   _  __| |
      \   / _ \| '_ \   / _ \| | | | |    | |/ _ \| | | |/ _` |
       | | (_) | | | | | (_) | |_| | |____| | (_) | |_| | (_| |
       |_|\___/|_| |_|_|\___/ \__,_|\_____|_|\___/ \__,_|\__,_|
    '''
    )
    

    打印效果图:
    在这里插入图片描述
    喜欢的点个赞❤吧!

    展开全文
  • 上图是一个WORD文档,我想要制作一个手机软件,实现以下功能: 1.能够方便录入检查单位、时间2项内容。 2.左侧2个单元格,要方便插入图片,并...4.软件有打印按钮,能够直接打印出来。手机上有三星的共享打印组件。
  • MFC打印图片文字

    2019-01-22 11:09:32
    基于VS2008的MFC应用程序,打印图片和文字文字在图片下方,可自定义文字。图片格式为jpg,其他格式暂不支持。
  • VC++控制文字打印的方向,VC源码实例下载供参考。包括横向打印和纵向打印,横向打印也就是常规打印,本例的关键点是纵向打印,确证打印前请连接好打印机驱动程序。 运行环境:Windows/Visual C/C++
  • 打印 Excel2010表格,A3,上半页正常,下半页只有文字没有边框。这种现象还是有时会出现。重装office与打印机驱动,依旧,哪位高手可以帮忙解决。
  • C#打印系列---打印窗体中的文字信息
  • 现在智能手机已经深入我们的生活学习当中,我们也经常在手机上收到一些文件和照片,那我们怎么快速打印他们呢,还是像以前那样传到电脑上打印吗。这里大家来跟我学习一下吧。软件名称:手机安卓QQ2020最新版 V8.7.0 ...
  • 可以打印文字,水平直线,垂直线,打印的通用程序。
  • C#打印控件打印文字

    千次阅读 2009-09-10 21:39:00
    C#打印控件打印文字首先添加一个打印控件printDocument1再输入以下代码//当开始打印时会自动执行以下代码private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {...
  • python打印心形文字

    千次阅读 2019-06-27 15:39:32
    import time sentence = "Dear, I love you forever!" ## 该字符串以心形文字打印出来 for char in sentence.split(): allChar = [] for y in range(12, -12, -1): lst = [] lst_con = '' for x ...
  • 有时候会遇到打印CAD图纸不完整的问题,总是有一部分不显示,打印出来。小编就有过类似的情况,我先是重新添加了新的虚拟打印机,重新进行了新的打印,结果发现不是这一问题。进过一系列的排查后才发现,原来问题...
  • java打印输入框的文字

    2014-09-24 16:42:13
    java打印输入框的文字,供各位大侠下载应用。
  • 文字、位图打印程序

    2012-04-22 19:14:54
    一个可以打印文字和位图的程序,而且可以对位图打印进行大小方向调整,使用时在file.Open调整位图打印路径,在StretchDIBits中调整打印大小、位置,在_tmain中的PrintDoc中更改自己的打印机的名字即可使用
  • js单独打印二维码图片和批量打印二维码图片,大纲: 1. 打印机设置 (以使用的热敏打印机为例) 2. js实现打印功能 3. 遇坑记录
  • 打印CSDN的文章

    2019-10-04 10:52:58
    经常我们想要打印csdn里的文章,如果直接按Ctrl+p会连同网页上其他信息也一起打印出来。如何精确的csdn中文章,只需要以下的代码的拷贝到Chrome下的开发者模式(F12)的Console中。 (function(){ $("#side")....
  • 打印CSDN文章

    万次阅读 2020-10-14 11:42:27
    在浏览器的console上直接粘贴 (function(){ 'use strict'; var articleBox = $("div.article_content"); articleBox.removeAttr... 谷歌浏览器 更多设置中,把边距选无,边边就能全部打印显示了 使用缩放,字小了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 541,826
精华内容 216,730
关键字:

怎么将文字打印出来