我需要将PDF文件转换为图像.我用于测试目的"Total PDF Converter"提供命令行,但它是共享软件,我需要找到一个免费的替代品.
有谁知道这样的工具,甚至可能是一个免费的C#库?
Tho*_*mas 29
ImageMagick软件包中的convert工具(或magick 自版本7开始)可以做到这一点(还有更多).
最简单的形式就是这样
convert myfile.pdf myfile.png
Run Code Online (Sandbox Code Playgroud)
要么
magick myfile.pdf myfile.png
Run Code Online (Sandbox Code Playgroud)
tob*_*obs 14
这是一个老问题,但由于缺少GhostScript答案,并且没有多页 PDF导出的提示,我认为添加另一个变体是可以的.
gs -dBATCH -dNOPAUSE -sDEVICE=pnggray -r300 -dUseCropBox -sOutputFile=item-%03d.png examples.pdf
Run Code Online (Sandbox Code Playgroud)
选项说明:
dBatch并dNOPAUSE告诉gs以批处理模式运行,这或多或少意味着它不会提出任何问题.如果要在bash脚本中运行该命令,那么这些参数也很重要.sDEVICE告诉gs要生成什么输出格式.pnggray用于灰度,png16m适用于24位RGB颜色.如果你坚持创建Jpegs用于-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
Run Code Online (Sandbox Code Playgroud)
SLES:
zypper install ghostscript
Run Code Online (Sandbox Code Playgroud)
于Debian/Ubuntu:
sudo apt-get install ghostscript
Run Code Online (Sandbox Code Playgroud)
视窗:
您可以在http://www.ghostscript.com/download/gsdnld.html下找到Windows二进制文件
问题很老,但最近我发现这个解决方案对我有用:https: //github.com/jhabjan/Ghostscript.NET.它也可以作为nuget下载.
以下是将所有pdf页面转换为png图像的示例代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
@Thomas 的回答在我的情况下不起作用。我想只有当您的 pdf 中有图像时才有效。就我而言,有效的是pdftoppm(来源来自https://askubuntu.com/a/50180/37527):
pdftoppm input.pdf outputname -png
Run Code Online (Sandbox Code Playgroud)
这将使用格式输出 PDF 中的每个页面outputname-01.png,01作为页面的索引。
pdftoppm input.pdf outputname -png -f {page} -singlefile
Run Code Online (Sandbox Code Playgroud)
更改{page}为页码。它的索引为 1,因此-f 1将是第一页。
此命令的默认分辨率为 150 DPI。增加它会导致更大的文件大小和更多的细节。
要提高转换后的 PDF 的分辨率,请添加选项-rx {resolution}和-ry {resolution}. 例如:
pdftoppm input.pdf outputname -png -rx 300 -ry 300
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55957 次 |
| 最近记录: |