3

私はacまたはc ++ libを使用することを意味します。操作する。以前はcairo libを使用していましたが、pdfファイルは正常に作成されましたが、レイヤーは作成されませんでした。今、いくつかのレイヤーでpdfファイルを作成したいと考えています。

ありがとう

4

1 に答える 1

1

PDFNet SDKの一部として含まれているPDFLayersサンプルに示されているように、PDFレイヤー(オプションのコンテンツグループとも呼ばれます)を作成(読み取りおよび編集)できます。

関連するコードは次のとおりです。

    PDFNet.Initialize();
    PDFDoc doc;

    // Create three layers...
    OCG::Group image_layer = CreateLayer(doc, "Image Layer");
    OCG::Group text_layer = CreateLayer(doc, "Text Layer");
    OCG::Group vector_layer = CreateLayer(doc, "Vector Layer");

    // Start a new page ------------------------------------
    Page page = doc.PageCreate();

    ElementBuilder builder; // ElementBuilder is used to build new Element objects
    ElementWriter writer;   // ElementWriter is used to write Elements to the page  
    writer.Begin(page);     // Begin writing to the page

    // Add new content to the page and associate it with one of the layers.
    Element element = builder.CreateForm(CreateGroup1(doc, image_layer.GetSDFObj()));
    writer.WriteElement(element);

    element = builder.CreateForm(CreateGroup2(doc, vector_layer.GetSDFObj()));
    writer.WriteElement(element);

    // Add the text layer to the page...
    if (false)  // set to true to enable 'ocmd' example.
    {
        // A bit more advanced example of how to create an OCMD text layer that 
        // is visible only if text, image and path layers are all 'ON'.
        // An example of how to set 'Visibility Policy' in OCMD.
        Obj ocgs = doc.CreateIndirectArray();
        ocgs.PushBack(image_layer.GetSDFObj());
        ocgs.PushBack(vector_layer.GetSDFObj());
        ocgs.PushBack(text_layer.GetSDFObj());
        OCG::OCMD text_ocmd = OCG::OCMD::Create(doc, ocgs, OCG::OCMD::e_AllOn);
        element = builder.CreateForm(CreateGroup3(doc, text_ocmd.GetSDFObj()));
    }
    else {
        element = builder.CreateForm(CreateGroup3(doc, text_layer.GetSDFObj()));
    }
    writer.WriteElement(element);

    // Add some content to the page that does not belong to any layer...
    // In this case this is a rectangle representing the page border.
    element = builder.CreateRect(0, 0, page.GetPageWidth(), page.GetPageHeight());
    element.SetPathFill(false);
    element.SetPathStroke(true);
    element.GetGState().SetLineWidth(40);
    writer.WriteElement(element);

    writer.End();  // save changes to the current page
    doc.PagePushBack(page);

    // Set the default viewing preference to display 'Layer' tab.
    PDFDocViewPrefs prefs = doc.GetViewPrefs();
    prefs.SetPageMode(PDFDocViewPrefs::e_UseOC);

    doc.Save("my.pdf", SDFDoc::e_linearized, 0);

注:私はPDFNet開発者です。

于 2013-01-24T19:47:15.030 に答える