有没有人有PDF的经验,其图像编码为ccitt。 我使用Xamarin,几乎所有的pdf似乎都有效。但这种编码似乎很难。该应用程序适用于iOS。 页面大小正确但完全空白。
var pageRect = _page.GetBoxRect(CGPDFBox.Media);
pageRect.Size = new CGSize(pageRect.Size.Width, pageRect.Size.Height);
//pageRect.Origin = CGPointZero;
UIGraphics.BeginImageContext(pageRect.Size);
CGContext context = UIGraphics.GetCurrentContext();
//White BG
context.SetFillColor(1.0f, 1.0f, 1.0f, 1.0f);
context.FillRect(pageRect);
context.SaveState();
// Next 3 lines makes the rotations so that the page look in the right direction
context.TranslateCTM(0.0f, pageRect.Size.Height);
context.ScaleCTM(1.0f, -1.0f);
CGAffineTransform transform = _page.GetDrawingTransform(CGPDFBox.Media, pageRect, 0, true);
context.ConcatCTM(transform);
context.DrawPDFPage(_page);
context.RestoreState();
UIImage img = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return img;
_page是CGPDFPage
对象。
或者有没有人有一个从PDF文件中获取图片的片段? DrawPDFPage是我认为无法处理这个pdf的问题。 swift或c中的片段都没问题
更新
我默认使用我的应用程序CATiledLayer
。这将在部分(平铺)中呈现pdf,因此大的pdf将显示部件而不是等待很长时间。
我发现当设置编码时,上面的代码将起作用,因为它首先渲染完整的pdf,然后在屏幕上显示。
在这种情况下,CATiledLayer无效,并显示空/空白页面。 我现在的搜索是查找CGPDFDocument或CGPDFPage将返回元数据的方式,以便我能够查看编码。 有人已经体验过吗?
答案 0 :(得分:0)
经过长时间的调试,我找到了解决方案。 ConcatCTM中已经完成了CTM 我到底不知道什么,这是我的结果:
// fill with white background
context.SetFillColor(1f, 1f, 1f, 1f);
context.FillRect(Bounds);
context.SaveState();
var pageRect = _page.GetBoxRect(CGPDFBox.Media);
context.TranslateCTM(0, Bounds.Height);
context.ScaleCTM(1, -1);
//get the affine transform that defines where the PDF is drawn
var affineTransform = _page.GetDrawingTransform(CGPDFBox.Media, layer.Bounds, 0, true);
//concatenate the pdf transform with the CTM for display in the view
context.ConcatCTM(affineTransform);
context.DrawPDFPage(_page);
context.RestoreState();