我知道以前也有人问过类似的问题,但是这些问题已经过时了(有些问题可以追溯到2006年)。
我有一个. net 3.5应用程序(w/iTextSharp 5),我正在转换为. net核心(iText 7),它从联邦快递跟踪文档中提取签名,通过SOAP服务以字节[]数组发送。这段代码多年来一直运行良好,只是略有更新。从联邦快递返回的PDF文档中有几个图像,但签名块不是110x46图像(这是pdf文件中联邦快递的标志,因此我跳过了它。)
PdfReader pdf = new PdfReader(FedexData);
for(Int32 iPage = 1; iPage <= pdfReader.NumberOfPages; iPage++)
{
PdfDictionary pg = pdf.GetPageN(iPage);
PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
foreach(PdfName name in xobj.Keys)
{
PdfObject obj = xobj.Get(name);
if(obj.IsIndirect())
{
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
String width = tg.Get(PdfName.WIDTH).ToString();
String height = tg.Get(PdfName.HEIGHT).ToString();
String decode = tg.Contains(PdfName.DECODEPARMS) ? tg.Get(PdfName.DECODEPARMS).ToString() : "";
String bitspercomponent = tg.Contains(PdfName.BITSPERCOMPONENT) ? tg.Get(PdfName.BITSPERCOMPONENT).ToString() : "";
String colorspace = tg.Contains(PdfName.COLORSPACE) ? tg.Get(PdfName.COLORSPACE).ToString() : "";
if(width != "110" && height != "46" && bitspercomponent != "1")
{
ImageRenderInfo imgRI = ImageRenderInfo.CreateForXObject(new GraphicsState(), (PRIndirectReference)obj, tg);
PdfImageObject image = imgRI.GetImage();
Image dotnetImg = image.GetDrawingImage();
if(dotnetImg != null)
{
// process image and update database
只需说这段代码不适用于iText7。我试图移植其中一些,但我似乎没有得到图像。。。。因此,我显然做了一些不正确的事情,这是我自己对iText7函数的无知,这些函数似乎无法提供与旧库的向下兼容性。
有人能给我指一下iText7的教程吗?它涉及提取存储在PDF文件中的图像?我找到了关于如何将PDF提取为图像(不是我想要的)、如何将图像存储在PDF文档中(与我想要的相反)的教程,以及类似的问题和答案都是基于不再起作用的旧库。
谢谢,文
public class MyImageRenderListener implements IEventListener {
protected String path;
protected String extension;
public MyImageRenderListener(String path) {
this.path = path;
}
public void eventOccurred(IEventData data, EventType type) {
switch (type) {
case RENDER_IMAGE:
try {
String filename;
FileOutputStream os;
ImageRenderInfo renderInfo = (ImageRenderInfo) data;
PdfImageXObject image = renderInfo.getImage();
if (image == null) {
return;
}
// You can access various value from dictionary here:
PdfString decodeParamsPdfStr = image.getPdfObject().getAsString(PdfName.DecodeParms);
String decodeParams = decodeParamsPdfStr != null ? decodeParamsPdfStr.toUnicodeString() : null;
byte[] imageByte = image.getImageBytes(true);
extension = image.identifyImageFileExtension();
// You can use raw image bytes directly, or write image to disk
filename = String.format(path, image.getPdfObject().getIndirectReference().getObjNumber(), extension);
os = new FileOutputStream(filename);
os.write(imageByte);
os.flush();
os.close();
} catch (com.itextpdf.io.IOException | IOException e) {
System.out.println(e.getMessage());
}
break;
default:
break;
}
}
public Set<EventType> getSupportedEvents() {
return null;
}
}
我已经评论了一些你可能感兴趣的部分。
下面是为所有页面或任何感兴趣的页面调用处理器的代码:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
IEventListener listener = new MyImageRenderListener(outPath);
PdfCanvasProcessor parser = new PdfCanvasProcessor(listener);
for (int i = 1; i <= pdfDoc.getNumberOfPages(); i++) {
parser.processPageContent(pdfDoc.getPage(i));
}
pdfDoc.close();
假设我的用户去了他们办公室的扫描仪。扫描仪能够生成扫描文档的PDF。这基本上就是我拥有的文件类型。 我想做的是从这个PDF中提取文本。这不是“第一代”pdf,因为文本没有嵌入到pdf中。文本嵌入在PDF中的图像中。 PDFBox的iText中是否有允许检索此数据的功能?如果可能的话,我正在尝试避免对图像进行OCR。我希望IText或PDFBox中有一些内置的东西可以做到这一点。 请注意,我不是在谈
问题内容: 如何 使用PHP 从PDF文档中提取文本? (我不能使用其他工具,我没有root用户访问权限) 我发现一些函数可用于纯文本,但是它们不能很好地处理Unicode字符: http://www.hashbangcode.com/blog/zend-lucene-and-pdf-documents-part-2-pdf- data-extraction-437.html 问题答案: 下载 c
问题内容: 我需要从服务器上的PDF文件中提取所有图像。我不想要PDF页面,只想要原始尺寸和分辨率的图像。 如何使用Perl,PHP或任何其他基于UNIX的应用程序(我将使用PHP的exec函数调用它)来做到这一点? 问题答案: pdfimages就是这样做的。它是poppler- utils和xpdf-utils软件包的一部分。 从联机帮助页: Pdfimages将可移植文档格式(PDF)文件中
我需要循环一些word文档,并从word文档中提取图像,并将其保存在单独的文件夹中。我尝试过将它们保存为超文本标记语言文档的方法,但它不太适合我的需求。 现在,我使用inlineshapes对象循环浏览图像,然后将它们复制粘贴到publisher文档上,然后将它们保存为图像。但是,在运行脚本时,我会遇到运行时自动化错误。对于使用Publisher运行时库,我尝试了早期绑定和晚期绑定,但都遇到了错误
我正在使用PDFBox从我的pdf(只包含JPG的)中提取图像。 因为我将把这些图像保存在我的数据库中,所以我想先把每个图像直接转换成一个inputstream对象,而不把文件临时放在我的文件系统上。然而,我在这方面遇到了困难。我认为这是因为使用了,就像我在下面的示例中所做的那样: 然而,这是可行的: 知道我如何将每个PDXObjectImage(或我能得到的任何其他对象)转换为InputStre
我正在从一个PDF文档中提取文本。这个PDF是使用一个从AS400读取数据的WS生成的。所以打印文本时,输出是这样的: 和«VS123»,«VS124»是AS400中的变量。Java APi无法从变量中读取值,无法打印变量名而不是变量值。 我用的是PDFBoxhttps://pdfbox.apache.org/提取文本。代码源如下: 输出从以下错误堆栈开始: 避免:字体为ArialMT 2017年