C# 将PDF导出为C格式的JPG#
我需要将一页pdf文档保存为网站缩略图的图像 我一直和PDFSharp混在一起,运气不好 我尝试过这个方法:但它所做的只是提取PDF文件中的嵌入图像,这并不是期望的结果 如何做到这一点?有人知道一个好的图书馆可以处理这个问题吗C# 将PDF导出为C格式的JPG#,c#,.net,image,pdf,pdfsharp,C#,.net,Image,Pdf,Pdfsharp,我需要将一页pdf文档保存为网站缩略图的图像 我一直和PDFSharp混在一起,运气不好 我尝试过这个方法:但它所做的只是提取PDF文件中的嵌入图像,这并不是期望的结果 如何做到这一点?有人知道一个好的图书馆可以处理这个问题吗 编辑:请让我知道为什么这是一个如此糟糕的问题。如果有人对此有一个很好的解决方案,它将是许多其他人的一个巨大资源。尤其是谷歌搜索结果是空的。看看Ghostscript。您可以使用它将PDF渲染为图像 (免责声明:我为Atalasoft工作,写了很多PDF技术) 如果在dot
编辑:请让我知道为什么这是一个如此糟糕的问题。如果有人对此有一个很好的解决方案,它将是许多其他人的一个巨大资源。尤其是谷歌搜索结果是空的。看看Ghostscript。您可以使用它将PDF渲染为图像 (免责声明:我为Atalasoft工作,写了很多PDF技术) 如果在dotImage中使用PdfDecoder,这是很简单的:
public void PdfToJpegThumb(Stream srcStream, int pageNo, int maxDimension, Stream dstStream)
{
PdfDecoder decoder = new PdfDecoder();
decoder.Resolution = 96; // reduce default resolution to speed up rendering
// render page
using (AtalaImage pdfimage = decoder.read(srcStream, pageNo, null)) {
Thumbnail tn = new Thumbnail(maxDimension, maxDimension);
// make a thumbnail image
using (AtalaImage tnImage = tn.Create(pdfImage)) {
// save it
tnImage.Save(dstStream, new JpegEncoder(), null);
}
}
}
ABCpdf使用C#将PDF文档导出为JPEG格式。请看:我从网络上的某个地方得到了这个-不记得确切的位置,但它对我有用
我刚刚把它变成了一个很好的函数。
它使用GhostScript API(GSdll32.dll)
imageFormat参数的示例有“jpeg”、“tiff32nc”等。
#region GhostScript API functions
[DllImport("gsdll32.dll", EntryPoint = "gsapi_new_instance")]
private static extern int CreateAPIInstance(out IntPtr pinstance,
IntPtr caller_handle);
[DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")]
private static extern int InitAPI(IntPtr instance, int argc, IntPtr argv);
[DllImport("gsdll32.dll", EntryPoint = "gsapi_exit")]
private static extern int ExitAPI(IntPtr instance);
[DllImport("gsdll32.dll", EntryPoint = "gsapi_delete_instance")]
private static extern void DeleteAPIInstance(IntPtr instance);
#endregion
public bool CreateImage(string inputPath, string outputPath, string imageFormat, int firstPage, int lastPage, int width, int height)
{
bool result = false;
try
{
string[] args = GetArgs(inputPath, outputPath, imageFormat, firstPage, lastPage, width, height);
var argStrHandles = new GCHandle[args.Length];
var argPtrs = new IntPtr[args.Length];
// Create a handle for each of the arguments after
// they've been converted to an ANSI null terminated
// string. Then store the pointers for each of the handles
for (int i = 0; i < args.Length; i++)
{
argStrHandles[i] = GCHandle.Alloc(StringToAnsi(args[i]), GCHandleType.Pinned);
argPtrs[i] = argStrHandles[i].AddrOfPinnedObject();
}
// Get a new handle for the array of argument pointers
var argPtrsHandle = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);
// Get a pointer to an instance of the GhostScript API
// and run the API with the current arguments
IntPtr gsInstancePtr;
CreateAPIInstance(out gsInstancePtr, IntPtr.Zero);
InitAPI(gsInstancePtr, args.Length, argPtrsHandle.AddrOfPinnedObject());
// Cleanup arguments in memory
for (int i = 0; i < argStrHandles.Length; i++)
argStrHandles[i].Free();
argPtrsHandle.Free();
// Clear API
ExitAPI(gsInstancePtr);
DeleteAPIInstance(gsInstancePtr);
result = true;
}
catch(Exception e)
{
throw e;
}
return result;
}
#区域重影脚本API函数
[DllImport(“gsdll32.dll”,EntryPoint=“gsapi\u新实例”)]
私有静态外部int CreateAPIInstance(out IntPtr pinstance,
IntPtr调用程序(U句柄);
[DllImport(“gsdll32.dll”,EntryPoint=“gsapi_init_with_args”)]
私有静态外部intinitapi(IntPtr实例、intargc、IntPtr argv);
[DllImport(“gsdll32.dll”,EntryPoint=“gsapi_exit”)]
私有静态外部intexitapi(IntPtr实例);
[DllImport(“gsdll32.dll”,EntryPoint=“gsapi\u delete\u实例”)]
私有静态外部void DeleteAPIInstance(IntPtr实例);
#端区
public bool CreateImage(字符串输入路径、字符串输出路径、字符串图像格式、int firstPage、int lastPage、int width、int height)
{
布尔结果=假;
尝试
{
字符串[]args=GetArgs(inputPath、outputPath、imageFormat、firstPage、lastPage、width、height);
var argStrHandles=新的GCHandle[args.Length];
var argPtrs=new IntPtr[args.Length];
//为后面的每个参数创建句柄
//它们已被转换为ANSI null终止
//然后存储每个句柄的指针
for(int i=0;i
Ghostscript目前是呈现PDF的事实标准。即使使用GhostScriptSharp,包装也有点棘手
Jason Morse写了一篇文章作为开源软件的插件
如果是asp.net应用程序,则该库允许动态渲染,因此您只需添加查询字符串即可获得jpeg/png版本:
/pdfs/letter.pdf?格式=jpg&page=2
您也可以改用托管API(在任何应用程序类型中,而不是特定于asp.net的应用程序中)
ImageBuilder.Current.Build(“letter.pdf”、“dest.jpg”、新的大小设置(“format=jpg;page=2”)
PdfRenderer插件是GPL许可的,就像Ghostscript一样。你在PDFSharp中尝试了什么?这里有一个例子:向我们展示你的尝试。我们会帮你的。谢谢你的反对票!我没有尝试过任何东西,除了你链接的示例,该示例提取PDF中的图像,而不是渲染PDF并将其输出到图像。这就是我提出这个问题的原因:我看不到在iTextSharp或PDFSharp中实现这一点的方法。我在谷歌上搜索了很多,结果空手而归。PDFsharp无法呈现PDF文件——这就是创建缩略图所需的。此信息可在常见问题解答中找到。你已经发现Ghostscript可以做到这一点。我没有投反对票,但我可以看出这是一个糟糕的问题,因为在SO中它已经被问了很多次。只需搜索“[pdf][c#]缩略图”就可以得到10个结果。效果就像冠军一样。我建议获取源代码。它更容易理解,而且与博客上的示例也有点不同。唯一的问题是你必须知道所需的宽度/高度。我想我会努力找出从哪里收集到这些信息的。我对这个解决方案并不痴迷,除了它能起作用。如果有人有更好的解决方案,请告诉我们,我会给你打勾。你在pdf上获得页面大小的解决方案是什么?如果不花2000多美元,那就太好了=PI将对此进行研究,看看它是否比使用Ghostscript更干净(必须如此)。谢谢它是从一个地方来的。此外,您还缺少所有的帮助器方法,如“GetArgs”etcThanks,我将在今天进行检查。