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