- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将 CGPDFPage(从 CGPDFDocument 中选择)渲染到 UIImage 中以显示在 View 上。
我在 MonoTouch 中有以下代码,它让我走到了那里。
RectangleF PDFRectangle = new RectangleF(0, 0, UIScreen.MainScreen.Bounds.Width, UIScreen.MainScreen.Bounds.Height);
public override void ViewDidLoad ()
{
UIGraphics.BeginImageContext(new SizeF(PDFRectangle.Width, PDFRectangle.Height));
CGContext context = UIGraphics.GetCurrentContext();
context.SaveState();
CGPDFDocument pdfDoc = CGPDFDocument.FromFile("test.pdf");
CGPDFPage pdfPage = pdfDoc.GetPage(1);
context.DrawPDFPage(pdfPage);
UIImage testImage = UIGraphics.GetImageFromCurrentImageContext();
pdfDoc.Dispose();
context.RestoreState();
UIImageView imageView = new UIImageView(testImage);
UIGraphics.EndImageContext();
View.AddSubview(imageView);
}
显示了 CGPDFPage 的一部分,但前后旋转并上下颠倒。我的问题是,如何选择完整的 pdf 页面并将其翻转以正确显示。我看过几个使用 ScaleCTM 和 TranslateCTM 的示例,但似乎无法让它们正常工作。
ObjectiveC 中的任何示例都可以,我会尽我所能获得帮助:)
谢谢
最佳答案
我没有使用过 MonoTouch。但是,在 objective-C 中,您会得到这样的 PDF 页面图像(注意 CTM 转换):
-(UIImage *)getThumbForPage:(int)page_number{
CGFloat width = 60.0;
// Get the page
CGPDFPageRef myPageRef = CGPDFDocumentGetPage(myDocumentRef, page);
// Changed this line for the line above which is a generic line
//CGPDFPageRef page = [self getPage:page_number];
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
CGFloat pdfScale = width/pageRect.size.width;
pageRect.size = CGSizeMake(pageRect.size.width*pdfScale, pageRect.size.height*pdfScale);
pageRect.origin = CGPointZero;
UIGraphicsBeginImageContext(pageRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
// White BG
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,pageRect);
CGContextSaveGState(context);
// ***********
// Next 3 lines makes the rotations so that the page look in the right direction
// ***********
CGContextTranslateCTM(context, 0.0, pageRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, pageRect, 0, true));
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
UIImage *thm = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return thm;
}
关于iphone - 将 CGPDFPage 渲染为 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4639781/
我正在尝试将 CGPDFPage(从 CGPDFDocument 中选择)渲染到 UIImage 中以显示在 View 上。 我在 MonoTouch 中有以下代码,它让我走到了那里。 Rectang
我目前正在开发一个应用程序,我想在 UICollectionView 之上实现一个 PDF 阅读器。 我在每个呈现相应 PDF 页面的单元格上使用自定义 UIView: weak var page:
我有一个多页的 pdf 文档存储在本地存储中。我想从该 pdf 文档中提取任何页面并将其转换为 NSData 以将其附加到“MFMailComposeViewController”。使用以下代码行,我
我遇到了错误,但是我尝试在 Swift 中获取 PDF 页面的媒体框。: if let pdf = CGPDFDocument(pdfURL) { let numberOfPages = pd
我已经使用 MonoTouch 3 周了,一切都很顺利,直到我不得不在我的应用程序中显示 PDF。 使用 Apple 的 Quartz 2D Programming Guide我设法显示了 PDF。
我是一名优秀的程序员,十分优秀!