0
我修改了这个职位的一些代码:PDF页面图像,Apportable BridgeKit
Need help to convert a Pdf page into Bitmap in Android Java
要尝试从PDF获得一个页面,将其转换为一个byte [],并将其传递回Xcode项目被显示。我正在使用Apportables BridgeKit框架来完成这个工作,它编译时没有任何错误。
问题是应用程序一旦加载到设备就崩溃了。
ImageExtractor.java
package com.pdflib;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Log;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import net.sf.andpdf.nio.ByteBuffer;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.RandomAccessFile;
public class ImageExtractor
{
//Globals:
private int ViewSize = 0;
//Load Images:
private byte[] pdfLoadImages()
{
try
{
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/backs.pdf");
RandomAccessFile f = new RandomAccessFile(file, "r");
byte[] data = new byte[(int)f.length()];
f.readFully(data);
//create pdf document object from bytes
ByteBuffer bb = ByteBuffer.NEW(data);
PDFFile pdf = new PDFFile(bb);
//Get the first page from the pdf doc
PDFPage PDFpage = pdf.getPage(1, true);
//create a scaling value according to the WebView Width
final float scale = ViewSize/PDFpage.getWidth() * 0.95f;
//convert the page into a bitmap with a scaling value
Bitmap page = PDFpage.getImage((int)(PDFpage.getWidth() * scale), (int)(PDFpage.getHeight() * scale), null, true, true);
//save the bitmap to a byte array
ByteArrayOutputStream stream = new ByteArrayOutputStream();
page.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
stream.reset();
return byteArray;
}
catch (Exception e)
{
Log.d("error", e.toString());
}
return null;
}
}
MainScene.m
#import "MainScene.h"
#import "CreateTexture.h"
@implementation MainScene
- (void)didLoadFromCCB
{
CGSize size = CGSizeMake(100, 75);
CreateTexture* sprite = [[CreateTexture alloc] initWithBackSize: size];
sprite.positionInPoints = CGPointMake(100, 100);
[self addChild: sprite];
}
@end
CreateTexture.m
#import "CreateTexture.h"
#ifdef ANDROID
#import "PDFBridge.h"
#endif
@implementation CreateTexture
- (instancetype) initWithBackSize: (CGSize) size
{
#ifdef APPORTABLE
PDFBridge *temp = [[PDFBridge alloc] init];
[temp TestBridge];
NSData* tempBytes = temp.imageBytes;
UIImage* image = [[UIImage alloc] initWithData:tempBytes];
CCTexture* texture = [[CCTexture alloc] initWithCGImage: image.CGImage contentScale: image.scale];
self = [super initWithTexture: texture];
#endif
NSAssert (self, @"Initializer failed");
return self;
}
@end
PDFBridge.m
#import "PDFBridge.h"
@implementation PDFBridge
@dynamic imageBytes;
- (void) TestBridge
{
#ifdef APPORTABLE
[PDFBridge registerInstanceMethod:@"pdfLoadImages"
selector:@selector(imageBytes)
returnValue:[NSData className]];
#endif
}
+ (NSString *)className
{
return @"com.pdflib.ImageExtractor";
}
@end