Если я правильно понял функции печати на iOS - и это большое , если - тогда Print Simulator настроится на US Letter или A4 в зависимости от размеров отправляемого вами сообщения.Таким образом, если вы отправите ему что-то размером A4, он выберет A4, а если вы отправите ему что-то размером с американское письмо, он выберет американское письмо.
Однако, как я обнаружил при реальной печати, это не всегда работало.Чтобы понять это правильно, я обнаружил, что для iOS явно нужно выбрать размер бумаги А4.Это делается в printInteractionController: choosePaper: метод в делегате UIPrintInteractionController (см. Код ниже).Если кто-то там понимает это лучше, пожалуйста, напишите.
В более общем смысле (и немного отошел от вопроса ...), подход, который я выбрал для печати, заключается в том, чтобы иметь настройку приложения для US Letter или A4.Когда приложение запускается впервые, оно проверяет, является ли оно США (путем тестирования [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]) и, если да, выбирает US Letter.В противном случае это А4.Пользователь может изменить это.(Я разрешаю пользователю экспортировать PDF-файлы, так что, скажем, если она британская пользователь, отправляющий PDF-файлы друзьям из США, она может заставить их выглядеть правильно.)
Для печати я сначала создаю PDF-файл формата A4 или US Letter.Пример кода Apple проведет вас через это для размера буквы США.Для формата A4 вам нужно установить размеры PDF около 595,4 x 841,7.(Для работы с другими размерами обратите внимание, что эти числа указаны в точках, где плотность точек равна 72 dpi, т.е. вы берете размер в дюймах и умножаетесь на 72.) Затем я использую setPrintingItem: в UIPrintInteractionController с NSURL для PDF.
Мне показалось, что печатная документация для iOS довольно сложная, поэтому не исключено, что доступен более простой / лучший / более надежный подход к решению A4 / US Letter и т. Д.Но, надеюсь, кое-что из того, что я здесь написал, поможет.
Код делегата
// code in the UIPrintInteractionController delegate
// The [Shared settings] object returns paperWidth and paperHeight depending on the app wide A4 or US Letter setting
- (UIPrintPaper *)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray *)paperList
{
CGSize pageSize = CGSizeMake([[Settings shared] paperWidth], [[Settings shared] paperHeight]);
return [UIPrintPaper bestPaperForPageSize:pageSize withPapersFromArray:paperList];
}
Создание кода PDF
UIGraphicsBeginPDFContextToFile(CGRectMake(0.0, 0.0, [[Settings shared] paperWidth], [[Settings shared] paperHeight]), nil);
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0.0, 0.0, [[Settings shared] paperWidth], [[Settings shared] paperHeight]), nil);
// create the PDF
UIGraphicsEndPDFContext();