簡體   English   中英

縮小pdf頁面的內容

[英]Shrinking the contents of a pdf page

對於我當前的項目,我需要使用pdf文件並縮小第一頁的內容,而又不改變頁面的整體大小,以便可以在底部添加其他信息,而又不與任何先前存在的內容重疊。 有沒有辦法使用iTextSharp做到這一點? 我會很感激您能提供的任何幫助!

您可以通過在頁面內容流之前添加一個轉換矩陣來縮小頁面的內容,例如:

public void shrink(PdfStamper stamper, int page, float factor)
{
    Rectangle crop = stamper.Reader.GetCropBox(page);
    float diffX = crop.Right * (1 - factor);
    float diffY = crop.Top * (1 - factor);
    PdfDictionary pageN = stamper.Reader.GetPageN(page);
    stamper.MarkUsed(pageN);
    PdfArray ar = null;
    PdfObject content = PdfReader.GetPdfObject(pageN.Get(PdfName.CONTENTS), pageN);
    if (content == null)
        return;
    if (content.IsArray())
    {
        ar = new PdfArray((PdfArray)content);
        pageN.Put(PdfName.CONTENTS, ar);
    }
    else if (content.IsStream())
    {
        ar = new PdfArray();
        ar.Add(pageN.Get(PdfName.CONTENTS));
        pageN.Put(PdfName.CONTENTS, ar);
    }
    else
        return;
    ByteBuffer out_p = new ByteBuffer();
    out_p.Append(factor).Append(" 0 0 ").Append(factor).Append(' ').Append(diffX).Append(' ').Append(diffY).Append(" cm ");
    PdfStream stream = new PdfStream(out_p.ToByteArray());
    ar.AddFirst(stamper.Writer.AddToBody(stream).IndirectReference);
    out_p.Reset(); 
}

(此代碼是從PdfStamper UnderContent和OverContent生成中借用的。)

提示: 在檢索頁面的OverContent或UnderContent之前,必須使用shrink

您可以像這樣使用它:

[Test]
public void ShrinkFirstPage()
{
    string origFile = ...;
    string resultFile = ...;

    using (PdfReader reader = new PdfReader(origFile))
    using (FileStream output = new FileStream(resultFile, FileMode.Create, FileAccess.Write))
    using (PdfStamper stamper = new PdfStamper(reader, output))
    {
        int page = 1;
        float factor = .9f;
        shrink(stamper, page, factor);

        Rectangle box = reader.GetCropBox(page);
        box.Top = box.Top - factor * box.Height;

        PdfContentByte cb = stamper.GetOverContent(page);
        cb.SetColorFill(BaseColor.YELLOW);
        cb.SetColorStroke(BaseColor.RED);
        cb.Rectangle(box.Left, box.Bottom, box.Width, box.Height);
        cb.FillStroke();
        cb.SetColorFill(BaseColor.BLACK);

        ColumnText ct = new ColumnText(cb);

        ct.AddElement(new Paragraph("This is some text added to the front page of the front page of this document."));

        ct.SetSimpleColumn(box);
        ct.Go();
    }
}

從這個原著

原件1

你得到

縮小1

從這里

原版2

你得到

縮小2

當心:該代碼不考慮頁面旋轉。 如果旋轉了頁面,則應相應地延長shrink

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM