iText7:在单元格内添加 PDF(页面末尾截断)
iText7: Adding a PDF inside a Cell (cutoff at end of page)
我们正在创建一个 PDF,它包含一个大 table,带有 headers(粗体)、sub-headers(非粗体)、行和单元格。
其中一个要求是在单元格内(sub-header 下)添加一个已经存在的 PDF(可以是多页)。这就是我们正在努力的地方。到目前为止我们已经尝试了什么:
正在将 PDF 转换为 FormXObject
,并将其添加到单元格中。
FontProvider fontProvider = new FontProvider();
ConverterProperties props = new ConverterProperties();
props.SetFontProvider(fontProvider);
var historyId = text.Replace("=Spectec_template", "");
var pdfTemplate = templateToPdfClient.GetPdf(historyId, "HI").Result;
PdfDocument srcDoc = new PdfDocument(new PdfReader(pdfTemplate.FileStream));
for (int i = 1; i < srcDoc.GetNumberOfPages() + 1; i++)
{
Cell newCell = new Cell(1, columnInfo.ColumnSpan).SetFont(PdfFontFactory.CreateFont(_fontName));
PdfPage origPage = srcDoc.GetPage(i);
Rectangle rect = origPage.GetPageSize();
PdfFormXObject pageCopy = origPage.CopyAsFormXObject(pdf);
Image image = new Image(pageCopy);
image.SetBorder(Border.NO_BORDER);
image.SetMaxWidth(UnitValue.CreatePercentValue(100));
image.SetMaxHeight(UnitValue.CreatePercentValue(50));
Div div = new Div();
div.Add(image.SetMaxWidth(UnitValue.CreatePercentValue(100)));
newCell.Add(div);
newCell = ApplyLayoutsToCell(newCell, cellStyles);
table.AddCell(newCell);
}
但最终结果是我们只看到 1 页,并且在页面末尾完全重叠。
当我们设置 image.SetAutoScale(true);
时,PDF 可见但非常小。
将 Image
添加到 Paragraph
而不是 DIV 时,PDF 页面会并排显示。
有什么想法、建议吗?
谢谢
感谢@mkl 和@KJ,我解决了这个问题。
我最终将每个 PDF 页面添加到一个新单元格中,并将图像缩放比例设置为 0.6f。
for (int i = 1; i < srcDoc.GetNumberOfPages() + 1; i++)
{
newCell = new Cell(1, columnInfo.ColumnSpan).SetFont(PdfFontFactory.CreateFont(_fontName));
PdfPage origPage = srcDoc.GetPage(i);
PdfFormXObject pageCopy = origPage.CopyAsFormXObject(pdf);
Image image = new Image(pageCopy);
image.SetBorder(Border.NO_BORDER);
image.Scale(0.6f, 0.6f);
newCell.Add(image);
newCell = ApplyLayoutsToCell(newCell, cellStyles);
table.AddCell(newCell);
}
我们正在创建一个 PDF,它包含一个大 table,带有 headers(粗体)、sub-headers(非粗体)、行和单元格。
其中一个要求是在单元格内(sub-header 下)添加一个已经存在的 PDF(可以是多页)。这就是我们正在努力的地方。到目前为止我们已经尝试了什么:
正在将 PDF 转换为 FormXObject
,并将其添加到单元格中。
FontProvider fontProvider = new FontProvider();
ConverterProperties props = new ConverterProperties();
props.SetFontProvider(fontProvider);
var historyId = text.Replace("=Spectec_template", "");
var pdfTemplate = templateToPdfClient.GetPdf(historyId, "HI").Result;
PdfDocument srcDoc = new PdfDocument(new PdfReader(pdfTemplate.FileStream));
for (int i = 1; i < srcDoc.GetNumberOfPages() + 1; i++)
{
Cell newCell = new Cell(1, columnInfo.ColumnSpan).SetFont(PdfFontFactory.CreateFont(_fontName));
PdfPage origPage = srcDoc.GetPage(i);
Rectangle rect = origPage.GetPageSize();
PdfFormXObject pageCopy = origPage.CopyAsFormXObject(pdf);
Image image = new Image(pageCopy);
image.SetBorder(Border.NO_BORDER);
image.SetMaxWidth(UnitValue.CreatePercentValue(100));
image.SetMaxHeight(UnitValue.CreatePercentValue(50));
Div div = new Div();
div.Add(image.SetMaxWidth(UnitValue.CreatePercentValue(100)));
newCell.Add(div);
newCell = ApplyLayoutsToCell(newCell, cellStyles);
table.AddCell(newCell);
}
但最终结果是我们只看到 1 页,并且在页面末尾完全重叠。
当我们设置 image.SetAutoScale(true);
时,PDF 可见但非常小。
将 Image
添加到 Paragraph
而不是 DIV 时,PDF 页面会并排显示。
有什么想法、建议吗?
谢谢
感谢@mkl 和@KJ,我解决了这个问题。
我最终将每个 PDF 页面添加到一个新单元格中,并将图像缩放比例设置为 0.6f。
for (int i = 1; i < srcDoc.GetNumberOfPages() + 1; i++)
{
newCell = new Cell(1, columnInfo.ColumnSpan).SetFont(PdfFontFactory.CreateFont(_fontName));
PdfPage origPage = srcDoc.GetPage(i);
PdfFormXObject pageCopy = origPage.CopyAsFormXObject(pdf);
Image image = new Image(pageCopy);
image.SetBorder(Border.NO_BORDER);
image.Scale(0.6f, 0.6f);
newCell.Add(image);
newCell = ApplyLayoutsToCell(newCell, cellStyles);
table.AddCell(newCell);
}