PDF Просмотреть printWithInfo:autoRotate: не удается

Я пытаюсь напечатать PDFDocument, который я строю из серии изображений. В случае, если это имеет значение, я делаю все это из плагина Mozilla.

Я создаю PDFDocument и помещаю его в PDFView, затем вызываю

[printView printWithInfo: [NSPrintInfo sharedPrintInfo] autoRotate: YES];

Откроется диалоговое окно печати (как отдельное окно вместо панели. Я предполагаю, что это происходит из окна Mozilla, поэтому я не слишком беспокоился об этом. Диалог показывает мой документ, и я могу просматривать его правильно и все выглядит хорошо.

Однако, когда я нажимаю "Печать", выпадающий список "Макет" и т. Д. Становится пустым, а представление под ним становится пустым. Окно не исчезает, а документ не печатается. Нажатие кнопки "Отмена" делает то же самое. Единственное, что я могу сделать, это принудительно бросить Мозиллу.

Я основал программу на PDFKitLinker2 с сайта Apple, и эта программа работает. Но я не вижу каких-либо существенных различий между ним и моей версией.

Любые предложения о том, где искать?

Благодарю.

РЕДАКТИРОВАТЬ: Да, я знаю, что это в значительной степени точная копия Печать закадровых PDFViews, но это никогда не получал достаточного ответа... (И я не заметил это до сих пор...)

2 ответа

Решение

Похоже, у вас есть проблема с управлением памятью здесь. Вы проверили журнал консоли, чтобы увидеть, есть ли исключение? Как вы создаете свой PDFView?

Но почему бы не сделать это так, как это делает WebKit?

В частности, объявить категорию на PDFDocument

@interface PDFDocument (PDFSecretsIKnowViaWebKit)
- (NSPrintOperation *)getPrintOperationForPrintInfo:(NSPrintInfo *)printInfo autoRotate:(BOOL)doRotate;
@end

Затем, когда вы хотите распечатать PDFDocument просто получить NSPrintOperation от этого и запустить его.

NSPrintOperation *op = [myPDFDoc getPrintOperationForPrintInfo:info autoRotate:YES];
[op runOperation];
// [op runOperationModalForWindow:delegate:didRunSelector:contextInfo:] if you have a window to attach it to

Это работает и для меня. Я проверил, что getPrintOperationForPrintInfo:autoRotate: существует и, кажется, работает правильно на 10.4, 10.5 и 10.6.

Другие вопросы по тегам