我有一张宽度为1024px,高度为100000px的图像 我想将此图像导出为完整尺寸的pdf,但图像仅放在第一页上,..
这是我的代码:
Document doc = new Document();
try
{
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(generatedPdfSaveFilePath, FileMode.Create));
doc.Open();
Image jpg = Image.GetInstance(imagePath);
jpg.Border = Rectangle.BOX;
jpg.BorderWidth = 5f;
doc.Add(jpg);
doc.Add(new Paragraph("Original Width: " + jpg.Width.ToString()));
doc.Add(new Paragraph("Original Height " + jpg.Height.ToString()));
doc.Add(new Paragraph("Scaled Width: " + jpg.ScaledWidth.ToString()));
doc.Add(new Paragraph("Scaled Height " + jpg.ScaledHeight.ToString()));
float Resolution = jpg.Width / jpg.ScaledWidth * 72f;
doc.Add(new Paragraph("Resolution: " + Resolution));
}
catch (Exception ex)
{
//Log error;
}
finally
{
doc.Close();
}
如何在多个页面上导出全尺寸的大图像?
答案 0 :(得分:2)
您需要缩放图片,然后像这样添加:
Document doc = new Document();
try
{
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(generatedPdfSaveFilePath, FileMode.Create));
doc.Open();
Image jpg = Image.GetInstance(imagePath);
jpg.Border = Rectangle.BOX;
jpg.BorderWidth = 5f;
var jpeg = new Jpeg(jpg);
jpeg.ScaleToFit(doc.PageSize.Width - (doc.LeftMargin + doc.RightMargin),
doc.PageSize.Height - (doc.BottomMargin + doc.TopMargin));
doc.Add(jpeg);
doc.Add(new Paragraph("Original Width: " + jpg.Width.ToString()));
doc.Add(new Paragraph("Original Height " + jpg.Height.ToString()));
doc.Add(new Paragraph("Scaled Width: " + jpeg.ScaledWidth.ToString()));
doc.Add(new Paragraph("Scaled Height " + jpeg.ScaledHeight.ToString()));
float Resolution = jpg.Width / jpg.ScaledWidth * 72f;
doc.Add(new Paragraph("Resolution: " + Resolution));
}
catch (Exception ex)
{
//Log error;
}
finally
{
doc.Close();
}
答案 1 :(得分:0)
如果您希望jpg
填充页面的完整大小,则需要对其进行缩放。
例如:
Rectangle rect = document.getPageSize();
jpg.scaleAbsolute(rect.getWidth(), rect.getHeight());
我假设您希望图像在后台。在当前的代码示例中,添加图像,然后在图像下添加一些文本(或此页面上的文本和下一页上的图像,或此页面上的图像和下一页上的文本,具体取决于图像的大小)。
如果要在文本下添加图像,则需要:
jpg.setAbsolutePosition(0, 0);
最后,您要将图像添加到每个创建的页面。我刚回答了一个为每个页面添加边框的问题:How to draw border for whole pdf pages using iText library 5.5.2
请阅读我对该问题的回答,并创建一个如下所示的页面事件:
public class BackgroundImage extends PdfPageEventHelper {
Image jpg;
public BackgroundImage(Image jpg) {
this.jpg = jpg;
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContent();
Rectangle rect = document.getPageSize();
jpg.scaleAbsolute(rect.getWidth(), rect.getHeight());
jpg.setAbsolutePosition(0, 0);
canvas.addImage(jpg);
}
}
我没有测试这个代码,我把它从袖口上写下来。您可能需要稍微调整一下。