PdfDocument PrepareDocumentForBatch(PdfDocument document, PdfSettingsBatchDto set, string countryInSettings) { var settings = set.Settings; Document doc = new Document(); PdfPage page = document.Pages[0]; Section sec = doc.AddSection(); sec.PageSetup.LeftMargin = Unit.FromInch(settings.LeftMargin); sec.PageSetup.RightMargin = Unit.FromInch(settings.RightMargin); sec.PageSetup.TopMargin = Unit.FromInch(settings.TopMargin); sec.PageSetup.BottomMargin = Unit.FromInch(settings.BottomMargin); //date if (settings.ShowDate) { AddDate(sec, settings); } //address if (settings.ShowAddress) { AddAddress(sec, settings, set.CountryInSettings); } // body AddBody(sec, settings); //signature if (settings.ShowSingnature) { AddSignature(sec, settings); } //fields if (settings.HasReceiptStub) { FillFields(document, set.Fields, settings, countryInSettings); } DocumentRenderer docRenderer = new DocumentRenderer(doc); docRenderer.PrepareDocument(); int pages = docRenderer.FormattedDocument.PageCount; for (int j = 1; j <= pages; ++j) { using (XGraphics gfx = XGraphics.FromPdfPage(page)) { // HACK² gfx.MUH = PdfFontEncoding.Unicode; docRenderer.RenderPage(gfx, j); } } return(document); }
/// <summary> /// used for batch /// if not do this, all fields in pdf document will have the same values /// </summary> /// <param name="document"></param> void RenameAnnotationFields(PdfDocument document, PdfSettingsBatchDto set, string country, int unicNum) { for (int i = 0; i < document.Pages.Count; i++) { PdfAnnotations anotations = document.Pages[i].Annotations; for (int j = 0; j < anotations.Count; j++) { PdfAnnotation obj; if (!string.IsNullOrEmpty(GetValueByName(anotations[j].Title, set.Fields, set.Settings, country))) { obj = anotations[j]; obj.Title = $"{anotations[j].Title}_{unicNum}"; } } } }