Java 如何在iText中从pdf的第一页创建图像
我想从PDF的第一页创建图像。我正在java中使用iText。您能建议我如何将pdf的第一页提取为图像吗Java 如何在iText中从pdf的第一页创建图像,java,android,pdf,itext,Java,Android,Pdf,Itext,我想从PDF的第一页创建图像。我正在java中使用iText。您能建议我如何将pdf的第一页提取为图像吗 Document document = new Document(); PdfWriter writer = PdfWriter.getInstance( document, new FileOutputStream(RESULT)); document.open(); File extStore = En
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(
document, new FileOutputStream(RESULT));
document.open();
File extStore = Environment.getExternalStorageDirectory();
String path=extStore.getPath()+"/FirstPdf.pdf";
PdfReader reader = new PdfReader(path);
int n = reader.getNumberOfPages();
PdfImportedPage page;
for (int i = 1; i <= n; i++) {
page = writer.getImportedPage(reader, i);
// Image.getInstance(page) ;
}
document.close();
Document Document=新文档();
PdfWriter writer=PdfWriter.getInstance(
文档,新文件输出流(结果));
document.open();
文件extStore=Environment.getExternalStorageDirectory();
字符串路径=extStore.getPath()+“/FirstPdf.pdf”;
PdfReader reader=新PdfReader(路径);
int n=reader.getNumberOfPages();
PDF导入页面;
for(int i=1;iiText不能用于此目的
jar文件在zip中
下载该库PdfViewer.jar并尝试以下代码:
byte[] bytes;
try {
File file = new File("/storage/extSdCard/Test.pdf");
FileInputStream is = new FileInputStream(file);
// Get the size of the file
long length = file.length();
bytes = new byte[(int) length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
ByteBuffer buffer = ByteBuffer.NEW(bytes);
String data = Base64.encodeToString(bytes, Base64.DEFAULT);
PDFFile pdf_file = new PDFFile(buffer);
PDFPage page = pdf_file.getPage(2, true);
RectF rect = new RectF(0, 0, (int) page.getBBox().width(),
(int) page.getBBox().height());
Bitmap image = page.getImage((int)rect.width(), (int)rect.height(), rect);
FileOutputStream os = new FileOutputStream("/storage/extSdCard/pdf.jpg");
image.compress(Bitmap.CompressFormat.JPEG, 80, os);
//((ImageView) findViewById(R.id.testView)).setImageBitmap(image);
} catch (Exception e) {
e.printStackTrace();
}
byte[]字节;
试一试{
File File=新文件(“/storage/extSdCard/Test.pdf”);
FileInputStream is=新的FileInputStream(文件);
//获取文件的大小
long length=file.length();
字节=新字节[(int)长度];
整数偏移=0;
int numRead=0;
而(偏移量=0){
偏移量+=numRead;
}
ByteBuffer缓冲区=ByteBuffer.NEW(字节);
字符串数据=Base64.encodeToString(字节,Base64.DEFAULT);
PDFFile pdf_file=新的PDFFile(缓冲区);
PDFPage page=pdf_file.getPage(2,true);
RectF rect=new RectF(0,0,(int)page.getBBox().width(),
(int)page.getBBox().height());
位图图像=page.getImage((int)rect.width(),(int)rect.height(),rect);
FileOutputStream os=新的FileOutputStream(“/storage/extSdCard/pdf.jpg”);
image.compress(Bitmap.CompressFormat.JPEG,80,操作系统);
//((ImageView)findViewById(R.id.testView)).setImageBitmap(图像);
}捕获(例外e){
e、 printStackTrace();
}
你可以改变rect,让它提取你想要的pdf的任何部分,等等,非常好。在找到解决方案之前,我花了大约16个小时的时间把头撞在墙上。我真的不确定没有swing awt库是否可行。很抱歉,存储是硬编码的,但这是我当时最不关心的问题。我结束了开始了解如何完成问题最初提出的问题
您需要iTextG库(iTextG-5.5.3.jar)、scpkix-jdk15on.1.47.0.1.jar和scprov-jdk15on-1.47.0.2.jar
您想从何处调用它:
public static final String RESULT = "/storage/sdcard0/dirAtExtStorage/Img%s.%s";
public void extractImages(String filename)
throws IOException, DocumentException {
PdfReader reader = new PdfReader(filename);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
MyImageRenderListener listener = new MyImageRenderListener(RESULT);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
parser.processContent(i, listener);
}
}
尽情享受吧iText不是这样做的正确工具,因为它不是PDF渲染器。你能告诉我应该遵循什么程序来实现我的目标吗?寻找一个在android上工作并允许你导出缩略图的PDF渲染器。我尝试过使用PDFRenderer库。但我有一个非常有趣的错误。我无法解决它。
public class MyImageRenderListener implements RenderListener{
private String path;
public MyImageRenderListener(String path) {
this.path = path;
}
@Override
public void beginTextBlock() {
// TODO Auto-generated method stub
}
@Override
public void endTextBlock() {
// TODO Auto-generated method stub
}
public void renderImage(ImageRenderInfo renderInfo) {
try {
System.out.print("renderImage");
String filename;
FileOutputStream os;
PdfImageObject image = renderInfo.getImage();
if (image == null) return;
filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType());
os = new FileOutputStream(filename);
os.write(image.getImageAsBytes());
os.flush();
os.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
@Override
public void renderText(TextRenderInfo arg0) {
// TODO Auto-generated method stub
}
}