private string RemoveExtension(string filePath) { var directory = PathSafe.GetDirectoryName(filePath); var fileWithoutExtension = PathSafe.GetFileNameWithoutExtension(filePath); return(Path.Combine(directory, fileWithoutExtension)); }
public SourceFileInfo Duplicate(SourceFileInfo sfi, string duplicateFolder, string profileGuid) { var duplicate = new SourceFileInfo(); duplicate.SessionId = sfi.SessionId; duplicate.WinStation = sfi.WinStation; duplicate.Author = sfi.Author; duplicate.ClientComputer = sfi.ClientComputer; duplicate.PrinterName = sfi.PrinterName; duplicate.JobCounter = sfi.JobCounter; duplicate.JobId = sfi.JobId; duplicate.DocumentTitle = sfi.DocumentTitle; duplicate.OriginalFilePath = sfi.OriginalFilePath; duplicate.Type = sfi.Type; duplicate.TotalPages = sfi.TotalPages; duplicate.Copies = sfi.Copies; duplicate.UserTokenEvaluated = sfi.UserTokenEvaluated; duplicate.UserToken = sfi.UserToken; duplicate.OutputFileParameter = sfi.OutputFileParameter; duplicate.PrinterParameter = profileGuid == null ? sfi.PrinterParameter : ""; duplicate.ProfileParameter = profileGuid ?? sfi.ProfileParameter; var duplicateFilename = PathSafe.GetFileNameWithoutExtension(sfi.Filename); var duplicateFilePath = PathSafe.Combine(duplicateFolder, duplicateFilename); duplicateFilePath = _uniqueFilePathBuilder.Build(duplicateFilePath).Unique; _file.Copy(sfi.Filename, duplicateFilePath); duplicate.Filename = duplicateFilePath; return(duplicate); }
/// <summary> /// Create a new GhostscriptJob instance /// </summary> /// <param name="jobInfo">JobInfo of the job to convert</param> /// <param name="profile">Profile that determines the conversion process</param> /// <param name="tempFolder"> /// TempFolderProvider that gives the full Temp path, i.e. C:\Users\Admin\Local /// Settings\Temp\clawPDF /// </param> /// <param name="jobTranslations">Translations needed for the job</param> /// <param name="fileWrap">Only for testing</param> /// <param name="directoryWrap">Only for testing</param> public GhostscriptJob(IJobInfo jobInfo, ConversionProfile profile, JobTranslations jobTranslations, ITempFolderProvider tempFolder, IFile fileWrap, IDirectory directoryWrap) : base(jobInfo, profile, jobTranslations, fileWrap, directoryWrap) { var gsVersion = new GhostscriptDiscovery().GetBestGhostscriptInstance(); if (gsVersion == null) { Logger.Error("No valid Ghostscript version found."); throw new InvalidOperationException("No valid Ghostscript version found."); } Logger.Debug("Ghostscript Version: " + gsVersion.Version + " loaded from " + gsVersion.DllPath); _ghostScript = new GhostScript(gsVersion); JobTempFolder = PathSafe.Combine(tempFolder.TempFolder, "Job_" + PathSafe.GetFileNameWithoutExtension(PathSafe.GetRandomFileName())); JobTempOutputFolder = PathSafe.Combine(JobTempFolder, "tempoutput"); DirectoryWrap.CreateDirectory(JobTempFolder); DirectoryWrap.CreateDirectory(JobTempOutputFolder); // Shorten the temp folder for GS compatibility //缩短临时文件夹以实现GS兼容性 JobTempFolder = JobTempFolder; }
private string DetermineOutfileBody(string outputFilenameTemplate) { var outputDir = PathSafe.GetDirectoryName(outputFilenameTemplate) ?? ""; var filenameBase = PathSafe.GetFileNameWithoutExtension(outputFilenameTemplate) ?? "output"; return(PathSafe.Combine(outputDir, filenameBase)); }
public override void MoveOutputFiles() { string outputDir = PathSafe.GetDirectoryName(Job.OutputFilenameTemplate) ?? ""; string filenameBase = PathSafe.GetFileNameWithoutExtension(Job.OutputFilenameTemplate) ?? "output"; string outfilebody = PathSafe.Combine(outputDir, filenameBase); Job.OutputFiles = new string[TempOutputFiles.Count]; //reserve space foreach (string tempoutputfile in TempOutputFiles) { string extension = PathSafe.GetExtension(TempOutputFiles[0]); string tempFileBase = PathSafe.GetFileNameWithoutExtension(tempoutputfile) ?? "output"; string num = tempFileBase.Replace(Job.JobTempFileName, ""); int numValue; if (int.TryParse(num, out numValue)) { int numDigits = (int)Math.Floor(Math.Log10(TempOutputFiles.Count) + 1); num = numValue.ToString("D" + numDigits); } string outputfile; if (num == "1") { outputfile = outfilebody + extension; } else { outputfile = outfilebody + num + extension; } lock (_lockObject) { var uniqueFilename = new UniqueFilename(outputfile, DirectoryWrap, FileWrap); if (Job.Profile.AutoSave.Enabled && Job.Profile.AutoSave.EnsureUniqueFilenames) { outputfile = EnsureUniqueFilename(uniqueFilename); } if (!CopyFile(tempoutputfile, outputfile)) { outputfile = EnsureUniqueFilename(uniqueFilename); if (!CopyFile(tempoutputfile, outputfile)) { //Throw exception after second attempt to copy failes. throw new DeviceException("Error while copying to target file in second attempt. Process gets canceled.", 2); } } } DeleteFile(tempoutputfile); Job.OutputFiles[Convert.ToInt32(num) - 1] = outputfile; } }
/// <param name="originalFilename">Original file name</param> public UniqueFilenameBase(string originalFilename, IPathUtil pathUtil) { if (originalFilename == null) { throw new ArgumentNullException(); } if (string.IsNullOrWhiteSpace(originalFilename)) { throw new ArgumentException(nameof(originalFilename)); } _pathUtil = pathUtil; OriginalFilename = originalFilename; LastUniqueFilename = originalFilename; _directory = PathSafe.GetDirectoryName(OriginalFilename) ?? ""; _fileBody = PathSafe.GetFileNameWithoutExtension(OriginalFilename); _extension = PathSafe.GetExtension(OriginalFilename); }
private void AddTokensFromOriginalFilePath(SourceFileInfo sfi, Metadata metadata, JobInfo.JobInfo jobInfo) { var originalFileName = metadata.PrintJobName; var originalDirectory = ""; if (!string.IsNullOrEmpty(jobInfo.OriginalFilePath)) { originalFileName = PathSafe.GetFileNameWithoutExtension(jobInfo.OriginalFilePath); originalDirectory = PathSafe.GetDirectoryName(jobInfo.OriginalFilePath); } else if (_pathUtil.IsValidRootedPath(sfi.DocumentTitle)) { originalFileName = PathSafe.GetFileNameWithoutExtension(sfi.DocumentTitle); originalDirectory = PathSafe.GetDirectoryName(sfi.DocumentTitle); } _tokenReplacer.AddStringToken("InputFilename", originalFileName); _tokenReplacer.AddStringToken("InputDirectory", originalDirectory); _tokenReplacer.AddStringToken("InputFilePath", originalDirectory); }
private string DetermineNumWithDigits(Job job, string tempOutputFile) { var tempFileBase = PathSafe.GetFileNameWithoutExtension(tempOutputFile) ?? "output"; var num = tempFileBase.Replace(job.JobTempFileName, ""); if (job.TempOutputFiles.Count == 1) { num = ""; } else { int numValue; if (int.TryParse(num, out numValue)) { var numDigits = (int)Math.Floor(Math.Log10(job.TempOutputFiles.Count) + 1); num = numValue.ToString("D" + numDigits); } } return(num); }
private SourceFileInfo CreateSourceFileInfo(JobFolderFile jobFolderFile, AppStartParameters appStartParameters) { var sourceFileInfo = new SourceFileInfo(); sourceFileInfo.Filename = jobFolderFile.FileInJobFolder; sourceFileInfo.Author = Environment.UserName; sourceFileInfo.ClientComputer = Environment.MachineName.Replace("\\", ""); sourceFileInfo.Copies = 1; sourceFileInfo.DocumentTitle = PathSafe.GetFileNameWithoutExtension(jobFolderFile.OriginalFilePath); sourceFileInfo.OriginalFilePath = jobFolderFile.OriginalFilePath; sourceFileInfo.JobCounter = 0; sourceFileInfo.JobId = 0; sourceFileInfo.PrinterParameter = appStartParameters.Printer; sourceFileInfo.ProfileParameter = appStartParameters.Profile; sourceFileInfo.OutputFileParameter = appStartParameters.OutputFile; sourceFileInfo.SessionId = Process.GetCurrentProcess().SessionId; sourceFileInfo.TotalPages = _directConversionHelper.GetNumberOfPages(jobFolderFile.FileInJobFolder); sourceFileInfo.Type = JobType.PsJob; sourceFileInfo.WinStation = Environment.GetEnvironmentVariable("SESSIONNAME"); return(sourceFileInfo); }
private void SetTempFolders(Job job) { job.JobTempFolder = PathSafe.Combine(_tempFolderProvider.TempFolder, "Job_" + PathSafe.GetFileNameWithoutExtension(Path.GetRandomFileName())); _directory.CreateDirectory(job.JobTempFolder); job.JobTempOutputFolder = PathSafe.Combine(job.JobTempFolder, "tempoutput"); _directory.CreateDirectory(job.JobTempOutputFolder); job.IntermediateFolder = PathSafe.Combine(job.JobTempFolder, "intermediate"); _directory.CreateDirectory(job.IntermediateFolder); // Shorten the temp folder for GS compatibility job.JobTempFolder = PathHelper.GetShortPathName(job.JobTempFolder); //TODO remove this after upgrade to GS 9.19 if (job.Profile.SaveFileTemporary) { var tempPath = PathSafe.Combine(_tempFolderProvider.TempFolder, "Job_tempsave_" + PathSafe.GetFileNameWithoutExtension(Path.GetRandomFileName())); job.OutputFileTemplate = PathSafe.Combine(tempPath, PathSafe.GetFileNameWithoutExtension(job.OutputFileTemplate)); } }
/// <summary> /// Adds ellipsis to a path with a length longer than 255. /// </summary> /// <param name="filePath">full path to file</param> /// <param name="maxLength">maximum length of the string. This must be between 10 and MAX_PATH (260)</param> /// <returns>file path with ellipsis to ensure length under the max length </returns> public string EllipsisForFilename(string filePath, int maxLength) { if (filePath == null) { throw new ArgumentNullException(nameof(filePath)); } if (filePath.EndsWith("\\")) { throw new ArgumentException("The path has to be a file", nameof(filePath)); } if (maxLength < 10 || maxLength > MAX_PATH) { throw new ArgumentException($"The desired length must be between 10 and {MAX_PATH}", nameof(maxLength)); } if (filePath.Length > maxLength) { int minUsefulFileLength = 4; var directory = PathSafe.GetDirectoryName(filePath) ?? ""; var file = PathSafe.GetFileNameWithoutExtension(filePath); var extension = PathSafe.GetExtension(filePath); var remainingLengthForFile = maxLength - directory.Length - extension.Length - ELLIPSIS.Length - 1; // substract -1 to account for the slash between path and filename if (remainingLengthForFile < minUsefulFileLength) { throw new ArgumentException("The path is too long", nameof(filePath)); //! } var partLength = remainingLengthForFile / 2; file = file.Substring(0, partLength) + ELLIPSIS + file.Substring(file.Length - partLength, partLength); filePath = PathSafe.Combine(directory, file + extension); } return(filePath); }
/// <summary> /// Get the list of Ghostscript Parameters. This List contains of a basic set of parameters together with some /// device-specific /// parameters that will be added by the device implementation /// </summary> /// <param name="ghostscriptVersion"></param> /// <returns>A list of parameters that will be passed to Ghostscript</returns> public IList <string> GetGhostScriptParameters(GhostscriptVersion ghostscriptVersion) { IList <string> parameters = new List <string>(); var outputFormatHelper = new OutputFormatHelper(); parameters.Add("gs"); parameters.Add("-I" + ghostscriptVersion.LibPaths); parameters.Add("-sFONTPATH=" + _osHelper.WindowsFontsFolder); parameters.Add("-dNOPAUSE"); parameters.Add("-dBATCH"); if (!outputFormatHelper.HasValidExtension(Job.OutputFileTemplate, Job.Profile.OutputFormat)) { outputFormatHelper.EnsureValidExtension(Job.OutputFileTemplate, Job.Profile.OutputFormat); } AddOutputfileParameter(parameters); AddDeviceSpecificParameters(parameters); // Add user-defined parameters if (!string.IsNullOrEmpty(Job.Profile.Ghostscript.AdditionalGsParameters)) { var args = _commandLineUtil.CommandLineToArgs(Job.Profile.Ghostscript.AdditionalGsParameters); foreach (var s in args) { parameters.Add(s); } } //Dictonary-Parameters must be the last Parameters if (DistillerDictonaries.Count > 0) { parameters.Add("-c"); foreach (var parameter in DistillerDictonaries) { parameters.Add(parameter); } } //Don't add further paramters here, since the distiller-parameters should be the last! parameters.Add("-f"); if (Job.Profile.Stamping.Enabled) { // Compose name of the stamp file based on the location and name of the inf file var stampFileName = PathSafe.Combine(Job.JobTempFolder, PathSafe.GetFileNameWithoutExtension(Job.JobInfo.InfFile) + ".stm"); CreateStampFile(stampFileName, Job.Profile, Job.TokenReplacer); parameters.Add(stampFileName); } SetCover(Job, parameters); foreach (var sfi in Job.JobInfo.SourceFiles) { parameters.Add(PathHelper.GetShortPathName(sfi.Filename)); } SetAttachment(Job, parameters); // Compose name of the pdfmark file based on the location and name of the inf file var pdfMarkFileName = PathSafe.Combine(Job.JobTempFolder, "metadata.mtd"); CreatePdfMarksFile(pdfMarkFileName); // Add pdfmark file as input file to set metadata parameters.Add(pdfMarkFileName); return(parameters); }