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
{
#nullable enable
internal class ConvertToPdf
{
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 (Document doc = new Document())
using (PdfCopy pdf = new PdfCopy(doc, stream))
{
doc.Open();
PdfReader reader = null;
PdfImportedPage page = null;
inputFiles.ToList().ForEach(file =>
using var stream = new FileStream(outFile, FileMode.Create);
using var doc = new Document();
using var pdf = new PdfCopy(doc, stream);
doc.Open();
var inputFilesList = inputFiles.ToList();
foreach (var file in inputFilesList)
{
var reader = new PdfReader(file);
for (int i = 0; i < reader.NumberOfPages; i++)
{
reader = new PdfReader(file);
for (int i = 0; i < reader.NumberOfPages; i++)
{
page = pdf.GetImportedPage(reader, i + 1);
pdf.AddPage(page);
}
pdf.FreeReader(reader);
reader.Close();
File.Delete(file);
});
}
pdf.AddPage(pdf.GetImportedPage(reader, i + 1));
}
pdf.FreeReader(reader);
reader.Close();
};
}
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")
.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)
{
foreach (var file in filesNames)
var badFiles = filesNames.Where(f => !filesExtensions.Contains(Path.GetExtension(f)));
if (badFiles.Any())
{
var fileExt = Path.GetExtension(file);
if (!filesExtensions.Contains(fileExt))
{
throw new FileFormatException($"Файл с именем: {file} - неподдерживаемого формата. Он не может быть добавлен в список файлов для конвертации и слияния в общий файл программы бурения.");
}
throw new FileFormatException($"Файлы: {string.Join(", ", badFiles)} - неподдерживаемого формата. " +
$"Они не могут быть добавлены в список файлов для конвертации и слияния в общий файл программы бурения.");
}
var listFileNames = filesNames
.Distinct()
.Select(o => new {
inputFile = o,
convertedFile = Path.ChangeExtension(o, ".pdf")
.Select(f => new {
inputFile = f,
convertedFile = Path.ChangeExtension(f, ".pdf")
})
.ToList();
foreach (var fileName in listFileNames)
@ -73,4 +66,5 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram.Convert
MergeFiles(listFileNames.Select(c => c.convertedFile), resultPath);
}
}
#nullable disable
}

View File

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