我需要将PDF文件转换为图片。我用于测试的工具是“Total PDF Converter”,它提供了一个命令行,但这是共享软件,我需要找到一个免费的替代品。
有人知道这样的工具或甚至是免费的C#库吗?
convert
工具(或 magick
自版本7起)来自 ImageMagick 软件包,可以完成此操作(以及更多其他操作)。convert myfile.pdf myfile.png
或者
magick myfile.pdf myfile.png
由于缺少GhostScript的答案,而且尚无有关多页 PDF导出的提示,我认为添加另一个变体是可以的。
gs -dBATCH -dNOPAUSE -sDEVICE=pnggray -r300 -dUseCropBox -sOutputFile=item-%03d.png examples.pdf
选项说明:
dBatch
和dNOPAUSE
是告诉gs以批处理模式运行,这意味着它基本上不会询问任何问题。 如果您想在bash脚本中运行命令,则这些参数也很重要。sDEVICE
告诉gs要生成哪种输出格式。pnggray
用于灰度,png16m
用于24位RGB颜色。如果坚持创建Jpeg,请使用-sDEVICE = jpeg
生成彩色JPEG文件。 使用-dJPEGQ = N
(N为0到100的整数,默认值为75)参数来控制Jpgeg质量。-r300
将扫描分辨率设置为300dpi。 如果您喜欢更小的输出尺寸,请使用-r70
或如果输入pdf具有高分辨率,请使用-r600
。 如果您有一份分辨率为300dpi的PDF并指定-r600,则图像将被放大。-dUseCropBox
告诉gs使用已定义的CropBox。 CropBox指定页面上感兴趣的区域。 如果您有一个带有大白边框的pdf,并且您不希望在输出中有此边框,则此选项可能有所帮助。-sOutputFile
定义输出文件的名称。 %03d.png部分告诉gs为多个文件包括一个计数器。 两页pdf将生成两个命名为item-001.png和item-002.png的文件。可用性: imagemagick的convert命令在内部使用gs命令。 如果您可以使用imagemagick转换pdf,则已安装了gs。
安装ghostscript:
RHEL:
yum install ghostscript
SLES:
zypper install ghostscript
Debian/Ubuntu:
sudo apt-get install ghostscript
Windows:
您可以在http://www.ghostscript.com/download/gsdnld.html找到Windows二进制文件。
private static void Test()
{
var localGhostscriptDll = Path.Combine(Environment.CurrentDirectory, "gsdll64.dll");
var localDllInfo = new GhostscriptVersionInfo(localGhostscriptDll);
int desired_x_dpi = 96;
int desired_y_dpi = 96;
string inputPdfPath = "test.pdf";
string outputPath = Environment.CurrentDirectory;
GhostscriptRasterizer _rasterizer = new GhostscriptRasterizer();
_rasterizer.Open(inputPdfPath, localDllInfo, false);
for (int pageNumber = 1; pageNumber <= _rasterizer.PageCount; pageNumber++)
{
string pageFilePath = Path.Combine(outputPath, "Page-" + pageNumber.ToString() + ".png");
Image img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(pageFilePath, ImageFormat.Png);
}
_rasterizer.Close();
}
在我的情况下, @Thomas 的回答不起作用了。
我猜这只适用于您的pdf中有图像的情况。
在我的情况下,有效的方法是使用pdftoppm
(源自https://askubuntu.com/a/50180/37527):
pdftoppm input.pdf outputname -png
outputname-01.png
的PDF中的每个页面,其中01
是页面索引。
pdftoppm input.pdf outputname -png -f {page} -singlefile
将{page}
更改为页面编号。索引从1开始,因此-f 1
将是第一页。
此命令的默认分辨率为150 DPI。增加它将导致文件大小变大并提供更多细节。
要增加转换后PDF的分辨率,请添加选项-rx {resolution}
和-ry {resolution}
。例如:
pdftoppm input.pdf outputname -png -rx 300 -ry 300
http://www.codeproject.com/Articles/32274/How-To-Convert-PDF-to-Image-Using-Ghostscript-API
它可以轻松地将PDF转换为图像(单个文件或多个文件),是开源的,并使用Ghostscript(免费下载)。converter = new PDFConverter();
converter.JPEGQuality = 90;
converter.OutputFormat = "jpg";
string output = "output.jpg";
converter.Convert("input.pdf", output);
2JPEG 命令行工具可以实现该功能,例如:
2jpeg.exe -src "C:\In\*.pdf" -dst "C:\Out"
magick: attempt to perform an operation not allowed by the security policy
gs' @ error/delegate.c/ExternalDelegateCommand/384.` - xeruf