我想从PDF的第一页创建图像。我正在使用PDFBox。在研究了网络之后,我发现了以下代码片段:
public class ExtractImages
{
public static void main(String[] args)
{
ExtractImages obj = new ExtractImages();
try
{
obj.read_pdf();
}
catch (IOException ex)
{
System.out.println("" + ex);
}
}
void read_pdf() throws IOException
{
PDDocument document = null;
try
{
document = PDDocument.load("H:\\ct1_answer.pdf");
}
catch (IOException ex)
{
System.out.println("" + ex);
}
List<PDPage>pages = document.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
int i =1;
String name = null;
while (iter.hasNext())
{
PDPage page = (PDPage) iter.next();
PDResources resources = page.getResources();
Map pageImages = resources.getImages();
if (pageImages != null)
{
Iterator imageIter = pageImages.keySet().iterator();
while (imageIter.hasNext()) {
String key = (String) imageIter.next();
PDXObjectImage image = (PDXObjectImage) pageImages.get(key);
image.write2file("H:\\image" + i);
i ++;
}
}
}
}
}
在上面的代码中没有错误。但是这段代码的输出是什么。我期望上面的代码将产生一系列图像,这些图像将保存在H驱动器中。但是从该代码生成的代码中没有图像。为什么呢
参考方案
在不失礼貌的情况下,以下是您发布的代码在其主要工作循环中所做的工作:
PDPage page = (PDPage) iter.next();
PDResources resources = page.getResources();
Map pageImages = resources.getImages();
它从PDF文件获取每个页面,从页面获取资源,并提取嵌入的图像。然后,将其写入磁盘。
如果您要成为合格的软件开发人员,则需要能够研究和阅读文档。对于Java,这意味着Javadocs。谷歌搜索PDPage
(或明确地转到apache站点)打开Javadoc for PDPage。
在该页面上,找到用于将convertToImage()
转换为图像的方法PDPage
的两个版本。问题解决了。
除 ...
不幸的是,它们返回一个java.awt.image.BufferedImage
,它基于您提出的其他问题是一个问题,因为您正在使用的Android平台不支持它。
简而言之,您无法使用Android上的Apache的PDFBox来完成您想做的事情。
在StackOverflow上搜索时,您会发现相同的问题以不同的形式多次提出,这将导致您遇到以下问题:https://stackoverflow.com/questions/4665957/pdf-parsing-library-for-android/4766335#4766335,您可能会感兴趣以下答案:https://stackoverflow.com/a/4779852/302916
不幸的是,即使上述回答说的也可以。我找不到“如何”或文档。它也被标记为“ alpha”。对于胆小的人来说,这可能不是什么东西,因为它将需要阅读并理解他们的代码才能开始使用它。
JAVA:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
Java:BigInteger,如何通过OutputStream编写它 - java我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…
Java DefaultSslContextFactory密钥库动态更新 - java我有一个使用org.restlet.engine.ssl.DefaultSslContextFactory的现有应用程序和一个在服务器启动时加载的密钥库文件。我有另一个应用程序,该应用程序创建必须添加的证书服务器运行时动态地更新到密钥库文件。为此,我在代码中创建了证书和私钥,然后将其写入到目录。该目录由bash脚本监视,该脚本检查是否有新文件,如果出现,它将…
Java-如何将此字符串转换为日期? - java我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…