iOS pdf с изображением в кодировке ccitt - PullRequest
0 голосов
/ 01 мая 2018

У кого-нибудь есть опыт работы с 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 вернет мои метаданные, чтобы я мог просматривать кодировку. Кто-нибудь уже сталкивался с?

1 Ответ

0 голосов
/ 19 ноября 2018

После долгого времени отладки я нашел решение. CTM уже сделан в ConcatCTM Что именно я понятия не имею, таков мой результат:

// 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...