a1609
V2EX  ›  Java

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

  •  
  •   a1609 · Jul 6, 2020 · 5048 views
    This topic created in 2315 days ago, the information mentioned may be changed or developed.

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

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