Альбомная печать от HTML

// Define your enumeration like this (in say numbers.h);
ENUM_BEGIN( Numbers )
    ENUM(ONE),
    ENUM(TWO),
    ENUM(FOUR)
ENUM_END( Numbers )

// The macros are defined in a more fundamental .h file (say defs.h);
#define ENUM_BEGIN(typ) enum typ {
#define ENUM(nam) nam
#define ENUM_END(typ) };

// Now in one and only one .c file, redefine the ENUM macros and reinclude
//  the numbers.h file to build a string table
#undef ENUM_BEGIN
#undef ENUM
#undef ENUM_END
#define ENUM_BEGIN(typ) const char * typ ## _name_table [] = {
#define ENUM(nam) #nam
#define ENUM_END(typ) };
#undef NUMBERS_H_INCLUDED   // whatever you need to do to enable reinclusion
#include "numbers.h"

// Now you can do exactly what you want to do, with no retyping, and for any
//  number of enumerated types defined with the ENUM macro family
//  Your code follows;
char num_str[10];
int process_numbers_str(Numbers num) {
  switch(num) {
    case ONE:
    case TWO:
    case THREE:
    {
      strcpy(num_str, Numbers_name_table[num]); // eg TWO -> "TWO"
    } break;
    default:
      return 0; //no match
  return 1;
}

// Sweet no ? After being frustrated by this for years, I finally came up
//  with this solution for my most recent project and plan to reuse the idea
//  forever
231
задан John 7 September 2009 в 23:26
поделиться

7 ответов

В CSS вы можете установить свойство @page, как показано ниже.

@media print{@page {size: landscape}}

@page является частью спецификации CSS 2.1 , однако этот размер не такой, как указано в ответе на вопрос Является ли @Page {size: landscape} устаревшим? :

CSS 2.1 больше не определяет атрибут размера. Текущий рабочий черновик для модуля CSS3 Paged Media не указывает его (но это не стандартным или принятым).

Как указано, вариант размера взят из CSS 3 Draft Specification . Теоретически он может быть установлен как на размер страницы, так и на ориентацию, хотя в моем примере размер опущен.

Поддержка очень смешана с отчетом об ошибке , начатым в firefox , большинство браузеров не поддерживают Это.

Может показаться, что это работает в IE7, но это потому, что IE7 запомнит последний выбор пользователем альбомной или портретной ориентации при предварительном просмотре печати (перезапускается только браузер).

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

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

<style type="text/css" media="print">
    .page
    {
     -webkit-transform: rotate(-90deg); 
     -moz-transform:rotate(-90deg);
     filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
    }
</style>

Последняя альтернатива, которую я нашел, - это создание альбомной версии в PDF . Вы можете указать на это, когда пользователь выбирает печать, он печатает PDF. Однако мне не удалось заставить это работать с автоматической печатью в IE7.

<link media="print" rel="Alternate" href="print.pdf">

В заключение, в некоторых браузерах легко использовать параметр @page size для относительности, однако во многих браузерах нет надежного способа, и это будет зависеть от вашего контента и среды. Возможно, именно поэтому Google Documents создает PDF-файл, когда выбрана печать, а затем позволяет пользователю открыть и распечатать его.

362
ответ дан 23 November 2019 в 03:37
поделиться

Попытайтесь добавить этот свой CSS:

@page {
  size: landscape;
}
12
ответ дан scunliffe 23 November 2019 в 03:37
поделиться

Вы могли бы быть в состоянии использовать CSS 2 @page правило , которое позволяет Вам устанавливать свойство 'размера' к среде .

8
ответ дан Ian Oxley 23 November 2019 в 03:37
поделиться

Можно также использовать нестандартный атрибут css только для IE режим записи

div.page    { 
   writing-mode: tb-rl;
}
5
ответ дан yann.kmm 23 November 2019 в 03:37
поделиться

Можно попробовать следующее:

@page {
    size: auto
}
-1
ответ дан 23 November 2019 в 03:37
поделиться

Однажды я попытался решить эту проблему, но все мои исследования привели меня к элементам управления / плагинам ActiveX. Нет никакой уловки, позволяющей браузерам (по крайней мере, 3 года назад) изменять какие-либо параметры печати (количество копий, размер бумаги).

Я приложил все усилия, чтобы предупредить пользователя о том, что ему нужно выбрать «альбомную», когда появилось диалоговое окно печати браузеров. Я также создал страницу предварительного просмотра, которая работает намного лучше, чем в IE6! В нашем приложении в некоторых отчетах были очень широкие таблицы данных, и предварительный просмотр печати давал понять пользователям, когда таблица выйдет за правый край бумаги (поскольку IE6 также не справлялся с печатью на 2 листах).

И да, люди все еще используют IE6 даже сейчас.

1
ответ дан 23 November 2019 в 03:37
поделиться
<style type="text/css" media="print">
.landscape { 
    width: 100%; 
    height: 100%; 
    margin: 0% 0% 0% 0%; filter: progid:DXImageTransform.Microsoft.BasicImage(Rotation=1); 
} 
</style>

Если вы хотите, чтобы этот стиль применялся к таблице, создайте один тег div с этим классом стиля, добавьте тег table внутри этого тега div и закройте тег div в конце.

Эта таблица будет печататься только в альбомном режиме, а все остальные страницы будут печататься только в портретном режиме. Но проблема в том, что если размер таблицы больше ширины страницы, то мы можем потерять некоторые строки, а иногда и заголовки. Будьте осторожны.

Хорошего дня.

Спасибо, Навин Меттапалли.

1
ответ дан 23 November 2019 в 03:37
поделиться