3

我想在某个 x,y 位置贴一张便签。为此,我在 .net 中使用 pdfclown 注释类。以下是可用的。

    using files = org.pdfclown.files;
    public override bool Run()
    {
        files::File file = new files::File();
        Document document = file.Document;
        Populate(document);
        Serialize(file, false, "Annotations", "inserting annotations");
        return true;
    }

    private void Populate(Document document)
    {
        Page page = new Page(document);
        document.Pages.Add(page);
        PrimitiveComposer composer = new PrimitiveComposer(page);
        StandardType1Font font = new StandardType1Font(document, StandardType1Font.FamilyEnum.Courier, true, false);
        composer.SetFont(font, 12);
        annotations::Note note = new annotations::Note(page, new Point(78, 658), "this is my annotation...");
        note.IconType = annotations::Note.IconTypeEnum.Help;
        note.ModificationDate = new DateTime();
        note.IsOpen = true;
        composer.Flush();
    }

注释链接 这是在 78, 658 个坐标的空白 pdf 中放置一个便笺。

问题是我想要一个包含一些数据的特定 pdf 中的便笺。我该如何修改它...感谢您的帮助..

4

1 回答 1

4

我是PDF Clown的作者——这是将注释(如便笺)插入现有页面的正确方法:

using org.pdfclown.documents;
using annotations = org.pdfclown.documents.interaction.annotations;
using files = org.pdfclown.files;
using System.Drawing;

. . .

// Open the PDF file!
using(files::File file = new files::File(@"C:\mypath\myfile.pdf"))
{
  // Get the document (high-level representation of the PDF file)!
  Document document = file.Document;
  // Get, e.g., the first page of the document!
  Page page = document.Pages[0];

  // Insert your sticky note into the page!
  annotations::Note note = new annotations::Note(page, new Point(78, 658), "this is my annotation...");
  note.IconType = annotations::Note.IconTypeEnum.Help;
  note.ModificationDate = new DateTime();
  note.IsOpen = true;

  // Save the PDF file!
  file.Save(files::SerializationModeEnum.Incremental);
}

请考虑,关于保存文件的方式有很多选择(到输出(内存中)流,到不同的路径,作为压缩文件,作为附加文件......)。

如果您查看随库分发的 50 多个示例以及 API 文档,您会发现它的表现力和强大程度。它的架构严格遵守官方的 Adob​​e PDF Reference 1.7。

请享用!

于 2012-12-24T17:28:03.170 回答