- 浏览: 698552 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
shappy1978:
自己踩死自己了,我还是有远见的嘛
该死的微软,该死的IE -
calosteward:
I know Zxing and shopsavvy, bot ...
[trans]COMPARISON OF MOBILE BARCODE SCANNERS -
qq690388648:
唉……四年前的Bug,现在还没改,Apache也有不足的地方啊 ...
POI解析Word表格备忘 -
shappy1978:
Now I get to say that every met ...
Jailbreak Detection on iOS -
hebeixiaolei:
你好,我想问一下,用poi如何往word文档里插入超链接呀!
POI读取Word文档总结
PDFBox自我手中有的0.8版本就有了转图片的功能,在其java org.apache.pdfbox.ExtractImages类中有具体的代码,但是没有很好的封装,似乎是用来做命令行的.
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.pdfbox; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.encryption.AccessPermission; import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial; import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage; /** * This will read a read pdf and extract images. <br/><br/> * * usage: java org.apache.pdfbox.ExtractImages <pdffile> <password> [imageprefix] * * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a> * @version $Revision: 1.7 $ */ public class ExtractImages { private int imageCounter = 1; private static final String PASSWORD = "-password"; private static final String PREFIX = "-prefix"; private ExtractImages() { } /** * This is the entry point for the application. * * @param args The command-line arguments. * * @throws Exception If there is an error decrypting the document. */ public static void main( String[] args ) throws Exception { ExtractImages extractor = new ExtractImages(); extractor.extractImages( args ); } private void extractImages( String[] args ) throws Exception { if( args.length < 1 || args.length > 3 ) { usage(); } else { String pdfFile = null; String password = ""; String prefix = null; for( int i=0; i<args.length; i++ ) { if( args[i].equals( PASSWORD ) ) { i++; if( i >= args.length ) { usage(); } password = args[i]; } else if( args[i].equals( PREFIX ) ) { i++; if( i >= args.length ) { usage(); } prefix = args[i]; } else { if( pdfFile == null ) { pdfFile = args[i]; } } } if(pdfFile == null) { usage(); } else { if( prefix == null && pdfFile.length() >4 ) { prefix = pdfFile.substring( 0, pdfFile.length() -4 ); } PDDocument document = null; try { document = PDDocument.load( pdfFile ); if( document.isEncrypted() ) { StandardDecryptionMaterial spm = new StandardDecryptionMaterial(password); document.openProtection(spm); AccessPermission ap = document.getCurrentAccessPermission(); if( ! ap.canExtractContent() ) { throw new IOException( "Error: You do not have permission to extract images." ); } } List pages = document.getDocumentCatalog().getAllPages(); Iterator iter = pages.iterator(); while( iter.hasNext() ) { PDPage page = (PDPage)iter.next(); PDResources resources = page.getResources(); Map images = resources.getImages(); if( images != null ) { Iterator imageIter = images.keySet().iterator(); while( imageIter.hasNext() ) { String key = (String)imageIter.next(); PDXObjectImage image = (PDXObjectImage)images.get( key ); String name = getUniqueFileName( key, image.getSuffix() ); System.out.println( "Writing image:" + name ); image.write2file( name ); } } } } finally { if( document != null ) { document.close(); } } } } } private String getUniqueFileName( String prefix, String suffix ) { String uniqueName = null; File f = null; while( f == null || f.exists() ) { uniqueName = prefix + "-" + imageCounter; f = new File( uniqueName + "." + suffix ); imageCounter++; } return uniqueName; } /** * This will print the usage requirements and exit. */ private static void usage() { System.err.println( "Usage: java org.apache.pdfbox.ExtractImages [OPTIONS] <PDF file>\n" + " -password <password> Password to decrypt document\n" + " -prefix <image-prefix> Image prefix(default to pdf name)\n" + " <PDF file> The PDF document to use\n" ); System.exit( 1 ); } }
例子很简单,可以运行,但是对于中文PDF就有问题了,如果用了中文字体,会报告Can't find the specified basefont的错误,原因是读取中文字体出错,其实是读取编码格式错误,导致读到的字体是乱码.解决上述问题后,还会出现会自动把英文字体的数字翻译为英语单词,空格翻译为space的问题.追了一天,发现可能是encoding的问题,反正解析的都是中文,于是去掉英文的默认encoding,终于可以输出比较正常的图片的.
要转换的文档和出问题的截图如下:
之后又出现tiff图像无法导出的问题,日志中出现"getRGBImage returned NULL"的warning,查看代码发现作者这样描述:
/** * Returns an image of the CCITT Fax, or null if TIFFs are not supported. (Requires additional JAI Image filters ) * * {@inheritDoc} */ public BufferedImage getRGBImage() throws IOException
在对应警告的地方也写了TODO标签,说明是待完善的,主要是ImageIO-lib的授权所限,所以Appach不提供直接tiff支持.
摘录两段官网上的留言
Andreas Lehmkühler added a comment - 15/Apr/10 01:49 PM
The ImageIO-lib provides the missing tiff-support PDFBox needs to render such images. But unfortunately the license isn't suitable, so that we can not distribute it in combination with pdfbox. I hope sooner or later sanselan [1] will support the missing tiff support.
[1] http://commons.apache.org/sanselan/
Andreas Lehmkühler added a comment - 16/Apr/10 03:42 AM
I've found another source for a possible ImageIO replacement. I've found an older posting from Jeremias. He mentioned a TIFF-decompressor within Apache XMLGraphics. That should work as builtin support for T.4 and T.6 decoded XObjects.
[1] http://www.mail-archive.com/pdfbox-dev@incubator.apache.org/msg00932.html
JAI Image确实有效,加入后还可以把图片格式导出为tiff,但是会导致导出图片的效率很低,在开发机上大约3-5秒导出一副tiff图片,还算可以接受的范围.
//***************************************************
又发现两个问题:
1 如果图片是旋转的,会导致图片无法显示。解决方法,修改源码,处理图片时有两个地方处理了旋转图片,方法不同,但是都有问题。
2 嵌入字体时,导出为图片显示乱码,以前是导出为文字时Identity-H乱码,但是嵌入字体还OK,1.1.0后解决了,但是导出图片又出现问题,真是麻烦啊,看看到处的TODO,让人头皮发麻,这就是开源项目的无奈啊。解决,中文嵌入式字体加载存在问题。
//***************************************************
再次发现一个问题
嵌入文字中的图片位置不对(补漏洞补得好辛苦啊)。解决,是修改旋转图片代码时改错的,注意PDF的坐标系是第一象限,而不是一搬图形坐标系的第四象限。
另外发现旋转图片后老是蒙上一层粉色,很郁闷。
//***************************************************
部署到64位的2007服务器上面发现读取的字体居然和32位xp的不一样,而且仿宋体居然无法读取,只好换为宋体。
评论
将PDF文档第一页生产一张缩略图
使用了pdf-renderer
https://pdf-renderer.dev.java.net/
比较好用 但是有时会报错 生成的图片只有上面一半
发表评论
-
Image Filter on Java
2016-08-25 15:24 325Image Filter on Java: http:// ... -
SMB protocol in Java
2016-08-24 16:19 353http://www.du52.com/text.php?i ... -
Image Process in Java
2016-07-29 17:46 0http://www.javaworld.com/artic ... -
Source Tree - ssl certificate problem unable to get local issuer certificate
2016-05-23 14:23 1265Meet error while iput url htt ... -
[Trans]java实现RSA加密 .
2015-03-03 10:22 758http://blog.csdn.net/wxyfighti ... -
"algid parse error, not a sequence" on initialize private key of RSA
2015-03-02 14:52 979You get this error because yo ... -
Verify Signature(iText)
2015-03-02 10:54 568http://www.berthou.com/us/2009 ... -
Sample of iText
2015-01-26 17:59 637http://rensanning.iteye.com/ ... -
PDF Password
2015-01-26 16:24 648In Acrobat if the PDF is set ... -
iText - Chinese Font
2015-01-26 15:39 1657iText中输出中文,有三种方式: 1、使用iTextAs ... -
iText Relative jar
2015-01-26 15:39 743链接 说明 iT ... -
[trans] Integrate Tomcate with Appach
2013-03-28 12:07 820http://www.ibm.com/developerw ... -
SSH+mysql中文乱码问题
2012-03-03 21:56 1147网上讨论上述问题的有很多,这次其实我项目的配置都对,但是con ... -
MyEclipse8.5 for Mac installation log
2012-02-28 15:15 2322重操旧业了啊 //****************** ... -
mysql odbc不认192.168.1.22
2011-07-14 15:45 1594今天用power designer反向mysql数据库,发现m ... -
[trans]修改webRoot目录
2011-07-13 15:48 1615已经存在的项目,必须删除.setting目录并重新配置,测 ... -
[trans]在CentOS 5上安装FFMPEG
2011-07-13 15:34 977接手一个前期的Web项目,当时是用MyEclipse建立的,用 ... -
调用Runtime.getRuntime().exec后等待命令处理完毕的问题
2011-07-06 11:36 1808try{ String command = ... -
[转]Runtime.getRuntime().exec执行阻塞问题解决
2011-06-28 15:11 2743上篇博文中CallMaxentThreadPoolTask ... -
tomcat for mac start fail
2011-06-03 17:52 1157在执行./startup.sh,或者./shutdown. ...
相关推荐
java用pdfbox转pdf为图片文件时,如果pdf有中文,则会出现乱码(windows下正常,linux下乱码),改用icepdf后问题解决,而且能够轻松设置欲转换成图片的格式和大小.icepdf对中文支付非常强大,以下是实例代码,可以...
1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 3.加密/解密PDF文档。 4.向已有PDF文档中追加内容。 5.可以从PDF文档生成一张图片。 6.可以与Jakarta Lucene搜索引擎的整合。 这个小...
"java用pdfbox转pdf为图片"的过程与POI类似,但涉及到的是PDF文档。PDFBox提供了丰富的API来读取和操作PDF文件。 1. 引入PDFBox库:在项目中引入`pdfbox`, `fontbox`和`pdfbox-tools`等相关依赖。 2. 打开PDF文件...
在这个特定的场景中,PDFBox被用来将PDF文件转换为图片,这对于报表开发或者需要将PDF内容展示在其他非PDF格式的应用中非常有用。 在描述中提到的问题是,在尝试使用ImageIO来直接将PDF转换为图片时,结果可能不...
4. 保存得到的`BufferedImage`对象为图片文件,如JPEG或PNG。 示例代码可能类似: ```java PDDocument document = PDDocument.load(new File("input.pdf")); PDFRenderer renderer = new PDFRenderer(document); ...
在这个特定的场景中,我们关注的是使用PDFBox将PDF文档转换为Word文档的功能。 PDF到Word的转换是一个常见的需求,因为尽管PDF格式在保持文档样式和布局方面非常出色,但有时用户可能需要在Word中进行编辑或进一步...
在本案例中,我们关注的是如何利用PDFBox将PDF文档转换为图片。这个过程通常在需要进行PDF预览、截图或者在不支持PDF格式的环境中展示内容时非常有用。 PDFBox提供了`org.apache.pdfbox.pdmodel.PDDocument`类来...
在.Net中使用PDFBox需要引用: 1.PDFBox-0.7.3.dlll (8 MB) 2.IKVM.GNU.Classpath (7 MB) 3.IKVM.Runtime.dll (360 kB) 4.FontBox-0.1.0-dev.dll 使用方法: private static string parseUsingPDFBox(string ...
在提供的jar包中,`PdfToImage`可能是一个示例程序,演示了如何使用PDFbox或IcePdf将PDF转换为图片。通过运行这个程序并根据需要调整代码,你可以轻松地将多页PDF转换为一系列的图片文件。 总结来说,PDFbox和...
在这个场景中,我们将关注如何使用PDFBox解析PDF文档中的图片和文字。 首先,提取PDF中的图片是一项关键任务。PDFBox提供了`PDDocument`类,它是处理整个PDF文档的主要入口点。通过`PDDocument.load()`方法,我们...
Split & Merge – 使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为一个文件。 Fill Forms – 使用PDFBox,您可以在文档中填写表单数据。 Print – 使用PDFBox,您可以使用标准Java打印API打印PDF文件...
在使用PDFBox将PDF转换为图片的过程中,可能会遇到一个问题,即转换后的图片显示的文字不完整或者丢失。这通常是由于PDF文档中使用的某些字体在目标系统(如操作系统或PDFBox运行的环境)中不存在造成的。为了解决这...
pdfbox 提取 pdf 中 文字和图片 并 可转 html 分2个文件,一个专门提取文本,内容可转为html,另一个文件专门用来提取图片,大家可自行整合为一个文件。使用pdfbox最新提取图片的方法。
4. 创建`PDPageable`对象:这是PDFBox提供的一种接口,用于将PDF文档转换为可以打印的页面序列。 ```java PDPageable pageable = document.asPageable(); ``` 5. 实例化`PrinterJob`:使用Java的`PrinterJob`类...
在本场景中,我们关注的是PDFBox的一个特定功能:生成PDF文件的缩略图。这有助于在显示文档列表时提供预览,类似于百度文库中对文档的呈现方式,用户可以通过缩略图快速了解文档内容。 生成PDF缩略图的核心概念是...
PDF转换为图片是一种...综上所述,ITEXT和PDFBOX结合使用,可以在Java环境中方便地将PDF文档转换为图片。这为开发者提供了更多处理PDF文档的灵活性和可能性,但同时也需要根据具体需求选择合适的转换参数和优化策略。
总结来说,Apache PDFBox 是一个强大的 PDF 处理工具,尤其适用于将 PDF 文件转换为图片。然而,处理含有中文字符的 PDF 文件时需要额外的注意事项和资源。在进行文件转换时,根据不同的需求选择合适的库和工具是至...
总结来说,C#中使用PDFBox读取PDF并转换为TXT文件,主要涉及以下步骤: 1. 引入IKVM.NET和PDFBox的Java库。 2. 初始化Java虚拟机。 3. 加载PDF文件并创建`PDDocument`对象。 4. 使用`PDFTextStripper`提取PDF文本。 ...
本文将深入探讨如何使用PDFBox库在Java中解析PDF并读取其内容。 PDFBox是Apache软件基金会的一个开源项目,它为Java开发者提供了一系列API来操作PDF文档,包括读取、创建、编辑以及签署PDF等任务。在本示例中,我们...
在这个特定的压缩包文件中,"PDF2img"是一个基于PDFBox开发的DEMO,它设计用于解决PDF转图片时可能出现的中文乱码问题。 PDFBox是Apache软件基金会的一个开源项目,提供了丰富的API来读取、写入、修改PDF文档。在...