我已经在互联网上阅读和测试了很多关于这个问题的内容,但没有解决方案!
我想使用 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;
有人可以帮助我!我不知道如何解决这个问题!
谢谢
在尝试使用 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