簡體   English   中英

ItextSharp MVC5 C#-現有pdf前面的文本

[英]ItextSharp MVC5 C# - text in front of existing pdf

我正在構建一個Web應用程序,用於使用iTextSharp編輯PDF文件。

當我嘗試寫入PDF時,文本被打印在現有內容的后面,但是我需要在其頂部打印。

有人可以向我解釋如何為文本設置depth屬性嗎?

這是我的代碼

using (var reader = new PdfReader(oldFile))
{
    using (var fileStream = new FileStream(newFile, FileMode.Create, FileAccess.Write))
    {
        var document = new Document(reader.GetPageSizeWithRotation(1));
        var writer = PdfWriter.GetInstance(document, fileStream);

        document.Open();

        try
        {
            PdfContentByte cb = writer.DirectContent;

            cb.BeginText();
            try
            {
                cb.SetFontAndSize(BaseFont.CreateFont(), 12);
                cb.SetTextMatrix(10, 100);
                cb.ShowText("Customer Name");
            }
            finally
            {
                cb.EndText();
            }

            PdfImportedPage page = writer.GetImportedPage(reader, 1);
            cb.AddTemplate(page, 0, 0);

        }
        finally
        {
            document.Close();
            writer.Close();
            reader.Close();
        }
    }
}

pdf看起來像這樣,桌子后面是一個字

有人可以向我解釋如何為文本設置depth屬性嗎?

Pdf沒有明確的深度或z軸屬性。 因此,先繪制的內容將包含在隨后繪制的內容中。

因此,如果要在添加的文本下放置模板,則應在添加文本的代碼之前拉入添加模板的代碼:

PdfContentByte cb = writer.DirectContent;

PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);

cb.BeginText();
try
{
    cb.SetFontAndSize(BaseFont.CreateFont(), 12);
    cb.SetTextMatrix(10, 100);
    cb.ShowText("Customer Name");
}
finally
{
    cb.EndText();
}

或者,您可以使用amextextrrp功能:它實際上創建了兩個內容流,直接內容和底層內容,並將底層內容放在直接內容之前。

因此,如果您不希望按照上述方法重新排列代碼,則可以將背景添加到底層內容中,而不是直接內容中。

暫無
暫無

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

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