我尝试使用PDFBox将BuffereImage中的图像绘制到PDF中,但失败了,我得到了黑色图像,Acrobat Reader发出警告,其中有“内存不足”之类的错误(但PDF是显示的)。
我使用BuffereImage是因为我需要将JavaFX图像对象(来自对Functiones.crearImagenDesdeTexto()的调用,是一个将文本转换为图像的函数)绘制成PDF。其余图像在不使用BuffereImage的情况下运行良好。
PDPixelMap img = null;
BufferedImage bi;
try {
//If item has id, I try to get image with that id (image it's shows OK on PDF)
img = new PDPixelMap(documento, read(getClass().getResourceAsStream("/com/img/" + item.getId() + ".png")));
}
catch (Exception e) {
//If item has not id or fails load image, I create image on the fly (which contains item name. This not work on PDF, shows black images)
bi = new BufferedImage(alto, ancho, BufferedImage.TYPE_INT_ARGB);
bi.createGraphics().drawImage(SwingFXUtils.fromFXImage(Funciones.crearImagenDesdeTexto(item.getNombre()), null), ancho, alto, null);
img = new PDPixelMap(documento, bi);
}
finally {
contenedor.drawXObject(img, x, y, alto, ancho);
}
注意:crearImagenDesdeTexto()返回一个动态创建的JavaFX图像对象(我在程序的其他部分尝试了这个函数并且运行良好,函数取自其他stackOverflow响应)。
最后,我找到了一个解决方案(也感谢Tilman Hausherr):
private void dibujarImagen(Item i, int x, int y, int alto, int ancho) throws IOException {
PDPixelMap img = null;
try {
img = new PDPixelMap(documento, read(getClass().getResourceAsStream("/com/img/" + i.getId() + ".png")));
}
catch (IllegalArgumentException e) {
img = new PDPixelMap(documento, SwingFXUtils.fromFXImage(Funciones.crearImagenDesdeTexto(i.getNombre()),null));
}
finally {
contenedor.drawXObject(img, x, y, alto, ancho);
}
}
您的代码令人困惑,您有三个“new PDJpeg”,其中一个处于捕获状态(这应该只是处理错误)。“read()”做什么?它传递流还是BufferedImage?如果它是流,那么它是错误的,因为PDJpeg是用于JPEG的,而不是用于PNG。
第二张
img = new PDJpeg(documento, (getClass().getResourceAsStream("/com/img/" + Byte.toString(item.getId()) + ".png")));
完全错误的原因是:PDJPeg不适用于PNG文件/流。
如果您想从PNG文件/流创建图像,请使用PDPixelMap。
可以从BuffereImage创建PDJpeg对象,但仅当图像之前未编码时才建议这样做。因为如果您从JPEG中读取BuffereImage,然后使用PDJPeg进行此操作,则当图像再次解码和编码时,质量会略有下降(JPEG是一种“有损”压缩格式)。
如果我的建议没有帮助,请上传JPEG文件和PDF文件。
还要确保您使用的是最新版本,即1.8.7。
注释后更新:创建图形的参数。drawImage()应为0,0,而不是宽度和高度。这两个参数是位置,而不是大小。
我在试着编一个纸牌游戏。我有一个像雪碧片一样的系统来获得个人卡。这是我的Deck类的代码(没有一些函数): 当我在自己的JPanel类上绘制单个ImageIcons或大BuffereImage时,所有内容都是黑色的。当我尝试将TYPE\u INT\u RGB更改为ARGB时,图像会变得完全透明且没有大小。jpg版本的图像也会出现这种情况。我尝试了g.drawImage(…,frame);g、 dr
我正在编写一个Java程序来显示我的入门编程类的Mandelbrot集。我相信我已经正确地设置了所有的数学,但是当我尝试绘制分形时,我得到的只是一种纯色。我已经测试了数学,它似乎应该是有效的。我搜索了一个多小时,但没有找到任何有用的东西。下面是我的复数类,并实际创建了Mandelbrot集:复数 曼德布罗特 我已经做了一些JUnit测试,上面的两个类似乎都可以工作。我的测试中可能有一个缺陷导致了疏
我正试图用PDFbox绘制饼图,但各片之间有白线,有人能帮我吗?是否有此选项? 附上我正在使用的绘制圆弧的代码: 结果的附加图像: 谢啦
我实现了一个按钮,将图形保存到png文件中。该图形是通过以下方式创建的: 当我点击保存按钮时,执行以下代码: 由于某些原因,轴和绘图标题从最终绘图中省略。但是它们没有被裁剪-在图形周围有一个边界黑框,它是空白的(见下文) 无论我如何尝试,更改figsize、dpi、边界框等,我都无法使用轴标签保存图形。
问题内容: 我必须使用pdfbox绘制一个饼图。 令数据为: 主题分数百分比累计分数 Sub-1 80 80 80 Sub-2 70 70150 Sub-3 65 65215 Sub-4 90 90305 Sub-5 55 55360 令半径和中心为100像素和(250,400)。 让我们取平行于x轴的初始线。 绘图的初始线条语句将为: contentStream.drawLine(250,400
我必须用pdfbox绘制一个饼图。 让数据是: 设半径和中心为100像素和(250,400)。 让我们取平行于x轴的初始线 绘制初始行语句将为: contentStream。抽绳(250400350400); 我坚持: a)在距离初始线一定程度的圆圈上找到点的x, y坐标,以绘制半径 b)使用贝塞尔曲线在两点之间绘制圆弧。 任何帮助解决问题将不胜感激!