您建议使用什么工具检查PDF文件?
使用案例:我正在尝试以编程方式生成PDF文件(使用iText).我在实现某些布局方面遇到了麻烦,但是我的PDF文件的文本按我想要的方式布局(从Word生成).我想逆向工程他们是如何做到的.
PDF Inspector似乎很好,但我正在为Windows寻找一些东西.
我需要做一些基于加密的工作,我发现Bouncy Castle API既可用于C#也可用于JAVA,对于java它有文档,但它没有C#的文档.
任何人都可以提供一些资源,我可以从中获得使用C#使用Bouncy Castle的想法吗?
我写了一个chrome扩展,调用这个connect()函数连接到本地C++程序:
function connect() {
console.log("test1");
//port = chrome.extension.connectNative('com.a.chrome_interface');
port = chrome.runtime.connectNative('com.a.chrome_interface');
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);
console.log("test5");
}
Run Code Online (Sandbox Code Playgroud)
我可以在Console中看到test1,但之后我收到了错误
Uncaught TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
在线
port = chrome.runtime.connectNative('com.a.chrome_interface');
Run Code Online (Sandbox Code Playgroud)
我的扩展清单文件在这里:
{
"name": "CPP_Connect",
"version": "1.0",
"description": "Send data to CPP program",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["contentscript.js"]
}
],
"permissions": ["contextMenus", "tabs", "nativeMessaging", "<all_urls>"],
"manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)
我的com.a.chrome_interface.json看起来像这样:
{
"name": "com.a.chrome_interface",
"description": "Chrome Native Messaging API Example Host",
"path": "com.a.chrome_interface",
"type": "stdio",
"allowed_origins": [
"chrome-extension://abc.../"
]
}
Run Code Online (Sandbox Code Playgroud)
com.a.chrome_interface是一个linux可执行C++文件,它生成一个文件,如果它被调用,则永远不会创建该文件.我确实放了两个文件
/etc/opt/chrome/native-messaging-hosts/
Run Code Online (Sandbox Code Playgroud)
所以我想,我确实正确地注册了我的C++,但我也猜测,如果我注册错了,我应该得到一个不同的错误.如果我使用chrome.extension.connect()脚本运行低谷,错误消息消失,但没有数据到达我的C++程序.
我确实阅读并尝试按照 …
google-chrome google-chrome-extension chrome-native-messaging
我最近实现了一个类:
class TestClass : IDisposable
{
RegistryKey m_key;
public TestClass()
{
m_key = Registry.CurrentUser.OpenSubKey("Software", false);
}
public void Dispose()
{
// m_key.Dispose();
IDisposable disp = m_key;
disp.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我取消注释直接调用Dispose,我会收到错误CS0117("'Microsoft.Win32.RegistryKey'不包含'Dispose'的定义").一些谷歌搜索引导我到这个线程,在那里我了解了发生了什么,所以我现在了解它的机制.在MSDN文档表明,笔者更希望我调用close()代替Dispose()方法,但没有解释原因.
这种模式的目的是什么(我认为我在IO类中也看到了它)?鉴于这是班级作者的故意决定,上面的代码有多糟糕(通过IDisposable接口调用Dispose)?它不会太糟糕 - 毕竟,这是在使用声明中会发生什么,对吧?
[编辑:1]将标题从"非公开"更改为"显式"2)从我的代码中删除了显式实现,意外地从实验中留下了]
我正在开发一个Web应用程序,我们的目标是iPhone和iPod Touch.我熟悉FireFox和IE的调试工具(例如Firebug和IE Developer Toolbar),但我找不到iPod的任何东西.我不期待使用alert我的主要调试工具,特别是当我希望鼠标事件成为主要问题之一时.
是否这真的是艺术的状态?你推荐什么工具?
另外,iPhone上的html布局与在Windows上运行的Safari的布局有多相似?在Mac上?
我有以下方法:
public void Write() {
var tasks = new List<Task>();
while(...) {
var memoryStream = new MemoryStream(...);
var task = _pageBlob.WritePagesAsync(memoryStream, ... );
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
如何正确处置memoryStream,在Task?我需要memoryStream在任务完成时处理对象.
假设我想实现一个过期的缓存,我想在底层存储容器上使它成为通用的.所以我将允许用户告诉我的班级要使用哪种容器类型.但由于我将填充私有类型,我需要它们告诉我一个通用类型.所以我想尝试做这样的事情:
class MyCache<K, V, Container> : IDictionary<K, V>
where Container : // what goes here?
{
private class MyValue
{
public readonly V Value;
public readonly DateTime InsertionTime;
}
private IDictionary<K, MyValue> m_dict = new Container<K, MyValue>(); // a specialization of the generic container
// implement IDictionary<K, V>, checking for value expiration
public bool TryGetValue(K key, out V val)
{
MyValue myval;
if (m_dict.TryGetValue(key, out myval))
{
if (Expired(myval.InsertionTime))
{
m_dict.Remove(key);
}
else
{
val = myval.Value;
return true;
} …Run Code Online (Sandbox Code Playgroud) 我有一个C#Web应用程序(在某些配置中)允许用户输入Windows凭据,然后用于对远程服务进行身份验证.为实现此目的,我们当前调用LogonUser并使用生成的令牌创建WindowsIdentity,然后我们将其模拟.它一直很好,没有真正的问题.
最近我正在阅读有关Web身份验证的内容,并阅读了基本身份验证,IIS使用LsaLogonUser创建模拟上下文.我有点理解这两者之间的区别,听起来我们应该使用LsaLogonUser,但是我讨厌做出一些我不理解的改变.另一方面,在IIS上工作的人比我更了解Windows API.
那么:哪种功能更适合Web应用程序?你会说使用LogonUser是错误的,为什么?是否有情况(网络配置,用户权限等),哪一个会工作,另一个不会?使用LogonUser是否存在任何安全风险?
RegSetValueEx 具有以下P/Invoke签名:
[DllImport("advapi32.dll", SetLastError = true)]
static extern uint RegSetValueEx(
UIntPtr hKey,
[MarshalAs(UnmanagedType.LPStr)]
string lpValueName,
int Reserved,
RegistryValueKind dwType,
IntPtr lpData,
int cbData);
Run Code Online (Sandbox Code Playgroud)
该IntPtr的lpData参数可以一起工作有疼痛感.要传递一个字符串值,我需要调用其中一个Marshall.StringToHGlobal函数,然后在完成后释放它.如果我将lpData参数类型更改为,我的代码可以更简单[MarshalAs(UnmanagedType.LPStr)]String lpData.这似乎工作,我可以想象在幕后,编组代码正在做我要做的事情IntPtr.如果这是合法的,我无法找到任何明确的陈述.任何人都可以提供吗?
[是的,我知道有托管代码与注册表连接.在我的特殊情况下,我不能使用它,即使我可以,我仍然会对一般的答案感兴趣]
c# ×5
bouncycastle ×1
debugging ×1
generics ×1
interface ×1
iphone ×1
ipod-touch ×1
pdf ×1
pinvoke ×1
windows ×1