gpt4 book ai didi

java - Apache PDFBox 在 PNG 中渲染直线弯曲

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:40 24 4
gpt4 key购买 nike

我有一个 PDF,当我将其渲染为 png 时,它会渲染一条弯曲的线,或者更确切地说,其中有一个步骤。这是 PDF 及其外观:https://drive.google.com/file/d/1E-zucbreD7pVwWc3Z4MNe_lzsP6D9m49/view

这是使用 PDFBox 2.0.13 和 openjdk 版本 1.8.0_181 的完整 PNG 渲染:enter image description here

这是具有以下步骤的 PNG 的特定部分:enter image description here

最佳答案

页面内容流摘录:

q
1 0 0 1 35.761 450.003 cm
0 i
0.75 w
0 0 m
50.923 0 l
S
Q

q
1 0 0 1 86.139 450 cm
0 i
0.75 w
0 0 m
14.9 0 l
S
Q

(“cm”是仿射变换,“m”是 moveto,“l”是 lineto)。可以看到两条线略有不同,一条为 450.003,另一条为 450。

下面是一些通过复制 PDFBox 正在执行的操作来模拟错误的代码:

BufferedImage bim = new BufferedImage(612, 792, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) bim.getGraphics();
RenderingHints r = new RenderingHints(null);
r.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
r.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
r.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.addRenderingHints(r);
g.translate(0, 792);
g.scale(1, -1);
g.setStroke(new BasicStroke(0.75f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10));
g.setColor(Color.black);
GeneralPath path = new GeneralPath();
path.moveTo(35.761f, 450.003f);
path.lineTo(35.761f + 50.923f, 450.003f);
g.draw(path);
path = new GeneralPath();
path.moveTo(86.139f, 450f);
path.lineTo(86.139f + 14.9f, 450f);
g.draw(path);
g.dispose();
ImageIO.write(bim, "png", new File("...."));

可以通过注释此行来消除错误:

r.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

这可以在 PDFBox 的源代码中完成,或者通过在 PDFRenderer.setRenderingHints() 中传递 renderHints 来完成。不过,该版本现在不可用,但将在 2.0.14 中可用(请参阅问题 PDFBOX-4435 ,尝试 snapshot )。如果不使用抗锯齿功能,渲染质量可能会很差。

更新:不要删除上面提到的行,而是添加这一行:

r.put(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);

Source .

关于java - Apache PDFBox 在 PNG 中渲染直线弯曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54658008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com