Страница 1 из 1
Duplex и альбомная ориентация не совместимы ?
Добавлено: 05 сен 2013, 09:03
EmeJIbka
Здравствуйте.
Мне необходимо создать отчёт, который будет печататься на бумаге формата A5 с двух сторон (в портретной ориентации). Принтер с поддержкой дуплекса имеется, но дуплекс работает только с форматом бумаги A4. Поэтому я создал отчёт с двумя страницами A4 в альбомной ориентации и разместил данные в правой половине, в настройках отчёта я установил режим двусторонней печати. Но дуплекс не работает
У меня есть другой отчёт, в котором то же используется двусторонняя печать, но там другой формат бумаги - A4, портретная, и с ним всё в порядке, дуплекс работает. Я провёл эксперимент - поменял ориентацию страниц в работающем отчёте и принтер перестал переворачивать станицу
Я проверил печать из word`а, в нём двусторонняя печать работает не зависимо от ориентации страниц.
Вопрос - Duplex и альбомная ориентация не совместимы или я что то делаю не так ?
Re: Duplex и альбомная ориентация не совместимы ?
Добавлено: 05 сен 2013, 11:12
HighAley
Здравствуйте.
EmeJIbka писал(а):Мне необходимо создать отчёт, который будет печататься на бумаге формата A5 с двух сторон (в портретной ориентации). Принтер с поддержкой дуплекса имеется, но дуплекс работает только с форматом бумаги A4. Поэтому я создал отчёт с двумя страницами A4 в альбомной ориентации и разместил данные в правой половине, в настройках отчёта я установил режим двусторонней печати. Но дуплекс не работает
У меня есть другой отчёт, в котором то же используется двусторонняя печать, но там другой формат бумаги - A4, портретная, и с ним всё в порядке, дуплекс работает. Я провёл эксперимент - поменял ориентацию страниц в работающем отчёте и принтер перестал переворачивать станицу
Я проверил печать из word`а, в нём двусторонняя печать работает не зависимо от ориентации страниц.
Вопрос - Duplex и альбомная ориентация не совместимы или я что то делаю не так ?
Для начала попробуйте установить свойство Duplex(Дуплекс) в Horizontal(Горизонтальный).
Если это не поможет то сожете попробовать задать настройки печати в коде со следующей опцией:
Код: Выделить всё
StiOptions.Print.UsePrinterSettingsEntirely = true;
PrinterSettings printerSettings = new PrinterSettings();
printerSettings.Duplex = .....
.....
report.Print(printerSettings);
Если и это не поможет, то скорее всего проблема на стороне .Net Framework.
Спасибо.
Re: Duplex и альбомная ориентация не совместимы ?
Добавлено: 05 сен 2013, 12:24
EmeJIbka
Код
StiOptions.Print.UsePrinterSettingsEntirely = true;
PrinterSettings printerSettings = new PrinterSettings();
printerSettings.Duplex = .....
.....
report.Print(printerSettings);
никак не помогает, дуплекс не работает. Есть возможность перевернуть содержимое отчёта во время построения, так что бы верхний левый угол переместился в верхний правый ? Что бы можно было задать портретную ориентацию страницы.
Re: Duplex и альбомная ориентация не совместимы ?
Добавлено: 09 сен 2013, 15:23
HighAley
Здравствуйте.
Можем предложить вам следующий код, который используется нашими клиентами для поворота отчёта.
Код: Выделить всё
foreach (StiPage page in report.RenderedPages)
{
report.RenderedPages.GetPage(page);
double pageWidth = page.Width;
double pageHeight = page.Height;
page.DisplayRectangle = new Stimulsoft.Base.Drawing.RectangleD(0, 0, page.DisplayRectangle.Height, page.DisplayRectangle.Width);
if (page.Orientation == StiPageOrientation.Landscape)
{
page.Orientation = StiPageOrientation.Portrait;
}
else
{
page.Orientation = StiPageOrientation.Landscape;
}
System.Collections.Hashtable newComps = new System.Collections.Hashtable();
foreach (StiComponent comp in page.Components)
{
Stimulsoft.Base.Drawing.RectangleD compRect = comp.DisplayRectangle;
Stimulsoft.Base.Drawing.RectangleD newRect = new Stimulsoft.Base.Drawing.RectangleD(
compRect.Y,
pageWidth - compRect.Right,
compRect.Height,
compRect.Width);
comp.DisplayRectangle = newRect;
IStiEnumAngle angleComp = comp as IStiEnumAngle;
if (angleComp != null)
{
StiAngle angle = angleComp.Angle;
if (angle == StiAngle.Angle0) angle = StiAngle.Angle90;
else if (angle == StiAngle.Angle90) angle = StiAngle.Angle180;
else if (angle == StiAngle.Angle180) angle = StiAngle.Angle270;
else if (angle == StiAngle.Angle270) angle = StiAngle.Angle0;
angleComp.Angle = angle;
}
StiText stiText = comp as StiText;
if (stiText != null)
{
stiText.Angle += 90;
if (stiText.Angle >= 360) stiText.Angle -= 360;
}
StiImage image = comp as StiImage;
if (image != null)
{
if (image.ImageRotation == StiImageRotation.None) image.ImageRotation = StiImageRotation.Rotate90CCW;
else if (image.ImageRotation == StiImageRotation.Rotate90CCW) image.ImageRotation = StiImageRotation.Rotate180;
else if (image.ImageRotation == StiImageRotation.Rotate180) image.ImageRotation = StiImageRotation.Rotate90CW;
else if (image.ImageRotation == StiImageRotation.Rotate90CW) image.ImageRotation = StiImageRotation.None;
}
IStiBorder border = comp as IStiBorder;
if (border != null)
{
if (border.Border is Stimulsoft.Base.Drawing.StiAdvancedBorder)
{
Stimulsoft.Base.Drawing.StiAdvancedBorder advBorder = border.Border as Stimulsoft.Base.Drawing.StiAdvancedBorder;
Stimulsoft.Base.Drawing.StiAdvancedBorder newBorder = new Stimulsoft.Base.Drawing.StiAdvancedBorder(
new Stimulsoft.Base.Drawing.StiBorderSide(advBorder.RightSide.Color, advBorder.RightSide.Size, advBorder.RightSide.Style),
new Stimulsoft.Base.Drawing.StiBorderSide(advBorder.LeftSide.Color, advBorder.LeftSide.Size, advBorder.LeftSide.Style),
new Stimulsoft.Base.Drawing.StiBorderSide(advBorder.TopSide.Color, advBorder.TopSide.Size, advBorder.TopSide.Style),
new Stimulsoft.Base.Drawing.StiBorderSide(advBorder.BottomSide.Color, advBorder.BottomSide.Size, advBorder.BottomSide.Style),
advBorder.DropShadow,
advBorder.ShadowSize,
advBorder.ShadowBrush);
border.Border = newBorder;
}
else
{
Stimulsoft.Base.Drawing.StiBorder oldBorder = border.Border;
Stimulsoft.Base.Drawing.StiBorder newBorder = (Stimulsoft.Base.Drawing.StiBorder)oldBorder.Clone();
newBorder.Side = Stimulsoft.Base.Drawing.StiBorderSides.None;
if (oldBorder.IsTopBorderSidePresent) newBorder.Side |= Stimulsoft.Base.Drawing.StiBorderSides.Left;
if (oldBorder.IsBottomBorderSidePresent) newBorder.Side |= Stimulsoft.Base.Drawing.StiBorderSides.Right;
if (oldBorder.IsRightBorderSidePresent) newBorder.Side |= Stimulsoft.Base.Drawing.StiBorderSides.Top;
if (oldBorder.IsLeftBorderSidePresent) newBorder.Side |= Stimulsoft.Base.Drawing.StiBorderSides.Bottom;
border.Border = newBorder;
}
}
if (comp is StiVerticalLinePrimitive)
{
StiHorizontalLinePrimitive horLine = new StiHorizontalLinePrimitive();
horLine.Parent = comp.Parent;
horLine.DisplayRectangle = newRect;
newComps[comp] = horLine;
}
if (comp is StiHorizontalLinePrimitive)
{
StiVerticalLinePrimitive vertLine = new StiVerticalLinePrimitive();
vertLine.Parent = comp.Parent;
vertLine.DisplayRectangle = newRect;
newComps[comp] = vertLine;
}
}
if (newComps.Count > 0)
{
foreach (System.Collections.DictionaryEntry de in newComps)
{
int compIndex = page.Components.IndexOf((StiComponent)de.Key);
page.Components[compIndex] = (StiComponent)de.Value;
}
}
}
Спасибо.
Re: Duplex и альбомная ориентация не совместимы ?
Добавлено: 16 май 2014, 06:33
EmeJIbka
Совершенно случайно обнаружили что дуплекс не работает только там, где установлен драйвер pcl 5. С 6-ой версией pcl, отчеты печатаются как надо
Проверяли на принтере hp laserjet 2055dn
Re: Duplex и альбомная ориентация не совместимы ?
Добавлено: 16 май 2014, 11:03
Леонид
Доброе утро!
Внесу свои 50 центов в картину, т.к. сталкивался с подобным поведением.
Сразу оговорюсь, что сама отчётная система работает идеально в этом плане, никакие повороты-развороты в принципе не нужны при обычных условиях.
Использую такой код:
Код: Выделить всё
stiReport.PrinterSettings.Duplex = (isDouble == "Y") ? System.Drawing.Printing.Duplex.Vertical : System.Drawing.Printing.Duplex.Simplex;
Работает идеально.
Однако, действительно, всё, что связано с принтерами очень и очень индивидуально. К примеру, вышеприведённый код работает на всех наших принтерах, кроме нескольких, и дело тут да, именно в драйвере, но даже после установки последней версии драйвера, на некоторых принтерах это всё равно не работает, т.е., тут ещё видимо связка принтер + драйвер + ОС (XP/Win7/W8), т.к. для печати используются стандартные API Windows, а драйвера разные. Ну и разумеется, необходимо убедиться в том, что принтер вообще поддерживает такую функцию (двусторонняя печать), иначе никакие манипуляции не помогут.
Re: Duplex и альбомная ориентация не совместимы ?
Добавлено: 20 май 2014, 14:11
HighAley
Здравствуйте.
Спасибо, Леонид за дополнение.
Мы периодически сталкиваемся с различными проблемами печати. Зачастую они исходят из драйвера или скорее связки .Net Framework - драйвер.
К сожалению, выяснить причину более конкретно, а тем более решить её не представляется возможным.
Спасибо.