V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a1609
V2EX  ›  Java

怎样使生成的打印条码分辨率变低但不影响使用?

  •  
  •   a1609 · 2020-07-06 08:23:53 +08:00 · 3511 次点击
    这是一个创建于 1604 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统要生成多个条码然后打印成 pdf, 现在 pdf 过大,导致下载和系统响应不过来。 求如何压缩图片质量或 pdf 质量? java 开发环境

    32 条回复    2020-07-27 14:23:19 +08:00
    opengps
        1
    opengps  
       2020-07-06 08:31:15 +08:00
    必须用 pdf 格式吗?这里即使换了其他格式,提升未必明显,毕竟内容摆在那里。
    建议考虑另外 2 个问题:
    1,动态生成一个 pdf 文件,本身就快不了多少。为了不卡住系统,起码得另起线程进程甚至另外用单独服务器处理生成过程。
    2,对于动态生成 pdf 大文件,不适合实时下载。可以提供邮箱发送、轮训检查生成结果、稍后下载等方案免除实时要求
    tankren
        2
    tankren  
       2020-07-06 08:56:34 +08:00
    nicelabel 了解一下?
    sleepm
        3
    sleepm  
       2020-07-06 09:00:28 +08:00 via Android
    调低分辨率参数
    然后尝试扫码
    只要条码能看清,然后拉够长和宽就行
    分辨率过高,生成的时候 cpu 占用高,生成的文件也大,但是它的长宽就那么大。。。所以看你用的哪个库,能不能调分辨率参数
    sivacohan
        4
    sivacohan  
       2020-07-06 09:02:54 +08:00
    PDF417 ?
    sleepm
        5
    sleepm  
       2020-07-06 09:05:51 +08:00 via Android   ❤️ 1
    不对啊,条码一般没有分辨率参数,二维码有
    生成的条码是矢量的,然后调高度就行了
    a1609
        6
    a1609  
    OP
       2020-07-06 09:41:32 +08:00
    @sleepm 您说的这种是图片的调整。调整矢量的话,尺寸大小也会改变,我们是需要那种条码标签打印的,标签纸大小不变,条码尺寸不变。
    a1609
        7
    a1609  
    OP
       2020-07-06 09:43:53 +08:00
    @opengps 我们的友商 1500 个条码的 pdf 文件是 80kb,我们目前的是 8.7M,再大一点就卡死了
    所以即时另起线程,下载等待时间也不一样
    lovestudykid
        8
    lovestudykid  
       2020-07-06 09:46:42 +08:00
    pdf 本来就可以设 PPI 啊
    a1609
        9
    a1609  
    OP
       2020-07-06 09:47:06 +08:00
    @sivacohan 不是,是 Code128,商品的竖纹条码那样的的
    lsylsy2
        10
    lsylsy2  
       2020-07-06 09:54:00 +08:00
    @a1609 确定是矢量吗?怎么听着像是“打印”的时候有转换
    用 word 打开 pdf,看看里面是不是还是分开的条码,每张图片多大?
    sivacohan
        11
    sivacohan  
       2020-07-06 10:54:50 +08:00   ❤️ 1
    https://fonts.google.com/specimen/Libre+Barcode+128+Text#standard-styles
    你看下这个,用字体来生成 bar code 。
    jiejiss
        12
    jiejiss  
       2020-07-06 11:04:27 +08:00
    a1609
        13
    a1609  
    OP
       2020-07-06 11:16:59 +08:00
    @sivacohan 是的,我们现在已经能生成 code,并且多个 code 放在一起变为 pdf 文件进行打印,但是大小有点过大了,需要优化
    a1609
        14
    a1609  
    OP
       2020-07-06 11:20:38 +08:00
    @lsylsy2 用 word 打开感觉像是 pdf 转换成了 word 呀,目前效果是里面是整张图片
    具体流程是系统将生成的条码按个数生成一个 pdf 文件,一页会有多个条码。
    但是我们生成的 pdf 文件比友商的要大几十倍,导致下载和加载都比较慢
    lsylsy2
        15
    lsylsy2  
       2020-07-06 11:23:32 +08:00
    @a1609 里面整张图片应该有问题,就是你的“打印成 pdf”这步有问题,把整个页面渲染成了一张图片,然后图片没压缩体积就大了
    正确的应该是 word 打开虽然可能排版有问题,但条码图片还是一个一个分开的
    lsylsy2
        16
    lsylsy2  
       2020-07-06 11:24:20 +08:00
    @a1609 本质就是别人的转换 pdf 相当于写一段文字保存一个 word 文件,而你是屏幕截图然后把截图贴进 word 保存
    ryh
        17
    ryh  
       2020-07-06 11:30:08 +08:00
    @a1609 #11 楼的意思是 pdf 里嵌入这个 38.0 KB 的字体, 然后生成的 barcode 全是文字 所以保存很多条码(实际上是文字) 也不会显著增加文件大小
    vcijj
        18
    vcijj  
       2020-07-06 11:32:00 +08:00
    有没有办法以纯矢量的形式或者以字符的形式保存,以图片内容必然大呀
    jfcai
        19
    jfcai  
       2020-07-06 11:59:52 +08:00 via Android
    @ryh 我也觉得嵌入字体是个好方法。
    a1609
        20
    a1609  
    OP
       2020-07-06 13:08:29 +08:00
    @lsylsy2 就是我们将条码生成了一张大的图片保存为 pdf,所以 pdf 比较大的意思吗?那先试试看,谢谢
    a1609
        21
    a1609  
    OP
       2020-07-06 13:10:48 +08:00
    @ryh 不太懂,是条码实际是字符组成还是字符转换为条码呀?
    我们是字母+数字的组合,转换为条码,然后确认条码数量转换为 pdf,最后打印 pdf 这样一个流程。
    RadishWind
        22
    RadishWind  
       2020-07-06 13:25:05 +08:00
    @a1609 1.矢量图 2.降低图片分辨率 3.降低 QRcode 的质量(容错率) 4.方便看看你的格式有多长吗? 5.图片压缩后放进 pdf 试试
    MooRider
        23
    MooRider  
       2020-07-06 13:25:23 +08:00
    你现在保存的是图片, 再怎么压缩也不可能比纯文字保存体积小.
    所以思路是不保存一维码为图片, 而是使用楼上那个字体将一维码转换为文字保存. 从而减小体积
    就像扫描版图书和文字版图书转换为 pdf 一样, 体积相差好几十倍
    ppgs8903
        24
    ppgs8903  
       2020-07-06 13:32:15 +08:00
    换劣质墨水
    sivacohan
        25
    sivacohan  
       2020-07-06 13:43:49 +08:00
    你要是想折腾,可以用我提到的字体,来拼 barcode 。你需要计算每个字体的大小。
    如果你不想折腾,那就买 adobe acrobat pro dc,具体操作方法可以参照这篇文章
    https://www.evermap.com/AddingBarcodeField.asp
    sampeng
        26
    sampeng  
       2020-07-06 20:49:14 +08:00 via iPhone
    我想问…为什么要保存成图片…如果是为了打印,直接调用打印机接口不行么
    a1609
        27
    a1609  
    OP
       2020-07-07 14:10:50 +08:00
    试了下字体,本地能够生成条码了,大小也大幅压缩,但是今天上传到阿里云 linux 系统中,就出现找不到该文件的错误,求解
    a1609
        28
    a1609  
    OP
       2020-07-07 14:11:35 +08:00
    已换成字符,确实文件大小小超级多
    a1609
        29
    a1609  
    OP
       2020-07-07 14:12:59 +08:00
    已换成字符打印,生成的 pdf 变小了,本地运行没问题,但是上传到 lunix 服务器中报错,没有出来 pdf 的内容
    a1609
        30
    a1609  
    OP
       2020-07-07 14:14:18 +08:00
    @sivacohan 试了下字体,本地能够生成条码了,大小也大幅压缩,但是今天上传到阿里云 linux 系统中,就出现找不到该文件的错误,pdf 生成的页面为 404
    求解
    a1609
        31
    a1609  
    OP
       2020-07-07 14:18:27 +08:00
    @lsylsy2 已采用 Libre Barcode 128 Text 的格式,就是现在再 linux 上执行还是有错误
    a1609
        32
    a1609  
    OP
       2020-07-27 14:23:19 +08:00
    该问题已解决,采用 Libre Barcode 128 Text 的格式
    不过 linux 系统中需要加载一个语言字体包
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:36 · PVG 08:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.