Documents: Fix letterhead and other problems
All checks were successful
Test / Run tests (push) Successful in 2m39s
All checks were successful
Test / Run tests (push) Successful in 2m39s
This commit is contained in:
@@ -88,11 +88,15 @@ namespace Elwig.Documents {
|
||||
}
|
||||
|
||||
public int Render(string path) {
|
||||
using var writer = new PdfWriter(path);
|
||||
return Render(writer);
|
||||
using (var writer = new PdfWriter(path)) {
|
||||
Render(writer);
|
||||
}
|
||||
using var reader = new PdfReader(path);
|
||||
using var pdf = new PdfDocument(reader);
|
||||
return pdf.GetNumberOfPages();
|
||||
}
|
||||
|
||||
private int Render(PdfWriter writer) {
|
||||
private void Render(PdfWriter writer) {
|
||||
NF = PdfFontFactory.CreateFont(@"C:\Windows\Fonts\times.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_NOT_EMBEDDED);
|
||||
BF = PdfFontFactory.CreateFont(@"C:\Windows\Fonts\timesbd.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_NOT_EMBEDDED);
|
||||
IF = PdfFontFactory.CreateFont(@"C:\Windows\Fonts\timesi.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_NOT_EMBEDDED);
|
||||
@@ -117,16 +121,14 @@ namespace Elwig.Documents {
|
||||
_doc = new iText.Layout.Document(pdf, iText.Kernel.Geom.PageSize.A4);
|
||||
try {
|
||||
_doc.SetFont(NF).SetFontSize(12);
|
||||
RenderHeader(_doc, pdf);
|
||||
BeforeRenderBody(_doc, pdf);
|
||||
RenderBody(_doc, pdf);
|
||||
var pageNum = pdf.GetNumberOfPages();
|
||||
return pageNum;
|
||||
} finally {
|
||||
_doc.Close();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void RenderHeader(iText.Layout.Document doc, PdfDocument pdf) { }
|
||||
protected virtual void BeforeRenderBody(iText.Layout.Document doc, PdfDocument pdf) { }
|
||||
|
||||
protected virtual void RenderBody(iText.Layout.Document doc, PdfDocument pdf) { }
|
||||
|
||||
@@ -150,84 +152,77 @@ namespace Elwig.Documents {
|
||||
using var mergedPdf = new PdfDocument(writer);
|
||||
var merger = new PdfMerger(mergedPdf);
|
||||
|
||||
PdfPage? letterheadPage = null;
|
||||
int letterheadInsertIndex = 0;
|
||||
int letterheadDocIndex = 0;
|
||||
(PdfPage Page, int InsertIndex, int DocIndex)? letterhead = null;
|
||||
|
||||
int p = mergedPdf.GetNumberOfPages();
|
||||
for (int i = 0; i < m.Documents.Count; i++) {
|
||||
if (cancelToken?.IsCancellationRequested ?? false)
|
||||
throw new OperationCanceledException("Dokumentenerzeugung abgebrochen!");
|
||||
var doc = m.Documents[i];
|
||||
int p0 = mergedPdf.GetNumberOfPages();
|
||||
int p0 = p;
|
||||
|
||||
if (letterheadPage != null && doc is Letterhead) {
|
||||
if (mergedPdf.GetNumberOfPages() <= letterheadInsertIndex) {
|
||||
mergedPdf.AddPage(letterheadPage);
|
||||
if (letterhead != null && doc is Letterhead) {
|
||||
if (p0 <= letterhead.Value.InsertIndex) {
|
||||
mergedPdf.AddPage(letterhead.Value.Page);
|
||||
mergedPdf.AddNewPage();
|
||||
} else {
|
||||
mergedPdf.AddPage(letterheadInsertIndex + 1, letterheadPage);
|
||||
mergedPdf.AddNewPage(letterheadInsertIndex + 2);
|
||||
mergedPdf.AddPage(letterhead.Value.InsertIndex + 1, letterhead.Value.Page);
|
||||
mergedPdf.AddNewPage(letterhead.Value.InsertIndex + 2);
|
||||
}
|
||||
|
||||
pageNums[letterheadDocIndex] = 1;
|
||||
letterheadPage = null;
|
||||
pageNums[letterhead.Value.DocIndex] = 1;
|
||||
letterhead = null;
|
||||
p += 2;
|
||||
}
|
||||
|
||||
if (doc is RawPdfDocument) {
|
||||
if (IsDoublePaged && doc is Letterhead) {
|
||||
using var reader = new PdfReader(doc.PdfPath);
|
||||
using var src = new PdfDocument(reader);
|
||||
letterheadPage = src.GetPage(1).CopyTo(mergedPdf);
|
||||
letterheadInsertIndex = p0;
|
||||
letterheadDocIndex = i;
|
||||
} else {
|
||||
using var reader = new PdfReader(doc.PdfPath);
|
||||
using var src = new PdfDocument(reader);
|
||||
merger.Merge(src, 1, src.GetNumberOfPages());
|
||||
}
|
||||
using var reader = new PdfReader(doc.PdfPath);
|
||||
using var src = new PdfDocument(reader);
|
||||
merger.Merge(src, 1, src.GetNumberOfPages());
|
||||
p += src.GetNumberOfPages();
|
||||
} else {
|
||||
int pageNum = doc.Render(tmpPdf.FilePath);
|
||||
if (IsDoublePaged && doc is Letterhead) {
|
||||
using var reader = new PdfReader(tmpPdf.FilePath);
|
||||
using var src = new PdfDocument(reader);
|
||||
letterheadPage = src.GetPage(1).CopyTo(mergedPdf);
|
||||
letterheadInsertIndex = p0;
|
||||
letterheadDocIndex = i;
|
||||
letterhead = (src.GetPage(1).CopyTo(mergedPdf), p0, i);
|
||||
} else {
|
||||
using var reader = new PdfReader(tmpPdf.FilePath);
|
||||
using var src = new PdfDocument(reader);
|
||||
merger.Merge(src, 1, pageNum);
|
||||
p += pageNum;
|
||||
}
|
||||
}
|
||||
|
||||
int p1 = mergedPdf.GetNumberOfPages();
|
||||
int p1 = p;
|
||||
pageNums.Add(p1 - p0);
|
||||
|
||||
if (IsDoublePaged && doc is not Letterhead && mergedPdf.GetNumberOfPages() % 2 != 0) {
|
||||
if (letterheadPage != null) {
|
||||
mergedPdf.AddPage(letterheadPage);
|
||||
letterheadPage = null;
|
||||
if (IsDoublePaged && doc is not Letterhead && p % 2 != 0) {
|
||||
if (letterhead != null) {
|
||||
mergedPdf.AddPage(letterhead.Value.Page);
|
||||
letterhead = null;
|
||||
} else {
|
||||
mergedPdf.AddNewPage();
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
progress?.Report(100.0 * (i + 1) / (m.Documents.Count + 1));
|
||||
}
|
||||
|
||||
if (letterheadPage != null) {
|
||||
if (mergedPdf.GetNumberOfPages() <= letterheadInsertIndex) {
|
||||
mergedPdf.AddPage(letterheadPage.CopyTo(mergedPdf));
|
||||
if (letterhead != null) {
|
||||
if (p <= letterhead.Value.InsertIndex) {
|
||||
mergedPdf.AddPage(letterhead.Value.Page);
|
||||
mergedPdf.AddNewPage();
|
||||
} else {
|
||||
mergedPdf.AddPage(letterheadInsertIndex + 1, letterheadPage.CopyTo(mergedPdf));
|
||||
mergedPdf.AddNewPage(letterheadInsertIndex + 2);
|
||||
mergedPdf.AddPage(letterhead.Value.InsertIndex + 1, letterhead.Value.Page);
|
||||
mergedPdf.AddNewPage(letterhead.Value.InsertIndex + 2);
|
||||
}
|
||||
|
||||
pageNums[letterheadDocIndex] = 1;
|
||||
pageNums[letterhead.Value.DocIndex] = 1;
|
||||
p += 2;
|
||||
}
|
||||
|
||||
TotalPages = pageNums.Sum();
|
||||
TotalPages = p;
|
||||
} catch {
|
||||
pdf.Dispose();
|
||||
throw;
|
||||
@@ -394,6 +389,8 @@ namespace Elwig.Documents {
|
||||
}
|
||||
|
||||
private void OnPageEnd(PdfDocumentEvent evt) {
|
||||
if (_doc is Letterhead) return;
|
||||
|
||||
var pdf = evt.GetDocument();
|
||||
var page = evt.GetPage();
|
||||
var pageNum = pdf.GetPageNumber(page);
|
||||
|
||||
Reference in New Issue
Block a user