我尝试使用ImageResizer生成.ai文件(Adobe Illustrator)的缩略图。由于官方Adobe Acrobat Reader实际上可以打开这些文件,我认为PdfiumRenderer也可以这样做。
事实上,我已经通过将.ai文件重命名为.pdf进行了测试,缩略图看起来很好。显然,没有重命名它不起作用,因为没有为该文件扩展名注册插件。以这种方式重命名客户提供的文件似乎也不是一个好的解决方案。
我尝试编写一个继承自PdfiumRenderer的最小自定义插件,但将.ai文件扩展名添加到支持的文件类型列表中。然后,ImageResizer将捕获.ai请求,但显示错误。
const char ca[] = {'h','e','l','l','o', '\0'};

如果对自定义插件有更多经验的人或者Imazen的某些人可以帮助我,我将不胜感激。
答案 0 :(得分:1)
好吧,我终于开始工作了,我的项目现在支持PDF和AI缩略图,包括支持空白修剪,天蓝色存储,磁盘缓存等等。
Nathanael没有直接提供解决方案,但指出了正确的方向(谢谢!)。 DecodeStream方法提供了一个可选的路径字符串,显然,如果该路径没有以.pdf结尾,那么PdfiumRenderer就会吓坏。这里的技巧是隐藏此路径并传递null。
我确实需要编写比以前更多的代码,因为在继承PdfiumRendererPlugin时无法覆盖DecodeStream方法。这是完整的代码:
public class IllustratorPlugin : BuilderExtension, IPlugin, IFileExtensionPlugin, IIssueProvider, IQuerystringPlugin {
private readonly PdfiumRendererPlugin BasePlugin;
public IllustratorPlugin() : base() {
BasePlugin = new PdfiumRendererPlugin();
}
public IEnumerable<IIssue> GetIssues()
=> BasePlugin.GetIssues();
public IEnumerable<string> GetSupportedFileExtensions()
=> new string[] { ".ai" };
public IEnumerable<string> GetSupportedQuerystringKeys()
=> BasePlugin.GetSupportedQuerystringKeys();
public IPlugin Install(ImageResizer.Configuration.Config c) {
BasePlugin.Install(c);
c.Plugins.add_plugin(this);
return this;
}
public bool Uninstall(ImageResizer.Configuration.Config c) {
c.Plugins.remove_plugin(this);
return BasePlugin.Uninstall(c);
}
public int MaxHeight {
get => BasePlugin.MaxHeight;
set => BasePlugin.MaxHeight = value;
}
public int MaxWidth {
get => BasePlugin.MaxWidth;
set => BasePlugin.MaxWidth = value;
}
public int DefaultHeight {
get => BasePlugin.DefaultHeight;
set => BasePlugin.DefaultHeight = value;
}
public int DefaultWidth {
get => BasePlugin.DefaultWidth;
set => BasePlugin.DefaultWidth = value;
}
public override Bitmap DecodeStream(Stream s, ResizeSettings settings, string optionalPath)
=> BasePlugin.DecodeStream(s, settings, null);
}
在global.asax中,我刚添加了这一行:
new IllustratorPlugin().Install(ImageResizer.Configuration.Config.Current);
然后可以从web.config中删除PdfiumRenderer插件。