自动缩放图像和段落以适合文档 iTextSharp

AutoScaling an image and paragraph to fit the document iTextSharp

我正在使用 iTextSharp 5.5.13.2。我的程序正在做的是生成一个新的 PDF,它将加载到多个 pdf 中,并在每个文档页面中加载一个段落。问题是我想让它适合整个文档,但留下了 space,尝试了多种方法,例如:

· 添加一个 table 和两个单元格使第一个单元格适合整个文档,第二个单元格在其他页面上。 · 添加一个 table 和一个单元格会导致文档异常。

工作代码,但如第一点所述:

foreach (KeyValuePair<string, string> key in dict)
        {
            PdfReader reader = new PdfReader(key.Key);

            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                PdfImportedPage page = writer.GetImportedPage(reader, i);
                PdfPTable table = new PdfPTable(1);
                table.WidthPercentage = 100;

                PdfPCell cell = new PdfPCell(iTextSharp.text.Image.GetInstance(page), true);
                cell.Border = iTextSharp.text.Rectangle.NO_BORDER;
                //cell.AddElement(new Phrase(key.Value));
                PdfPCell cell2 = new PdfPCell(new Phrase(key.Value));
                cell2.Border = iTextSharp.text.Rectangle.NO_BORDER;

                table.AddCell(cell);
                table.AddCell(cell2);

                document.Add(table);
                document.NewPage();
            }
        }

我该如何解决这个问题?谢谢!

我用这段代码解决了这个问题,我所做的是将两个单元格都添加到 table 并减少 WidthPercentage 以便所有内容都适合一页。

foreach (KeyValuePair<string, string> key in dict)
        {
            PdfReader reader = new PdfReader(key.Key);

            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                PdfImportedPage page = writer.GetImportedPage(reader, i);
                PdfPTable table = new PdfPTable(1);
                table.WidthPercentage = 68;
                if (key.Value.Contains("word"))
                    table.WidthPercentage = 65;

                PdfPCell cell = new PdfPCell(iTextSharp.text.Image.GetInstance(page), true);
                cell.Border = iTextSharp.text.Rectangle.NO_BORDER;
                //cell.AddElement(new Phrase(key.Value));
                PdfPCell cell2 = new PdfPCell(new Phrase(key.Value));
                cell2.Border = iTextSharp.text.Rectangle.NO_BORDER;


                table.AddCell(cell);
                table.AddCell(cell2);
                
                document.Add(table);
                document.NewPage();
            }
        }