Я создал программу чтения для входного файла и одну для файла разметки. Я не уверен, должен ли я перебирать аннотации, а затем добавлять их одну за другой к выходным данным, или есть способ извлечь все аннотации из файла разметки и добавить их во входной файл, сохраняя их координаты x, z.
У меня есть приведенный ниже код, и я не уверен, что делать в разделе комментариев. Метод AddAnnotation принимает только PdfAnnotation в качестве входных данных, но я не уверен, как преобразовать PdfDictionary в PdfAnnotaiton.
class Program
{
public static string inputFile = @"E:\pdf-sample.pdf";
public static string markupFile = @"E:\StampPdf.pdf";
public static string outputFile = @"E:\pdf.pdf";
public static PdfReader inputReader = new PdfReader(inputFile);
public static PdfReader markupReader = new PdfReader(markupFile);
static void Main(string[] args)
{
PdfDocument inputDoc = new PdfDocument(inputReader, new PdfWriter(outputFile));
PdfDocument markupDoc = new PdfDocument(markupReader);
int n = inputDoc.GetNumberOfPages();
for (int i = 1; i <= n; i++)
{
PdfPage page = inputDoc.GetPage(i);
PdfDictionary markupPage = markupDoc.GetFirstPage().GetPdfObject();
PdfArray annots = markupPage.GetAsArray(PdfName.Annots);
if(annots != null)
{
for(int j=0; j < annots.Size(); j++)
{
PdfDictionary annotItem = annots.GetAsDictionary(i);
//******
//page.AddAnnotation(?);
//******
}
}
}
inputDoc.Close();
}
}
Я попробовал другой вариант после того, как нашел новый метод GetAnnotations в iText7. Здесь код работает нормально, но я не могу открыть файл O/P и получаю сообщение об ошибке, что файл поврежден. Также, когда я запустил inputDoc.Close() вместо последней строки, приведенной ниже, я получил сообщение об ошибке «Косвенный объект Pdf принадлежит другому PDF-документу. Скопировать объект в текущий PDF-документ».
PdfReader ireader = new PdfReader(inputFile);
PdfDocument inputDoc = new PdfDocument(ireader, new PdfWriter(outputFile));
PdfReader mreader = new PdfReader(markupFile);
PdfDocument markupDoc = new PdfDocument(mreader);
var annots = markupDoc.GetFirstPage().GetAnnotations();
if (annots != null)
{
for (int j = 0; j < annots.Count(); j++)
{
inputDoc.GetFirstPage().AddAnnotation(annots[j]);
}
}
ireader.Close();
mreader.Close();
markupDoc.Close();
inputDoc.SetCloseWriter(true);