简介:如何减少使用tifs转换为pdf所需的时间itextsharp?
背景:我正在使用C#将一些相当大的tif转换为pdf itextsharp,并且我的性能非常糟糕.tif文件大约是50kb,有些文件最多有150个单独的tif文件(每个文件代表一个页面).对于一个132页的文档(~6500 kb),转换大约需要13分钟.在转换过程中,它运行的单CPU服务器运行在100%,这让我相信该进程是CPU绑定的.输出pdf文件为3.5 MB.我的尺寸很好,但对我来说时间似乎有点高.
码:
private void CombineAndConvertTif(IList<FileInfo> inputFiles, FileInfo outputFile)
{
using (FileStream fs = new FileStream(outputFile.FullName, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
{
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
PdfContentByte cb = writer.DirectContent;
foreach (FileInfo inputFile in inputFiles)
{
using (Bitmap bm = new Bitmap(inputFile.FullName))
{
int total = bm.GetFrameCount(FrameDimension.Page);
for (int k = 0; k < total; ++k)
{
bm.SelectActiveFrame(FrameDimension.Page, k);
//Testing shows that this …Run Code Online (Sandbox Code Playgroud) 我正在使用NHibernate来保存我的域对象.为了简单起见,我将ASP.NET MVC项目用作表示层和服务层.
我想从我的控制器类返回XML中的域对象.在Stack Overflow上阅读了一些帖子后,我收集DTO是可行的方法.但是,我也遇到过有关ViewModel的帖子.
我的问题:数据传输对象和ViewModels是一样的吗?或者ViewModel是DTO的一种子模式?
假设我有一个非默认的应用域名.我想获得对默认应用程序域的引用,并导致在其中创建一个运行一段代码的线程.这可能吗?我能想到这样做的唯一方法是将我的程序集重新加载到Default app域中,并在一个类型的构造函数中有一些逻辑,这些构造函数表明它已经被重新加载以启动这个新线程.这似乎相当复杂.有更直接的方法吗?另一方面,如果有一种方法可以做到这一点,那似乎会绕过.NET的整个安全模型.
我试图在CLI/C++ prog中跟踪托管对象的创建/处置:
::System::Diagnostics::Trace::WriteLine(String::Format(
"Created {0} #{1:X8}",
this->GetType()->Name,
((UInt64)this).ToString()));
Run Code Online (Sandbox Code Playgroud)
哪个失败了
error C2440: 'type cast' : cannot convert from 'MyType ^const ' to 'unsigned __int64'
有没有办法以这种方式跟踪唯一对象ID?谢谢!
我有这个LINQ查询:
// types...
LinkedList<WeightedItem> itemScores = new LinkedList<WeightedItem>();
var result = from i in _ctx.Items
join s in itemScores on i.Id equals s._id
orderby s._score descending
select new ItemSearchResult(i, s._score);
// this fails:
return result.ToList();
Run Code Online (Sandbox Code Playgroud)
哪个生成此错误:
无法创建类型为'System.Collections.Generic.IEnumerable`1'的常量值.
在此上下文中仅支持原始类型(例如Int32,String和Guid').
[编辑]以下代码WeightedItem:
public class WeightedItem
{
public int _id;
public decimal? _score;
public WeightedItem(int id, decimal? score)
{
_id = id;
_score = score;
}
}
Run Code Online (Sandbox Code Playgroud)
你能看出我做错了什么吗?代码编译完美,_ctx.Items和itemScores都包含正确的值.
我首选的bibtex风格文件引用作者的姓名缩写.但是,有各种文本应该以不同的方式引用(例如,Elements Geometrie Algebrique应该始终被引用为[EGA]).我知道如何在bibtex输出的.bbl文件中修改它,但是我必须为每个文件执行此操作.有没有办法从我的.bib文件中执行此操作?
考虑使用VS 2010的ASP.NET MVC 2项目.目标是使用VS的内置Cassini Web服务器在运行/调试时设置"起始URL".
输入URL作为我想要加载的URL,以典型的有效格式controller/action,VS 2010给出了这个例外.

尝试的补救措施:
问题:如何指定MVC 2项目的起始URL?
技术:
解决方案:我在启动选项中使用了错误的字段.需要的是具有相对URL 的" 特定页面 "字段,而不是"起始URL".
我最近决定将连接字符串移动到machine.config,因为这似乎是管理多个环境的最优雅方法.但是,如果需要(或者非开明群众开始抱怨),我仍然希望能够在我的本地web.config中覆盖这些设置.
如何在我的web.config中覆盖machine.config中的设置而不获取a,ConfigurationErrorsException因为该值已经设置?
在我的Ant构建文件中,我正在使用加密属性,我正在读取文本文件.我需要在构建过程中的某种引导目标中解密它.我该怎么做呢?
例如,以下是文件的内容.
myFile.txt:
ENCRYPTED=encryptedtext
Run Code Online (Sandbox Code Playgroud)
build.xml:
<project name="myProject" default="all">
<property file="myFile.txt">
<!--Specify bootstrap target here to perform the decryption task-->
<target name="myTarget">
<!--Use the decrypted property here-->
Run Code Online (Sandbox Code Playgroud)
我得到一种方法是设置目标来执行解密,并将其添加为depends所有必要目标.我不想那样做.我对使过程尽可能干净的替代品感兴趣.这也意味着我已经考虑过" 你为什么不在其他地方执行解密并从那里读取它? "的解决方案,我对它们不感兴趣.
谢谢.
我正在使用Web用户控件(.ascx),它将包含在常规Web表单(.aspx)中,但我需要能够从用户控件中动态地将代码插入到文档的头部.在我的Coldfusion日子里,<cfhtmlhead>可以解决问题.在ASP.NET或类似的黑客中是否存在相同的内容?
c# ×4
.net ×2
asp.net-mvc ×2
ant ×1
appdomain ×1
asp.net ×1
bibtex ×1
build ×1
c++-cli ×1
cassini ×1
dto ×1
itextsharp ×1
join ×1
latex ×1
linq ×1
performance ×1
viewmodel ×1
web-config ×1
xml ×1