我已经在标准WPF控件中实现了一个报表,并且还实现了一个DocumentPaginator来获取这些控件并将它们转换为一个文档进行打印.
我还实现了一些代码,它们使用文档分页器将页面呈现为图像,并使用PDFSharp将它们写入PDF ,但是这不允许复制和粘贴,图像质量也有问题.
我已经尝试过使用GhostXPS实用程序并考虑通过保存到XPS文档然后使用GhostXPS将其转换为PDF来使用它,这很有希望,但是当前版本包含一个错误,该错误会从生成的PDF中复制数据无用...
所以我想我会在这里尝试找到一种有效的方法来做到这一点,有人可以建议一个好的方法来获取DocumentPaginator并直接将其保存为PDF,具有复制/粘贴功能或从XPS文档转换它到具有此功能的PDF?
谢谢,亚历克斯.
编辑 - PDFSharp修复:这里要求的是我为编译PDFSharp 1.31 XPS转换器的修复程序所做的工作:
1)我从这里下载了源代码:
2)我按照这篇文章中的说明:
XpsParser.ImageBrush.cs (ln 22, added): brush.Opacity = 1;
PdfContentWriter.cs (ln 526, changed): if (opacity <= 1)
Run Code Online (Sandbox Code Playgroud)
3)然后只需编译源代码,首先打开'PdfSharp-WPF.csproj'并构建它,然后打开'PdfSharp.Xps.csproj'并构建它,相关的库是'PdfSharp-WPF.dll'和'PdfSharp.Xps.dll'
注意,在尝试构建源代码时,您可能会收到一些错误,具体取决于您所针对的.NET版本,如果您只是阅读错误消息,这些错误很容易修复.
编辑(2):NJones创建了一篇博文,其中详细介绍了PdfSharp修复:在WPF中输出为PDF
你好,我最近开始在一个基于JQuery/JQueryUI的ASP .Net网站上工作.这个想法是只有一个页面,并通过对话框和ajax加载其余的内容,等等.
问题是当同时在对话框中打开同一模型的创建和编辑表单时,某些JQueryUI小部件(如DatePicker停止作为表单)会导致DOM在两个字段中都存在重复的ID .
所以我尝试在控制器上使用此代码:
ViewData.TemplateInfo.HtmlFieldPrefix = "Create"; // or Edit etc
Run Code Online (Sandbox Code Playgroud)
这有助于修复DatePicker问题,但这些字段在发回控制器时不再映射到模型.
有谁知道如何解决这一问题?
我试图从DOM中删除一个元素,如果它不包含任何元素.
这是我尝试过的:
var numChildren = 0;
$("#messages").children().each(function () {
numChildren += 1;
});
if (numChildren <= 0) {
$("#messages").slideUp("normal", function () { $(this).remove(); });
}
Run Code Online (Sandbox Code Playgroud) 我最近开始使用WPF和MVVM框架,我想做的一件事就是有一个类型安全的实现,ICommand所以我不必抛出所有的命令参数.
有谁知道这样做的方法?
我试图通过反射对类的接口执行查询,但是方法Type.GetInterfaces()也返回所有继承的接口.
等等
public class Test : ITest { }
public interface ITest : ITesting { }
Run Code Online (Sandbox Code Playgroud)
代码
typeof(Test).GetInterfaces();
Run Code Online (Sandbox Code Playgroud)
将返回一个Type[]包含both ITest和的地方ITesting,在我想要的地方ITest,是否有另一种允许你指定继承的方法?
谢谢,亚历克斯.
编辑:从下面的答案我收集了这个,
Type t;
t.GetInterfaces().Where(i => !t.GetInterfaces().Any(i2 => i2.GetInterfaces().Contains(i)));
Run Code Online (Sandbox Code Playgroud)
以上似乎有效,如果没有,请在评论中纠正我
最近我遇到了一个singelton类的问题,这个类很懒,初始化一个字典,其中第二个线程会在实际填充之前尝试使用它.所以我通过Lazy<T>类实现了变量初始化.
这是我的代码:
private static Dictionary<string, string> GroupDefaults
{
get { return mGroupDefaults.Value; }
}
private static Lazy<Dictionary<string, string>> mGroupDefaults =
new Lazy<Dictionary<string,string>>(delegate
{
Dictionary<string, string> defaults = new Dictionary<string, string>();
foreach (KeyValuePair<string, UnitGroup> groupDef in Groups)
defaults.Add(groupDef.Key, groupDef.Value.First().Key);
return defaults;
});
Run Code Online (Sandbox Code Playgroud)
这解决了这个问题,现在我正在考虑将这个作为我的常规做法,Lazy<T>在我做懒惰初始化的任何地方使用该类,以避免任何可能的线程问题.所以基本上我想知道这是不是很好/普遍的做法?或者它会对性能有什么影响?
我最近开始研究一个项目,该项目基本上是FORTRAN控制台应用程序的GUI,它在数据集上运行一系列模拟.
我想要做的是能够修改这个FORTRAN代码并将其编译为.dll,以便我可以直接通过DLL导入类型将数据传递给它.
所以我想知道,你能在Visual Studio 2010中设置一个FORTRAN项目吗?如能够编译和调试代码?
直接调用编译的FORTRAN .dll文件是否有任何负面影响?如有限的参数数据类型/返回数据类型?
谢谢,亚历克斯.
我想知道你是如何从一个框架中删除当前内容并使它不显示任何东西?另外我想知道你应该如何删除框架中的所有历史记录?
我写了以下查询:
SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL
FROM PURCHASE GROUP BY CLIENTNO) TOTALS
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO AND ROWNUM <= 1
ORDER BY TOTALS.TOTAL DESC;
Run Code Online (Sandbox Code Playgroud)
但是它给了我错误的答案,但是如果我删除了该ROWNUM <= 1子句,那么正确的答案就在结果集的顶部.
那么我可以在此查询中更改哪些内容以使其生成正确的答案?
谢谢,亚历克斯.
编辑:忘了说我只希望查询返回结果集中的第一个结果.
尝试创建两个发出的委托字典,以便在动态获取/设置属性值时提高性能.
码:
Properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead && !p.GetIndexParameters().Any())
.AsEnumerable();
PropertyGetters = Properties.ToDictionary(p => p.Name, p => (Func<object, object>)Delegate.CreateDelegate(typeof(Func<object, object>), p.GetGetMethod()));
PropertySetters = Properties.Where(p => p.GetSetMethod() != null)
.ToDictionary(p => p.Name, p => (Action<object, object>)Delegate.CreateDelegate(typeof(Action<object, object>), p.GetSetMethod()));
Run Code Online (Sandbox Code Playgroud)
但是我得到以下异常:
无法绑定到目标方法,因为其签名或安全透明性与委托类型的签名或安全透明性不兼容.
从我所看到的,这将由静态/索引/值类型属性引起,该Properties集合不包含静态或索引属性,但我确实需要它来处理值类型属性,如int和double.
如何在保持代码抽象和避免泛型的同时创建我需要的getter/setter?