如何在Delphi中使用ghostscript将jpg转换为pdf

问题描述 投票:0回答:1

我已经在互联网上阅读和测试了很多关于这个问题的内容,但没有解决方案!

我想使用 Delphi 7 中的 Ghostscript DLL 将 jpeg 转换为 pdf 文件。

下面的代码创建一个空的 pdf 文件。

function Jpg_to_Pdf(dir, inJpg, outPdf: String): Integer;
const
 GS_ARG_ENCODING_LOCAL = 0;
 GS_ARG_ENCODING_UTF8 = 1;
 e_Quit = -990;
var
 code, code1, gsargc, i: Integer;
 gsargvT: array of pansichar;
 gsargv: array of pansichar;
 minst: PGSAPIrevision;
 files:array of ansiString;
begin
 setlength(gsargvT, length(gsargvT) + 1);
 gsargvT[high(gsargvT)] := 'gs';
 setlength(gsargvT, length(gsargvT) + 1);
 gsargvT[high(gsargvT)] := '-dBATCH';
 setlength(gsargvT, length(gsargvT) + 1);
 gsargvT[high(gsargvT)] := '-dNOPAUSE';
 setlength(gsargvT, length(gsargvT) + 1);
 gsargvT[high(gsargvT)] := '-q';
 setlength(gsargvT, length(gsargvT) + 1);
 gsargvT[high(gsargvT)] := '-sDEVICE=pdfwrite';
 setlength(gsargvT, length(gsargvT) + 1);

 gsargvT[high(gsargvT)] := Pchar(ansiToUtf8('-sOutputFile='+dir+outPdf));
 setlength(gsargvT, length(gsargvT) + 1);

 gsargvT[high(gsargvT)] :='viewjpeg.ps';
 setlength(gsargvT, length(gsargvT) + 1);

 gsargvT[high(gsargvT)] := Pchar(ansiToUtf8('-c '+dir+injpg));
 setlength(gsargvT, length(gsargvT));
              

 gsargc := length(gsargvT);


for i := Low(files) to High(files) do
 begin
   setlength(gsargv, length(gsargv) + 1);
   gsargv[high(gsargv)] := pansichar(files[i]);
 end;
 
 gsargc := length(gsargvT);
 code := gsapi_new_instance(@minst, nil);

 if (code < 0) then
   exit;

 code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8);

 if (code = 0) then
    code := gsapi_init_with_args(minst, gsargc, @gsargvT[0]);

code1 := gsapi_exit(minst);

 if ((code = 0) or (code = e_Quit)) then
   code := code1;

 gsapi_delete_instance(minst);

end;

有人可以帮助我!我不知道如何解决这个问题!

谢谢

delphi pdf jpeg ghostscript
1个回答
0
投票

在尝试使用 GhostScript 的非控制台变体之前,了解 Windows 如何需要专门参数的最佳方法是使用 CMD 文件进行测试。

可以轻松地为拖放或简单命令等输入设置环境变量和权限

jpg2pdf.cmd "\file path\filename.jpg"

这是一个这样的测试文件,您只需设置 GhostScript 安装的根文件夹和 exe 版本即可替换我的。

@echo off
setlocal enabledelayedexpansion
set "GS_ROOT=C:/Users/K/Desktop/Apps/pdf/GS/gs10040
set "GS_BIN=%GS_ROOT%/bin"
set "GS_LIB=%GS_ROOT%/lib"

REM Enforce only accepting "a path/filename.jpg"  adapt if you need different
set "input=%~dpn1.jpg"
if /i not "%input%" == "%~1" exit /b

REM adapt Windows input \ to Unix / (alternatively use \\)
set "input=!input:\=/!"

set "output=%~dpn1-out.pdf"
REM for debugging use echo "!input!" "!output!"


"%GS_BIN%/gswin32c.exe" --permit-file-read="%GS_LIB%/";"!input!" -sDEVICE=pdfwrite  -o"!output!" "%GS_LIB%/viewjpeg.ps" -c "(!input!) viewJPEG showpage"
if %errorlevel% == 0 exit /b
echo Error in call see above
pause & exit /b
© www.soinside.com 2019 - 2024. All rights reserved.