我正在使用MS报告打印标签(c#/ VS2013)。标签宽8厘米,高4厘米。打印机将其视为纵向(无旋转),但报表查看器将其打印为横向,因为宽度大于高度。打印前特定于打印机的页面方向更改将被忽略(!),因此标签始终以标签方向旋转90°打印。打印机是一种工业热转印打印机。
我不明白为什么页面方向与高度和宽度之间的关系绑定,不能独立设置!我已经尝试在打印前改变方向 - 这导致实验室被打印成几件但没有旋转。
唯一有帮助的是将纸张尺寸更改为8宽度和8.1高度。然后标签打印正确,但这会导致很多空页(标签),并不是一个好的解决方案。
我目前看到的唯一方法是重新设计旋转90°的所有标签,这是相当费力的,所以如果有人有解决这种stange行为的话,我将不胜感激!
答案 0 :(得分:1)
我通过渲染图像并通过PrintDocument对象打印来解决了这个问题。通过这种方式,我可以将横向打印的标签(8厘米宽,4厘米高)纵向发送到打印机。
我确信这可以做得更优雅,但由于时间压力,我现在采用这个解决方案:
String tempDir = Path.GetTempFileName();
File.Delete(tempDir);
Directory.CreateDirectory(tempDir);
tempDir = Utils.addBackslash(tempDir);
ExportToPNG(tempDir);
String imageFile = Utils.FindFirstFile(tempDir, "*.png");
if (imageFile != "")
{
PrintDocument pd = new PrintDocument();
try
{
pd.DefaultPageSettings.PrinterSettings.PrinterName = DB.Instance.getSetting("label.printername");
}
catch
{
// This is just a preset, it may fail without consequences
}
pd.DefaultPageSettings.Landscape = false; // Now I can do it!
pd.PrintPage += (sender, args) =>
{
Image i = Image.FromFile(imageFile);
Point p = new Point(100, 100);
args.Graphics.DrawImage(i, 0, 0, i.Width, i.Height);
};
PrintDialog pdi = new PrintDialog();
pdi.Document = pd;
if (pdi.ShowDialog() == DialogResult.OK)
pd.Print();
pd.Dispose();
}