【发布时间】:2016-08-04 01:42:38
【问题描述】:
我有一个 PDF 文件,我想在每一页上添加一个简单的数字。
这是我的代码:
reader = new PdfReader(fileOut);
Document final = new Document(reader.GetPageSize(1));
PdfWriter w = PdfWriter.GetInstance(final, new FileStream(finalFile, FileMode.Create, FileAccess.Write));
w.SetFullCompression();
final.Open();
for (int i = 1; i <= reader.NumberOfPages; i++)
{
final.NewPage();
PdfContentByte cb = w.DirectContent;
ControlNumberTimes(cb, "C"+i, 560, 725, 270, Element.ALIGN_LEFT);
cb.AddTemplate(w.GetImportedPage(reader, i), 0, 0);
}
final.Close();
reader.Close();
private static void ControlNumberTimes( PdfContentByte cb1, string control, int x, int y, int rotation, int allign )
{
cb1.BeginText();
cb1.SetColorFill(BaseColor.BLACK);
cb1.SetFontAndSize(BaseFont.CreateFont("C:\\windows\\Fonts\\times.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 7.5f);
cb1.ShowTextAligned(allign, control, x, y, rotation);
cb1.EndText();
}
在添加此文本之前,PDF 文件大小为 3.6 Mb,之后大小为 11 Mb。 我做错了什么?
这是我现在的代码:
string finalFile = System.IO.Path.GetDirectoryName(fileOut) + "\\" +
System.IO.Path.GetFileNameWithoutExtension(fileOut) + "_num.pdf";
reader = new PdfReader(fileOut);
using (FileStream fs = new FileStream(finalFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (PdfStamper stamper = new PdfStamper(reader, fs))
{
int pageCount = reader.NumberOfPages;
for (int i = 1; i <= pageCount; i++)
{
ColumnText.ShowTextAligned(stamper.GetUnderContent(i), Element.ALIGN_CENTER, new Phrase(
$"C{i}"), 560, 725, 0);
}
}
}
由于机密信息,我无法共享的 pdf 文件。
【问题讨论】:
-
由于机密信息,我无法共享的 pdf 文件。 - 很遗憾,因为代码乍一看还可以,所以很可能您的问题是由于该文件的一些特殊性。
-
我已经尝试了另一个 pdf 文件,现在返回的文件大小还可以。我认为问题出在原始输入的 pdf 文件上。非常感谢您的帮助。
标签: c# pdf itextsharp