gpt4 book ai didi

c# - 通过 C# 复制 pdf 注释

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:04 26 4
gpt4 key购买 nike

我有一个流(带注释的 PDF 文件)和另一个流(没有注释的同一个 PDF 文件)。我使用流是因为我需要在内存中执行这个操作。我需要将注释从第一个文档复制到另一个文档。注释可以是不同的:注释、突出显示和其他。所以最好是复制注释而不解析它。

你能给我推荐一些有用的 .NET PDF 库吗?以及这个问题的一些示例。

最佳答案

您可以将此示例用于 iTextSharp 来解决您的问题(此示例将带有注释的 pdf 文件列表复制到新的 pdf 文件中):

var output = new MemoryStream();

using (var document = new Document(PageSize.A4, 70f, 70f, 20f, 20f))
{
var readers = new List<PdfReader>();
var writer = PdfWriter.GetInstance(document, output);

writer.CloseStream = false;

document.Open();

const Int32 requiredWidth = 500;
const Int32 zeroBottom = 647;
const Int32 left = 50;

Action<String, Action> inlcudePdfInDocument = (filename, e) =>
{
var reader = new PdfReader(filename);
readers.Add(reader);

var pageCount = reader.NumberOfPages;
for (var i = 0; i < pageCount; i++)
{
e?.Invoke();
var imp = writer.GetImportedPage(reader, (i + 1));

var scale = requiredWidth / imp.Width;
var height = imp.Height * scale;

writer.DirectContent.AddTemplate(imp, scale, 0, 0, scale, left, zeroBottom - height);

var annots = reader.GetPageN(i + 1).GetAsArray(PdfName.ANNOTS);
if (annots != null && annots.Size != 0)
{
foreach (var a in annots)
{
var newannot = new PdfAnnotation(writer, new Rectangle(0, 0));
var annotObj = (PdfDictionary) PdfReader.GetPdfObject(a);
newannot.PutAll(annotObj);
var rect = newannot.GetAsArray(PdfName.RECT);
rect[0] = new PdfNumber(((PdfNumber)rect[0]).DoubleValue * scale + left); // Left
rect[1] = new PdfNumber(((PdfNumber)rect[1]).DoubleValue * scale); // top
rect[2] = new PdfNumber(((PdfNumber)rect[2]).DoubleValue * scale + left); // right
rect[3] = new PdfNumber(((PdfNumber)rect[3]).DoubleValue * scale); // bottom
writer.AddAnnotation(newannot);
}
}

document.NewPage();
}

}

foreach (var apprPdf in pdfs)
{
document.NewPage();

inlcudePdfInDocument(apprPdf.Pdf, null);
}

document.Close();
readers.ForEach(x => x.Close());
}

output.Position = 0;
return output;

PdfReader 有一个采用字节数组的构造函数,因此您可以将其调整为 MemoryStream。

关于c# - 通过 C# 复制 pdf 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com