This commit is contained in:
eugeniy_ivanov 2023-01-18 11:31:58 +05:00
parent 22a662a1be
commit e86e1bb854
2 changed files with 41 additions and 51 deletions

View File

@ -9,35 +9,31 @@ using System.Threading;
namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert
{ {
#nullable enable
internal class ConvertToPdf internal class ConvertToPdf
{ {
private readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" }; private readonly string[] filesExtensions = { ".xlsx", ".xls", ".ods", ".odt", ".doc", ".docx", ".pdf" };
public static void MergeFiles(IEnumerable<string> inputFiles, string outFile) private static void MergeFiles(IEnumerable<string> inputFiles, string outFile)
{ {
using (FileStream stream = new FileStream(outFile, FileMode.Create)) using var stream = new FileStream(outFile, FileMode.Create);
using (Document doc = new Document()) using var doc = new Document();
using (PdfCopy pdf = new PdfCopy(doc, stream)) using var pdf = new PdfCopy(doc, stream);
{ doc.Open();
doc.Open(); var inputFilesList = inputFiles.ToList();
PdfReader reader = null; foreach (var file in inputFilesList)
PdfImportedPage page = null; {
inputFiles.ToList().ForEach(file => var reader = new PdfReader(file);
for (int i = 0; i < reader.NumberOfPages; i++)
{ {
reader = new PdfReader(file); pdf.AddPage(pdf.GetImportedPage(reader, i + 1));
for (int i = 0; i < reader.NumberOfPages; i++) }
{ pdf.FreeReader(reader);
page = pdf.GetImportedPage(reader, i + 1); reader.Close();
pdf.AddPage(page); };
}
pdf.FreeReader(reader);
reader.Close();
File.Delete(file);
});
}
} }
private async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token) private static async Task StartConvertProcessAsync(string inputFileName, string outFileName, CancellationToken token)
{ {
var result = Cli.Wrap("/usr/bin/soffice") var result = Cli.Wrap("/usr/bin/soffice")
.WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}"); .WithArguments($"--headless --convert-to pdf {inputFileName} --outdir {outFileName}");
@ -46,20 +42,17 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert
public async Task GetConverteAndMergedFileAsync(IEnumerable<string> filesNames, string resultPath, CancellationToken token) public async Task GetConverteAndMergedFileAsync(IEnumerable<string> filesNames, string resultPath, CancellationToken token)
{ {
foreach (var file in filesNames) var badFiles = filesNames.Where(f => !filesExtensions.Contains(Path.GetExtension(f)));
if (badFiles.Any())
{ {
var fileExt = Path.GetExtension(file); throw new FileFormatException($"Файлы: {string.Join(", ", badFiles)} - неподдерживаемого формата. " +
if (!filesExtensions.Contains(fileExt)) $"Они не могут быть добавлены в список файлов для конвертации и слияния в общий файл программы бурения.");
{
throw new FileFormatException($"Файл с именем: {file} - неподдерживаемого формата. Он не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения.");
}
} }
var listFileNames = filesNames var listFileNames = filesNames
.Distinct() .Distinct()
.Select(o => new { .Select(f => new {
inputFile = o, inputFile = f,
convertedFile = Path.ChangeExtension(o, ".pdf") convertedFile = Path.ChangeExtension(f, ".pdf")
}) })
.ToList(); .ToList();
foreach (var fileName in listFileNames) foreach (var fileName in listFileNames)
@ -73,4 +66,5 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert
MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath); MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath);
} }
} }
#nullable disable
} }

View File

@ -21,7 +21,7 @@ namespace ConsoleApp1
inputFiles.Add("11117777.pdf"); inputFiles.Add("11117777.pdf");
inputFiles.Add("22223333.xls"); inputFiles.Add("22223333.xls");
inputFiles.Add("33334444.xlsx"); inputFiles.Add("33334444.xlsx");
inputFiles.Add("33334444.tts"); //inputFiles.Add("33334444.tts");
var listOutNames = new List<string>(); var listOutNames = new List<string>();
var filteredFilesNames = inputFiles var filteredFilesNames = inputFiles
@ -30,7 +30,7 @@ namespace ConsoleApp1
.ToList(); .ToList();
FileInfo fileInfo = new FileInfo(resultFile); FileInfo fileInfo = new FileInfo(resultFile);
matchesExtensions(inputFiles); //matchesExtensions(inputFiles);
foreach (var FileName in inputFiles) foreach (var FileName in inputFiles)
{ {
var outputFile = Path.ChangeExtension(FileName, ".pdf"); var outputFile = Path.ChangeExtension(FileName, ".pdf");
@ -60,26 +60,22 @@ namespace ConsoleApp1
public static void DoMerged(IEnumerable<string> inputFiles, string outFile) public static void DoMerged(IEnumerable<string> inputFiles, string outFile)
{ {
using (FileStream stream = new FileStream(outFile, FileMode.Create)) using var stream = new FileStream(outFile, FileMode.Create);
using (Document doc = new Document()) using var doc = new Document();
using (PdfCopy pdf = new PdfCopy(doc, stream)) using var pdf = new PdfCopy(doc, stream);
doc.Open();
var inputFilesList = inputFiles.ToList();
foreach (var file in inputFilesList)
{ {
doc.Open(); var reader = new PdfReader(file);
PdfReader? reader = null; for (int i = 0; i < reader.NumberOfPages; i++)
PdfImportedPage? page = null;
inputFiles.ToList().ForEach(file =>
{ {
reader = new PdfReader(file); PdfImportedPage page = pdf.GetImportedPage(reader, i + 1);
for (int i = 0; i < reader.NumberOfPages; i++) pdf.AddPage(page);
{ }
page = pdf.GetImportedPage(reader, i + 1); pdf.FreeReader(reader);
pdf.AddPage(page); reader.Close();
} };
pdf.FreeReader(reader);
reader.Close();
File.Delete(file);
});
}
} }
//public static void StartConvertProcess(string inputFileName, string outFileName) //public static void StartConvertProcess(string inputFileName, string outFileName)