使用pdftk合并多个pdf正在运行良好.但是,为每个pdf合并制作书签的简单方法是什么?
我没有在pdftk文档中看到任何关于此的内容,因此我认为pdftk不可能.
我们合并的所有文件都是1页,所以想知道之后是否还有其他可以添加书签的实用程序?
或者另一个基于linux的pdf实用程序,允许在为每个单独的pdf指定书签时进行合并.
所以,我使用的是Matthew Ephraim的GhostscriptSharp,它是我ASP.Net MVC项目中非托管Win32 Ghostscript DLL的简单C#包装器.一些背景:
我试图做的是让用户上传PDF,然后将该文档转换为图像,然后我可以保存到我选择的任何目录中(以及做一些其他OOP以将新图像绑定到我的网站) .
我决定使用Ephraim先生的包装类(GhostscriptSharp)因为它很简单易用,它让我可以相对干净地访问DLL的API.
为了测试它,我创建了一个虚拟的C#控制台应用程序,以确保我可以加载DLL,访问它,将PDF文件交给本地磁盘,然后让它将JPG写入同一本地磁盘.经过一些学习经历,我获得了成功.我会把它交给C:\ INPUT.pdf,它会递给我C:\ OUTPUT.jpg.
但是,在将我在控制台应用程序中使用的GhostScriptSharp代码集成到我的ASP.NET MVC项目到我用P/invoke调用DLL的位置之后,Ghostscript返回了int/error代码-100
,这是致命的错误(E_Fatal
在GhostScript源代码中调用).我通过HTML表单上传的文件得到了相同的结果,如果我把它与我在工作控制台应用程序中使用的完全相同的硬编码路径.
作为参考,抛出异常的行在GhostScriptSharp.cs中是93-97(在CallApi
函数中):
int result = InitAPI(gsInstancePtr, args.Length, args);
if (result < 0) {
throw new ExternalException("Ghostscript conversion error", result);
}
Run Code Online (Sandbox Code Playgroud)
显然,抛出异常,因为result
是-100
.
当调用InitAPI时,实例ptr是有效的int
(虽然我不知道GS的实例是否正确),args的长度为20(是string[]
)有效的GhostScript选项(包括正确转义的路径)到我的输入和输出文件).
长话短说,我做错了什么?错误代码-100
似乎是一个全能,因为没有文档说明这里可能出错的地方.
非常感谢任何帮助,谢谢你提前.
我的项目给出错误..
*无法在DLL"gsdll32.dll"中找到名为"gsapi_new_instance"的入口点.*
尝试使用Ghost-script Interpreter dll'gsdll32.dll'将.pdf转换为图像格式时
即使我尝试将这个dll复制到所有想要的地方,就像在许多论坛中所说的那样
Win\System32或在项目的目录..错误保持不变.. :(
我使用了Ghost-script给出的PDFConvert.cs类,并在我的转换按钮上编写了以下代码:
private void btnConvert_Click(object sender, RoutedEventArgs e)
{
//First We Check whether the Dll is present
if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "\\gsdll32.dll"))
{
MessageBox.Show("The library 'gsdll32.dll' required to run this program is not present! download GhostScript and copy \"gsdll32.dll\" to this program directory");
return;
}
if (string.IsNullOrEmpty(txtSingleFile.Text))
{
MessageBox.Show("Enter the File name");
txtSingleFile.Focus();
return;
}
else if (!File.Exists(txtSingleFile.Text))
{
MessageBox.Show("The File Does not exists");
txtSingleFile.Focus();
}
else
ConvertPdfToImage(txtSingleFile.Text);
}
Run Code Online (Sandbox Code Playgroud)
和我的ConvertPdfToImage方法如下:
//The Ghost-Script Class Object …
Run Code Online (Sandbox Code Playgroud) 我确实看到了“ 使用GhostScript从PDF转换为图像。不必创建图像文件 ”,但是只有(某种)回答了我一半的问题。是否可以使用GhostScriptSharp(或常规的GhostScript dll)将MemoryStream中的pdf转换为MemoryStream中的jpg?我说的是使用iTextSharp动态填充pdf形式,我已经将其定向到MemoryStream以保存到数据库或流式传输到http响应,并且我真的很想避免保存到文件(以及随后的清理)中能够。
我引用的答案中的唯一答案声称,必须执行GhostScript dll才能完成后一部分,但是很明显,我需要做大量的工作才能弄清楚这意味着什么。是否有人拥有可以在我的旅途中为我提供帮助的良好资源?