Я использую таблицу для отображения данных легенды. Страница находится в ландшафтном режиме. Я хотел бы ограничить строки таблицы до 15 на столбец. 2 столбца на страницу, а затем создается новая страница и т. Д. Это текущий выход. Как ограничить строки таблицы на страницу с помощью PDFsharp?
Вот макет того, что я хотел бы, чтобы он выглядел, когда есть больше данных. Если более 30 элементов, то необходимо создать новую страницу.
код в контроллере
[HttpPost]
public PDF Post([FromBody]List<Data> data)
{
try
{
// Get some file names
string filePath = @"~\tempPdfs\";
string completeFilePath = HttpContext.Current.Server.MapPath(filePath);
var directory = new DirectoryInfo(completeFilePath);
var fileName = (from f in directory.GetFiles("*.pdf")
orderby f.LastWriteTime descending
select f).First();
// Open the output document
PdfDocument outputDocument = new PdfDocument();
// Open the document to import pages from it..
PdfDocument inputDocument = PdfReader.Open(fileName.FullName, PdfDocumentOpenMode.Import);
// Iterate pages
int count = inputDocument.PageCount;
for (int idx = 0; idx < count; idx++)
{
// Get the page from the external document...
PdfPage page = inputDocument.Pages[idx];
// ...and add it to the output document.
outputDocument.AddPage(page);
}
//Create an Empty Page
PdfPage pdfpage = outputDocument.AddPage();
pdfpage.Size = PageSize.Letter; // Change the Page Size
pdfpage.Orientation = PageOrientation.Landscape;// Change the orientation property
//Get an XGraphics object for drawing
XGraphics xGrap = XGraphics.FromPdfPage(pdfpage);
//Create Fonts
XFont titlefont = new XFont("Calibri", 20, XFontStyle.Regular);
XFont tableheader = new XFont("Calibri", 15, XFontStyle.Bold);
XFont bodyfont = new XFont("Calibri", 11, XFontStyle.Regular);
//Draw the text
//double x = 250;
double y = 50;
//Title Binding
XTextFormatter textformater = new XTextFormatter(xGrap); //Used to Hold the Custom text Area
foreach (var item in data)
{
string colorStr = item.Color;
Regex regex = new Regex(@"rgb\((?<r>\d{1,3}),(?<g>\d{1,3}),(?<b>\d{1,3})\)");
//regex.Match(colorStr.Replace(" ", ""));
Match match = regex.Match(colorStr.Replace(" ", ""));
if (match.Success)
{
int r = int.Parse(match.Groups["r"].Value);
int g = int.Parse(match.Groups["g"].Value);
int b = int.Parse(match.Groups["b"].Value);
y = y + 30;
XRect ColorVal = new XRect(85, y, 5, 5);
XRect NameVal = new XRect(100, y, 250, 25);
var brush = new XSolidBrush(XColor.FromArgb(r, g, b));
xGrap.DrawRectangle(brush, ColorVal);
textformater.DrawString(item.Name, bodyfont, XBrushes.Black, NameVal);
};
};
// Save the document...
var dt = DateTime.Now.ToString("g").Replace('/', '-').Replace(':', '-');
var filename = string.Format("{0}-{1}.pdf", "PdfSharpResult", dt);
string physicalPath = HttpContext.Current.Server.MapPath("/completePdfs");
string relativePath = Path.Combine(physicalPath, filename).Replace("\\", "/");
var pdfName = relativePath;
outputDocument.Save(pdfName);
// ...and start a viewer.
Process.Start(pdfName);
return new PDF
{
FileName = pdfName,
FileNameEncoded = HttpUtility.UrlEncode(pdfName)
};
}
catch (Exception ex)
{
Debug.Print(ex.ToString());
return new PDF
{
Error = ex.ToString()
};
}
}
Можете ли вы показать код, в котором вы создаете таблицу, и назначить ему строки – stuartd
только что добавили весь контроллер – texas697
Я не верю, что PDFSharp имеет встроенную поддержку таблиц, и вам нужно будет управлять макетом самостоятельно или использовать что-то как MigraDoc – stuartd