Печатать только
?

Вот версия QUICK с использованием делегата:

добавьте этот код (убедитесь, что вы включили UIPageViewControllerDelegate в свой заголовок или расширение класса и назначили self.pageViewController.delegate = self;):

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers {
   self.pageAnimationFinished = NO;
}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
    self.pageAnimationFinished = YES;
}

, затем проверьте self.pageAnimationFinished и верните нуль, если это == NO.

Дольше Объяснение:

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed

Мы можем использовать этот метод делегата из UIPageViewControllerDelegate знать, когда анимация перелистывает или проскакивает через страницы. Используя это, мы можем реализовать это следующим образом:

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
    pageAnimationFinished = YES;
}

, тогда просто верните nil в свои

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(PageViewController *)viewController

и

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(PageViewController *)viewController

когда

pageAnimationFinished == NO. Обязательно установите pageAnimationFinished на NO, когда вы живете. Лучший способ узнать, когда вы живете, - это использовать противоположность

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed

, а именно:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers

С тех пор я не видел этого предупреждения, и это можно сделать в 1/3 линии, как и другие решения. И намного проще следовать.

393
задан Pikamander2 22 August 2017 в 21:56
поделиться

14 ответов

Вот общее решение, использующее Только CSS , работоспособность которого я убедился.

@media print {
  body * {
    visibility: hidden;
  }
  #section-to-print, #section-to-print * {
    visibility: visible;
  }
  #section-to-print {
    position: absolute;
    left: 0;
    top: 0;
  }
}

Альтернативные подходы не так хороши. Использование display сложно, потому что если какой-либо элемент имеет display: none , то ни один из его потомков также не будет отображаться. Чтобы использовать его, вы должны изменить структуру своей страницы.

Использование видимости работает лучше, поскольку вы можете включить видимость для потомков. Однако невидимые элементы по-прежнему влияют на макет, поэтому я перемещаю section-to-print в верхний левый угол, чтобы он печатал правильно.

725
ответ дан 22 November 2019 в 23:28
поделиться

Если Вы только хотите распечатать это отделение, необходимо использовать инструкцию:

@media print{
    *{display:none;}
    #mydiv{display:block;}
}
1
ответ дан Jason Plank 22 August 2017 в 21:56
поделиться
  • 1
    Договорились. I' ve сделал опцией времени компиляции выполнить правильный код. – Alok Singhal 23 December 2009 в 18:24

Вы могли использовать отдельный стиль CSS, который отключает любое содержание кроме того с идентификатором "printarea".

См. CSS Дизайн: Попытка Распечатать для дальнейшего объяснения и примеров.

1
ответ дан Kosi2801 22 August 2017 в 21:56
поделиться
  • 1
    @Alok: Большое сообщение:).. восемь лет, но это все еще звучит правдоподобно –  23 December 2009 в 18:11

Используйте специальную Таблицу стилей для печати

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

и затем добавьте класс т.е. "noprint" к каждому тегу, который доволен, что Вы не хотите печатать.

В использовании CSS

.noprint {
  display: none;
}
1
ответ дан Xn0vv3r 22 August 2017 в 21:56
поделиться
  • 1
    Здорово! Кроме Вас забыл проверять пару большего количества операторов:) –  23 December 2009 в 18:39

Все ответы до сих пор довольно испорчены - они или включают добавление class="noprint" ко всему или испортят display в #printable.

я думаю, что лучшее решение состояло бы в том, чтобы создать обертку вокруг непечатаемого материала:

<head>
    <style type="text/css">

    #printable { display: none; }

    @media print
    {
        #non-printable { display: none; }
        #printable { display: block; }
    }
    </style>
</head>
<body>
    <div id="non-printable">
        Your normal page contents
    </div>

    <div id="printable">
        Printer version
    </div>
</body>

, Конечно, это не прекрасно, поскольку это вовлекает перемещающиеся вещи в Ваш HTML немного...

118
ответ дан Greg 22 August 2017 в 21:56
поделиться
  • 1
    Doesn' t он говорит: " каковы возможности, что это может не закрыться? " – AraK 23 December 2009 в 18:00

Вы могли использовать таблица стилей печати и использовать CSS для расположения содержания, которое Вы хотели распечатанный? Read эта статья для большего количества указателей.

21
ответ дан Paul Dixon 22 August 2017 в 21:56
поделиться
  • 1
    Если you' ре в компании, которая настаивает на проценте покрытия кода, Вы могли, вероятно, создать универсальный тест метода get/метода set с BeanUtils от свободного городского населения Apache. Просто передайте его класс, получите всех методов get и методы установщика, используйте немного сравнения имени метода для подхождения их. – Chris Kessel 23 March 2009 в 22:15

гм... используйте тип stylsheet для печати..., например:

<link rel="stylesheet" type="text/css" href="print.css" media="print" />

print.css:

div { display: none; }
#yourdiv { display: block; }
6
ответ дан Andreas Niedermair 22 August 2017 в 21:56
поделиться

С CSS 3 Вы могли использовать следующее:

body *:not(#printarea) {
    display: none;
}
2
ответ дан Gumbo 22 August 2017 в 21:56
поделиться
  • 1
    Почему? Мы тестируем механизм сериализации? Если Вы не настроили сериализацию, это было бы тратой усилия. – Robin 23 March 2009 в 17:43

Я взял содержание с помощью JavaScript и создал окно, которое я мог распечатать в земельном участке...

2
ответ дан noesgard 23 August 2017 в 07:56
поделиться
  • 1
    Хорошо, но Вы didn' t дают пример, где необходимо проверить! – AraK 24 December 2009 в 03:50

Я нашел решение.

@media print {
    .print-area {
        background-color: white;
        height: 100%;
        width: auto;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        z-index:1500;
        visibility: visible;
    }
    @page{
        size: portrait;
        margin: 1cm;
    }
/*IF print-area parent element is position:absolute*/
    .ui-dialog,
    .ui-dialog .ui-dialog-content{
        position:unset !important;
        visibility: hidden;
    }
}
0
ответ дан 22 November 2019 в 23:28
поделиться
  1. Give whatever element you want to print the id printMe.

  2. Include this script in your head tag:

    
    
  3. Call the function

    Print
    
8
ответ дан 22 November 2019 в 23:28
поделиться

Метод Сандро отлично работает.

Я настроил его, чтобы разрешить использование нескольких ссылок printMe, в частности, для использования на страницах с вкладками и расширении текста.

function processPrint (printMe) { <- здесь вызывается переменная

var printReadyElem = document.getElementById (printMe); <- удалены кавычки вокруг printMe, чтобы запросить переменную

Print <- передача идентификатора div, который будет напечатан, в функцию, чтобы превратить переменную printMe в идентификатор div. одинарные кавычки необходимы

2
ответ дан 22 November 2019 в 23:28
поделиться

С jQuery это очень просто:

w=window.open();
w.document.write($('.report_left_inner').html());
w.print();
w.close();
107
ответ дан 22 November 2019 в 23:28
поделиться
[

]Это хорошо работает:[

] [
<style type="text/css">
@media print
{
body * { visibility: hidden; }
#printcontent * { visibility: visible; }
#printcontent { position: absolute; top: 40px; left: 30px; }
}
</style>
] [

]Обратите внимание, что это работает только с "видимостью". "видимость" этого не сделает. Протестировано в FF3.[

].
19
ответ дан 22 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: