iOS pdf,图片编码为ccitt

时间:2018-05-01 09:53:29

标签: c# ios swift xamarin

有没有人有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无效,并显示空/空白页面。 我现在的搜索是查找CGPDFDocumentCGPDFPage将返回元数据的方式,以便我能够查看编码。 有人已经体验过吗?

1 个答案:

答案 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();