- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将 jpg 图像插入 PDF。一些 jpg 图像可以正常工作,但在某些情况下我会遇到以下异常。
java.io.IOException: Premature EOF while reading JPG.
at com.itextpdf.text.Jpeg.processParameters(Jpeg.java:218)
at com.itextpdf.text.Jpeg.<init>(Jpeg.java:117)
at com.itextpdf.text.Image.getInstance(Image.java:279)
at com.itextpdf.text.Image.getInstance(Image.java:241)
at com.itextpdf.text.Image.getInstance(Image.java:364)
下面是我使用的代码。
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class ImagesNextToEachOther {
public static final String DEST = "/home/Documents/pdftest/hello.pdf";
public static final String IMG1 = "/home/Documents/pdftest/2.jpg";
public static void main(String[] args) throws IOException,
DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new ImagesNextToEachOther().createPdf(DEST);
}
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
table.addCell(createImageCell(IMG1));
document.add(table);
document.close();
}
public static PdfPCell createImageCell(String path) throws DocumentException, IOException {
Image img = Image.getInstance(path);
PdfPCell cell = new PdfPCell(img, true);
return cell;
}
}
我在上面代码中的以下行中遇到错误。
Image img = Image.getInstance(path);
path
是图像的完整路径。
我在 SO 上发现了类似的问题
Premature EOF while reading JPG using itext
Failure to read JPEG file from byte[]
但这并没有解决我的问题。
这是其中一张图片的链接
最佳答案
正如 Amedee 在他的评论中所解释的那样,JPG 已损坏。您可以通过打开 GIMP 中的图像自行检查。然后选择 File > Overwrite image.jpg
,GIMP 将修复图像,EOF 错误将消失。
我已经为你做了这件事,结果是:
如果您下载此图像,并将其与您的代码一起使用,则不会发生错误。
这对我有什么帮助?您可能会问。 我可以在浏览器中看到图像。我可以在图像查看器中看到图像。你为什么不在 iText 中解决这个问题?
答案很简单:PDF 原生支持 JPG,这意味着我们可以将所有 JPG 图像字节的精确副本放入 PDF 中。然而,在我们这样做之前,iText 会对图像执行健全性检查。当此完整性检查失败时,iText 将(并且应该)拒绝该图像,因为如果我们使用它,包含此类“损坏”图像的 PDF 很有可能会显示错误消息。
图像查看器或图像编辑工具(如 GIMP)的容忍度更高。他们忽略了图像格式不正确的事实。对于 GIMP,该工具会修复错误,并让您有机会“覆盖”图像以存储修复。
目前没有让 iText 执行此类修复的计划。我们已经为损坏的 TIFF 文件提供了这样的修复程序,但即便如此,默认设置仍会拒绝损坏的图像。如果您希望 iText 修复损坏的 TIFF 文件,您必须设置一个标志,因为我们的大多数客户更愿意获得异常(exception),而不是冒险添加自动修复的图像。如果您是 iText 客户,请随时发布支持请求以获得与 iText 类似的“损坏图像修复”功能;如果您不是 iText 客户,请自行添加此修复程序,并根据 AGPL 发布该修复程序以及您项目的其余代码(如您所知,iText 的 AGPL 强制执行在大多数情况下,您可以发布项目的完整源代码)。
关于java - 使用 itext 将 jpg 图像写入 pdf 时读取 JPG 异常时出现过早的 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689795/
我的目录中有一堆图像(100+),它们的名称都不同。有什么方法可以将它们重命名为 0.jpg、1.jpg、2.jpg 等,可能使用脚本(我运行的是 Windows),而不必单独重命名每个文件?如果在
文件的顺序由可以嵌入文件名中的数字确定,但有时嵌入在名称的开头,例如文件1.txt文件2.txt文件3.txt文件10.txt文件11.txtETC..或者1.txt2.txt10.txt等. 重命名
我有一个 inotify 等待脚本,只要检测到文件已上传到源目录,它就会将文件从一个位置移动到另一个位置。 我面临的挑战是我需要保留文件的基本名称并将以下扩展名:.JPEG、.JPG、.jpeg 转换
我有一段代码可以上传图像并创建缩略图,只要扩展名是小写的 jpg,但如果是大写的 JPG,它就不会上传图像。当我重命名图像时,例如example.JPG 到 example.jpg,它会上传。但是 e
我必须缩小和解压缩一组大小为 4608 x 3456 的 JPG 图像。目前,我已经能够将图像正确解压缩为 RGB 格式并将它们转换为位图。 现在我需要实现缩小,根据我目前所读到的正确缩小图像的内容,
这个问题困扰我好久了。我正在尝试在 PHP 中加载图像,但是有 jpg 和 JPG 图像,当我尝试通过 jpg 加载图像时,找不到 JPG 图像(显然) $img1 = ''; $img2 = '';
我使用这个函数来检测我的文件是否存在。虽然我有一些图像存储为 .jpg、.JPG、.png 和 .PNG。但即使真实文件的扩展名为 .JPG 或 .PNG,它也总是将 .jpg 或 .png 返回为真
我有很多这样的文件: 13040-3BLK1.JPG 13040-3NAV11.JPG 13040-50NAV11.JPG 13040-60NAV11.JPG 13040-LNAV1.JPG
我在机器人上安装了摄像头。长话短说,相机输出二进制数组,我相信这是一个 JPG 编码流。我这么说是因为我使用的库中的许多方法都暗示它是 JPG 编码的,并且第一个和最后 2 个字节是 255 216
我正在制作个人网页,我已将其草稿上传到 www.kurtpeek.com。我注意到的一个错误是,我在“关于我”部分中的一张 jpeg 图片“MIT_IAP_SAR_smallest.JPG”没有出现在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
我有一张图片列表,我想将它们组合成每组一张图片。每个图像都有一个名称以及它是什么类型的图表。我希望有一种方法可以使用名称对图像进行分组,并为每个组返回单个 jpg 或 png 的输出。组合后的图像如下
我通过 JavaScript 设置 img 的 src 属性,如下所示: var newimgid = "images/" + fldrid + "/" + id + ".jpg"; document
我有一个 TImage,它显示文件夹中的 JPG 图像。每个 JPG 图像名称都是数字(例如 5968.jpg)。如果 JPG 图像不存在,我当前加载模板 JPG。 但是,我想在检查本地文件夹后再检查
我的脚本很简单。 SELECT file_name FROM images WHERE `id` = '$id' AND `file_name` LIKE '%_1.jpg' 当我在 mysql 中运
我有一个页面显示了一些产品,例如:- 标题- 描述- 图片 当图像存储在表中时,其存储为例如“image.jpg”...但是我想在上传图像时制作图像名称的标题将用作图像的标题产品的 html 标题(t
我想创建一个按钮来在 a.jpg 和 b.jpg 之间反复翻转图像。这是我的代码: function changeImg() { document.getElementById("
有没有人为 Windows 制作一个简单的 DLL,这样我就可以将原始图像数据保存为 JPG 格式?它也应该有 .lib 和 .h 文件,所以我不需要搞乱源代码编译,因为我发现它非常困难。 需要考虑的
我有一张我正在尝试创建的动态图像,它以前在一个网络主机上工作,直到我发现他们删除了一些功能,其中一些破坏了我的形象。我最近搬到了 hostgator,我也无法让图像在他们的网站上工作。实际的 PHP
有时我将 JPG 图像保存为未压缩的位图 (BMP/PNG),以在更改图像时保持质量。 我想知道,理论上是否可以将位图重新编码回其原始 JPG 格式,而不会损失任何质量(我编辑的区域除外)? 编辑:我
我是一名优秀的程序员,十分优秀!