我正在尝试使用 iText7 和 c# 更改现有 PDF 文件中所有文本字段的字体。在所有示例中,我看到都会创建一个具有“源”和“目标文件”的 PdfDocument 对象。下面是我更改字体的代码。
string pdfFileSrc = @"C:\UnsecurePDF\3161_Dec2023.pdf";
string pdfFileDest = @"C:\UnsecurePDF\3161_Dec2023-3.pdf";
float fontSize = 8.00f;
PdfFont fontTimesRoman = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.TIMES_ROMAN);
PdfDocument pdfDocument = new PdfDocument(new PdfReader(pdfFileSrc), new PdfWriter(pdfFileDest));
PdfAcroForm acroForm = PdfAcroForm.GetAcroForm(pdfDocument, false);
var fields = acroForm.GetAllFormFields();
foreach (var field in fields)
{
try
{
field.Value.SetFont(fontTimesRoman);
field.Value.SetFontSize(fontSize);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
pdfDocument.Close();
我已成功通过代码更改了字体值,新值已保存在目标 PDF 文件中。我的问题是,有没有办法只修改现有 PDF 文件(源 PDF 文件),而无需创建额外的“目标”PDF 文件?
iText 不能同时处理指向同一文件的
PdfReader
和。PdfWriter
PdfDocument
但是,您可以做的是将传入或传出的文件缓冲在内存中,然后将结果写入与您读取的相同的文件。
也就是说,您要么先将现有文件读入例如 a
MemoryStream
,然后PdfReader
从该流中打开 并将 指向原始文件;要么从文件中PdfWriter
打开并将 指向a ,然后在关闭后将流内容存储到文件中。PdfReader
PdfWriter
MemoryStream
PdfDocument