使用iTextSharp将不同大小的页面添加到PDF中
本文关键字:添加 PDF iTextSharp 使用 | 更新日期: 2023-09-27 18:25:38
我有一个表和一个图表要添加到PDF文档中。我已经使用iTextSharpLibrary将内容添加到PDF文件中。
事实上,问题是图表的宽度为1500px,而表格的A4页面大小非常适合。
事实上,我得到的图表图像不能缩放以适应页面,因为这会降低可视性。因此,我需要添加一个比其他页面宽度更宽的新页面,或者至少将页面方向更改为横向,然后添加图像。我该怎么做?
这是我用来添加一个新页面,然后调整页面大小,然后添加图像的代码。这不起作用。有什么修复方法吗?
var imageBytes = ImageGenerator.GetimageBytes(ImageSourceId);
var myImage = iTextSharp.text.Image.GetInstance(imageBytes);
document.NewPage();
document.SetPageSize(new Rectangle(myImage.Width, myImage.Height));
myImage.ScaleToFit(document.PageSize.Width, document.PageSize.Height);
document.Add(myImage);
我解决了这个问题。在调用Pdfdocument的GetInstance之前,我必须设置页面大小。然后,我可以为每个页面提供不同的页面大小
我不知道before calling the GetInstance of the Pdfdocument
是什么意思,但在调用newPage之前设置pageSize是有效的。下面是c#代码,创建一个由两张图片组成的新pdf,无论它们的大小差异有多大。这里的重要行是new Document
和SetPageSize
。
static public void MakePdfFrom2Pictures (String pic1InPath, String pic2InPath, String pdfOutPath)
{
using (FileStream pic1In = new FileStream (pic1InPath, FileMode.Open))
using (FileStream pic2In = new FileStream (pic2InPath, FileMode.Open))
using (FileStream pdfOut = new FileStream (pdfOutPath, FileMode.Create))
{
//Load first picture
Image image1 = Image.GetInstance (pic1In);
//I set the position in the image, not during the AddImage call
image1.SetAbsolutePosition (0, 0);
//Load second picture
Image image2 = Image.GetInstance (pic2In);
// ...
image2.SetAbsolutePosition (0, 0);
//Create a document whose first page has image1's size.
//Image IS a Rectangle, no need for new Rectangle (Image.Width, Image.Height).
Document document = new Document (image1);
//Assign writer
PdfWriter writer = PdfWriter.GetInstance (document, pdfOut);
//Allow writing
document.Open ();
//Get writing head
PdfContentByte pdfcb = writer.DirectContent;
//Put the first image on the first page
pdfcb.AddImage (image1);
//The new page will have image2's size
document.SetPageSize (image2);
//Add the new second page, and start writing in it
document.NewPage ();
//Put the second image on the second page
pdfcb.AddImage (image2);
//Finish the writing
document.Close ();
}
}