forked from ddrilling/AsbCloudServer
refact
This commit is contained in:
parent
22a662a1be
commit
e86e1bb854
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user