- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 WPF 中遇到过很多打印问题,其中正在打印的项目的特定组合会突然触发打印机输出的光栅化(导致丑陋和巨大的打印机输出,并可能导致打印每页需要 30 秒)。我发现在控件上设置任何级别的不透明度通常会触发此操作。我忘记了它的其他所有功能(我相信使用打开剪裁的 Canvas 也可以做到这一点),但现在我遇到了另一个问题,即带有填充边框的平铺画笔的堆栈面板......等等。 . 现在再次导致这种光栅化。
因此,在我再次四处寻找试图弄清楚是什么触发了什么等之前,我想知道是否有人知道关于哪些特定项目可能触发此事件的权威信息来源?或者也许可以通过某种方式连接到发生这种情况的系统,让我至少尝试弄清楚......
到目前为止,这一直是我在 WPF 工作的几年中最令人沮丧的部分。
更新:我今天发现仅在 Canvas 中包含图像也会导致它被栅格化。不总是,但有时。可能与大小有关,或者可能与裁剪有关,等等。啊。
我经常打印成 PDF 文件,但我发现 adobe acrobat 打印机和其他物理打印机之间的行为几乎相同。
最佳答案
我也一直在为这个问题苦苦挣扎。这周我又开始研究这个问题,并开始编写一个小的测试应用程序来隔离问题。我能够通过一些绘图操作触发光栅化。四个矩形、一个椭圆和一条直线。
static void Main(string[] args)
{
var printers = new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
PrintQueue defaultPrinter = LocalPrintServer.GetDefaultPrintQueue();
PrintQueue printerToUse = printers.FirstOrDefault(p => p.Name.Contains("PDFCreator")) ?? defaultPrinter; // Use PDFCreator if available.
PrintTicket ticket = printerToUse.DefaultPrintTicket;
XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printerToUse);
writer.Write(CreateVisual(), ticket);
}
private static Visual CreateVisual()
{
var visual = new DrawingVisual();
using (DrawingContext dc = visual.RenderOpen())
{
var pen = new Pen(Brushes.Black, 3);
var opacityBrush = new SolidColorBrush { Color = Colors.Violet, Opacity = 0.7 };
dc.PushClip(new RectangleGeometry(new Rect(20, 20, 150, 150)));
dc.DrawLine(pen, new Point(0, 0), new Point(200, 300));
dc.DrawEllipse(new SolidColorBrush(Colors.LightGreen), pen, new Point(50, 80), 50, 70);
dc.DrawRectangle(new SolidColorBrush(Colors.LightBlue), pen, new Rect(10, 100, 100, 100));
dc.DrawRectangle(new SolidColorBrush(Colors.LightPink), pen, new Rect(40, 120, 100, 100));
dc.DrawRectangle(new SolidColorBrush(Colors.LightGray), pen, new Rect(60, 140, 100, 100));
dc.DrawRectangle(opacityBrush, pen, new Rect(80, 160, 100, 100));
}
return visual;
}
完整的测试应用程序可以从here 下载。 (VS 2010 解决方案)。
测试时我正在打印到 PDFCreator ,虚拟 PDF 打印机,可防止大量纸张使用。但是我用真正的物理打印机得到了相同的结果。使用此示例可能很难注意到纸面上的差异,但是,现实世界 情况可能更明显(pic1、pic2)。
结果截图如下: 当您放大 PDF 时,您会看到矩形和椭圆不再是矢量格式并且变得模糊。
这似乎很难定义。我和 boomhauer 有同样的经历,不透明度和裁剪似乎很频繁地触发光栅化。我的例子确实包括了这两个(在尝试触发光栅化时故意使用它们)。并不是说要发生光栅化就需要存在任何这些。
不透明度可能导致光栅化是有道理的,但您认为与该问题无关的其他一些细微变化实际上可以“阻止”光栅化的发生。就像在我的例子 ( screenshot ) 中改变笔的粗细一样。以某种方式消除光栅化条件的其他更改是更改绘图操作的顺序,删除任何操作,当然还有删除不透明度或剪裁。
我发现生成 XPS 文件并从 Microsoft XPS Viewer 打印它实际上会产生无光栅输出,即使使用完全相同的绘图和打印机也是如此。
private static void GenerateXps()
{
var xpsDoc = new XpsDocument("wpf_printing_raster_test.xps", FileAccess.ReadWrite);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
writer.Write(CreateVisual());
xpsDoc.Close();
}
截图 here .
因此,您可以生成一个 XPS och,然后以编程方式指示 Microsoft XPS Viewer 为您打印 XPS,而不是直接从您的代码打印。
这当然有点乱七八糟,不是最佳解决方案。但是如果没有找到修复或真正的解决方案(我自己还没有尝试过),如果有人有一个从 Microsoft XPS 查看器强制打印的好方法,我会很感兴趣。
我也很想知道即使从 Microsoft XPS Viewer 打印时是否有人仍然遇到光栅化打印输出。
从长远来看,我尝试在我的测试应用程序中加载 XPS 文件并打印它 (code)。但这没有用,仍然得到光栅化打印输出。
我认为这不是打印机驱动程序问题。当发生光栅化时,它会出现在所有打印机上,无一异常(exception)。我尝试了 4-5 种不同的打印机,从 100 美元的 HP 1020 到 6000 美元的 Konica Minolta C360 和一些虚拟打印机。
解决方法还表明 Microsoft XPS 查看器 向打印机驱动程序发送的内容与直接 WPF 打印发送的内容不同。
我们真的应该让微软看看这个,它被归档为 bug回到 2009 年,但什么也没有发生。希望重现问题的简洁代码示例会有所帮助。
关于c# - 是什么导致 WPF 打印机输出被栅格化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286665/
我正在尝试使用 Spark 从 Cassandra 读取数据。 DataFrame rdf = sqlContext.read().option("keyspace", "readypulse
这是代码: void i_log_ (int error, const char * file, int line, const char * fmt, ...) { /* Get erro
我必须调试一个严重依赖 Gtk 的程序。问题是由于某些原因,在使用 GtkWindow 对象时开始出现许多运行时警告。问题是,即使 Gtk 提示严重错误,它也不会因这些错误而中止。我没有代码库的更改历
我正在尝试从已有效编译和链接的程序中检索二进制文件。我已经通过 GL_PROGRAM_BINARY_LENGTH 收到了它的长度。该文档说有两个实例可能会发生 GL_INVALID_OPERATION
我有一个托管在 Azure 环境中的服务。我正在使用控制台应用程序使用该服务。这样做时,我得到了异常: "The requested service, 'http://xxxx-d.yyyy.be/S
我有以下代码,它被 SEGV 信号杀死。使用调试器表明它被 main() 中的第一个 sem_init() 杀死。如果我注释掉第一个 sem_init() ,第二个会导致同样的问题。我试图弄清楚是什么
目前我正在编写一个应用程序(目标 iOS 6,启用 ARC),它使用 JSON 进行数据传输,使用核心数据进行持久存储。 JSON 数据由 PHP 脚本通过 json_encode 从 MySQL 数
我对 Xamarin.Forms 还是很陌生。我在出现的主页上有一个非常简单的功能 async public Task BaseAppearing() { if (UserID
这是我的代码的简化版本。 public class MainActivity extends ActionBarActivity { private ArrayList entry = new Arr
我想弄明白为什么我的两个 Java 库很难很好地协同工作。这是场景: 库 1 有一个类 A,其构造函数如下: public A(Object obj) { /* boilerplate */ } 在以
如果网站不需要身份验证,我的代码可以正常工作,如果需要,则在打印“已创建凭据”后会立即出现 EXC_BAD_ACCESS 错误。我不会发布任何内容,并且此代码是直接从文档中复制的 - 知道出了什么问题
我在使用 NSArray 填充 UITableView 时遇到问题。我确信我正在做一些愚蠢的事情,但我无法弄清楚。当我尝试进行简单的计数时,我得到了 EXC_BAD_ACCESS,我知道这是因为我试图
我在 UITableViewCell 上有一个 UITextField,在另一个单元格上有一个按钮。 我单击 UITextField(出现键盘)。 UITextField 调用了以下方法: - (BO
我有一个应用程序出现间歇性崩溃。崩溃日志显示了一个堆栈跟踪,这对我来说很难破译,因此希望其他人看到了这一点并能为我指出正确的方向。 基本上,应用程序在启动时执行反向地理编码请求,以在标签中显示用户的位
我开发了一个 CGImage,当程序使用以下命令将其显示在屏幕上时它工作正常: [output_view.layer performSelectorOnMainThread:@selector(set
我正在使用新的 EncryptedSharedPreferences以谷歌推荐的方式上课: private fun securePrefs(context: Context): SharedPrefe
我有一个中继器,里面有一些控件,其中一个是文本框。我正在尝试使用 jquery 获取文本框,我的代码如下所示: $("#").click(function (event) {}); 但我总是得到 nu
在以下场景中观察到 TTS 初始化错误,太随机了。 已安装 TTS 引擎,存在语音集,并且可以从辅助功能选项中播放示例 tts。 TTS 初始化在之前初始化和播放的同一设备上随机失败。 在不同的设备(
maven pom.xml org.openjdk.jol jol-core 0.10 Java 类: public class MyObjectData { pr
在不担心冲突的情况下,可以使用 MD5 作为哈希值,字符串长度最多为多少? 这可能是通过为特定字符集中的每个可能的字符串生成 MD5 哈希来计算的,长度不断增加,直到哈希第二次出现(冲突)。没有冲突的
我是一名优秀的程序员,十分优秀!